2011-02-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Assertion failure in DrawingAreaImpl::display when calling WKPageForceRepaint on a page that uses accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=54575
        <rdar://problem/8979594>

        Add test.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp: Added.
        (TestWebKitAPI::didForceRepaint):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/simple-accelerated-compositing.html: Added.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:

2011-02-16  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] Add support for layoutTestController.setWillSendRequestClearHeader
        https://bugs.webkit.org/show_bug.cgi?id=54537

        Added handler for resource-request-starting emitted in
        FrameLoader's willSendRequest(). The current implementation
        removes the headers set in setWillSendRequestClearHeader.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback):
        (createWebView):

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

        Reviewed by Andreas Kling.

        [Qt] Qt build system can't handle removing headers from tree
        https://bugs.webkit.org/show_bug.cgi?id=54466

        * Scripts/build-webkit: Remove Qt makefiles from productDir before build.

2011-02-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: chromium: DRT is crashing on the tests in inspector-enabled folder.
        https://bugs.webkit.org/show_bug.cgi?id=54548

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

2011-02-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77898.
        http://trac.webkit.org/changeset/77898
        https://bugs.webkit.org/show_bug.cgi?id=54541

        Leopard Debug hasn't compiled for a long time (Requested by
        abarth on #webkit).

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

2011-02-15  Xianzhu Wang  <wangxianzhu@google.com>

        Reviewed by Kent Tamura.

        Fixed a small bug about --no-timeout option.
        https://bugs.webkit.org/show_bug.cgi?id=52873

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

2011-02-15  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Allow controlling minimum DOMTimer interval on a per-page basis
        https://bugs.webkit.org/show_bug.cgi?id=54312

        Implemented new method setMinimumTimerInterval in
        LayoutTestController for all ports.

        * DumpRenderTree/LayoutTestController.cpp:
        (setMinimumTimerIntervalCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setMinimumTimerInterval):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMinimumTimerInterval):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMinimumTimerInterval):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMinimumTimerInterval):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMinimumTimerInterval):

2011-02-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Freetype] Better map CSS font weight to Fontconfig font weight
        https://bugs.webkit.org/show_bug.cgi?id=54323

        Add the WeightWatcher fonts to the list of sourced fonts when intializing
        DRT. This will allow us to pass tests that use WeightWatcher.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Source the WebkitWeightWatcher fonts.

2011-02-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Make new-run-webkit-tests --processes work under Windows' weird
        multiprocessing model. This requires us to be running a Python
        file that can be imported as a module, so I've modified the
        new-run-webkit-tests script to spawn a subprocess runing
        webkitpy.layout_tests.run_webkit_tests.py. I've also modified
        the manager_worker_broker tests because you can't pickle a
        nested class. This requires us to use globals to pass queues
        back and forth for testing, but the alternative is to pass extra
        arguments to start_worker() and that feels like a bad tradeoff
        just for testing.

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

        * Scripts/new-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:

2011-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9002047> and https://bugs.webkit.org/show_bug.cgi?id=54426
        WebFrameLoaderClient::shouldGoToHistoryItem needs implementation

        Add dummy implementations to keep our tools building.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):

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

2011-02-15  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style should do some detection for valid uses of WEBKIT_API (in chromium public api).
        https://bugs.webkit.org/show_bug.cgi?id=52271

        * Scripts/webkitpy/style/checkers/cpp.py: Added the check for WEBKIT_API usage.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests.

2011-02-14  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix minor regression introduced in r78522. For some reason, Python
        provides a platform.mac_ver() routine on Linux, so we need to
        check to make sure it's returning something in addition to
        checking for its existence.

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

2011-02-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        Clean up the way we handle platform names in
        new-run-webkit-tests. Previously, if you specified
        '--platform mac' or '--platform chromium-mac' on the command
        line, it would use that platform name to determine baseline search
        paths, etc. This is almost never the right thing to do, because
        it ignores the existence of version-specific baselines.
        
        So, I changed this so that ports that support versions must
        always use a version, and the version should default to the
        version of the operating system that the port is being run on
        (e.g., if you're running on Leopard, then passing '--platform
        mac' will default to the 'mac-leopard' port). This means that
        port.name() should always include a version-specific suffix if
        the port supports versions.

        However, we still support things like '--platform mac' as input
        so that the user doesn't have to explicitly specify a version,
        both for convenience and so we don't have to make buildbot
        configs more complicated than they already are.

        Also, I cleaned up how the baselines were being searched
        on the chromium-mac port (this is one of the two bugs that
        prompted this refactoring), and made the logic easier to follow
        and more consistent across the mac and chromium ports
        
        Lastly, I added a port.get_all_names() method that could be used
        to get the names of all of the ports to search, rather than having
        to guess (incorrectly) from the list of directories under
        LayoutTests/platform (this last thing was necessary because the
        deduplicate_tests unittest broke as the fallback dirs changed).

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

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:

2011-02-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        update-webkit hangs in a git-only checkout

        Previously it would hang forever trying to do a 'git svn
        rebase'. Now, it will default to a 'git pull' if the
        svn-remote.svn.fetch variable isn't set, and bail out if it
        doesn't know where to pull from.

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

        * Scripts/update-webkit:
        * Scripts/VCSUtils.pm:

2011-02-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        This patch modifies NRWT's Worker clas to use the new
        WorkerMixin class to actually run tests. With this patch, the
        multiprocess version of NRWT is fully functional and just needs
        the values for --worker-model and --child-processes to be corrected
        in the port/* classes to start using the new code by default.

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

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

2011-02-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        This patch shuffles code out of dump_render_tree_thread and
        single_test_runner and into a new worker_mixin class that will
        be shared by both TestShellThread and Worker. This change
        restores single_test_runner to its state as of r77606 - it is
        stateless again. It also prunes TestShellThread to pretty much
        just the logic used for the original shared-memory access.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py: Added.

2011-02-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        This patch updates NRWT to add per-worker and per-shard test stats
        into TestRunner2, bringing it to parity with TestRunner.

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

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

2011-02-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt multiprocessing: add code to handle interrupts and wedged
        threads.
        https://bugs.webkit.org/show_bug.cgi?id=54072

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        Adds the cancel(), is_alive(), join(), and log_wedged_worker()
        methods to the WorkerConnection class

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        Adds the cancel() method to the Worker class

2011-02-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        update the NRWT multiprocessing code to spawn multiple workers
        instead of just using one.

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

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

2011-02-12  Chang Shu  <cshu@webkit.org>

        Unreviewed.

        Update my own email addresses and IRC nickname.

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

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

        Reviewed by Tony Chang.

        This patch adds to NRWT most of the support needed to run the new
        message-based workers in separate threads or processes. The code
        isn't fully complete yet because we don't support cancel() or
        is_alive().

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

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-02-11  Sailesh Agrawal  <sail@chromium.org>

        Reviewed by Kenneth Russell.

        plugins/invalidate_rect.html fails on chromium-mac
        https://bugs.webkit.org/show_bug.cgi?id=54051

        This change fixes the invalidate_rect.html test failure on Windows.

        There were two problems. First, the test specified that the plugin was window less by doing <embed ... windowedPlugin="false"></embed>. The windowedPlugin parameter was never being read by the plugin. Fix was to simply set the NPPVpluginWindowBool variable based on the parameter.

        The second problem was that the plugin never handled paint events on Windows. Fix was to simply copy the Mac code to handle paint events.

        This change also updates the build path in chromium_win.py to use the new Source directory.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (invalidateRect):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (handleEventWin):
        (NPP_HandleEvent):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

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

        Reviewed by Andreas Kling.

        [Qt] Increase the timeout of Qt API tests to 120 seconds.

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

2011-02-10  Zhenyao Mo  <zmo@google.com>

        Unreviewed, build fix.

        * DumpRenderTree/DumpRenderTree.gypi:

2011-02-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        This patch adds the bulk of the remaining functionality for
        the NRWT message-passing implementation. The patch adds a new
        Worker class that will eventually replace the TestShellThread
        class in dump_render_tree_thread.py, and implements enough of
        TestRunner2 and the inline version of the manager_worker_broker
        to actually be able to send a full set of messages back and
        forth. The Worker stubs do not actually run tests, and there's
        lots of error handling and stats needed, but this is the core
        logic.

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

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py: Added.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-02-10  Zhenyao Mo  <zmo@google.com>

        Unreviewed, build fix.

        * DumpRenderTree/DumpRenderTree.gypi:

2011-02-10  Zhenyao Mo  <zmo@google.com>

        Unreviewed, build fix.

        * DumpRenderTree/DumpRenderTree.gypi:

2011-02-10  Zhenyao Mo  <zmo@google.com>

        Unreviewed, attempt to fix crashing plugin tests.

        * DumpRenderTree/DumpRenderTree.gypi:

2011-02-10  Zhenyao Mo  <zmo@google.com>

        Unreviewed, build fix.

        * DumpRenderTree/DumpRenderTree.gypi:

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

        Try and fix some crashing tests on the chromium build bot.

        * DumpRenderTree/DumpRenderTree.gypi:

2011-02-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Log an error if a plug-in test can't be found
        https://bugs.webkit.org/show_bug.cgi?id=54252

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::create):
        Return null if the test wasn't found.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        Report an error if PluginTest::create returns null.

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

        Reviewed by Laszlo Gombos.

        [Qt] Return menu items from eventSender.contextMenu()
        https://bugs.webkit.org/show_bug.cgi?id=53039

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

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

        Test showing and hiding the find indicator on Windows

        Test for <http://webkit.org/b/54213> <rdar://problem/8983261> REGRESSION (r78198): Crash in
        FindIndicator::contentImage when scrolling page

        Reviewed by Steve Falkenburg.

        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame): Record that the load finished.
        (TestWebKitAPI::findIndicatorCallback): Record that the callback was called, and save the
        bitmap.
        (TestWebKitAPI::initialize): Hook up our callbacks.
        (TestWebKitAPI::TEST): Test showing then hiding the find indicator to see if we crash.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::page):
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::page):
        Made page a const member function.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added the new test.

2011-02-10  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Log signals from AtkDocument interface also in AccessibilityController
        https://bugs.webkit.org/show_bug.cgi?id=54198

        Trace AtkDocument's signals emission through AccessibilityController.

        Also, taken the code related to adding and removing global
        listeners for ATK signals out to a separate file, for the sake of
        clarity and to ease future additions.

        * DumpRenderTree/gtk/AccessibilityCallbacks.h: Added.
        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp: Added
        (printAccessibilityEvent): Print information about an event.
        (axObjectEventListener): Global listener for AtkObject's signals.
        (axDocumentEventListener): Global listener for AtkDocument's signals.
        (connectAccessibilityCallbacks): Connect all global listeners.
        (disconnectAccessibilityCallbacks): Disconnect all global listeners.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::setLogAccessibilityEvents): Call to
        connectAccessibilityCallbacks and disconnectAccessibilityCallbacks.

        * GNUmakefile.am: Added new files.

2011-02-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Default error page is interfering with tests which require failed loads
        https://bugs.webkit.org/show_bug.cgi?id=54157

        Disable the default error page during DRT runs. This prevents unexpected loads
        from interfering with tests that have planned failed loads.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewLoadError): Added, disable default handler.
        (createWebView): Connect the new load-error handler.

2011-02-10  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Add UrlLoader and command line argument handling to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=54192
 
        Copy and modify files from QtTestBrowser's implementation.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::newWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp: Copied from QtTestBrowser/launcherwindow.cpp
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h: Copied from QtTestBrowser/launcherwindow.h
        (WindowOptions::WindowOptions):
        (MiniBrowserApplication::urls):
        (MiniBrowserApplication::isRobotized):
        (MiniBrowserApplication::robotTimeout):
        (MiniBrowserApplication::robotExtraTime):
        * MiniBrowser/qt/UrlLoader.cpp: Copied from QtTestBrowser/urlloader.cpp
        (UrlLoader::UrlLoader):
        (UrlLoader::loadNext):
        (UrlLoader::checkIfFinished):
        (UrlLoader::frameLoadStarted):
        (UrlLoader::frameLoadFinished):
        (UrlLoader::loadUrlList):
        (UrlLoader::getUrl):
        * MiniBrowser/qt/UrlLoader.h: Copied from QtTestBrowser/urlloader.h 
        * MiniBrowser/qt/main.cpp:
        (main):
        * MiniBrowser/qt/utils.cpp: Copied from QtTestBrowser/utils.cpp 
        (takeOptionValue):
        (formatKeys):
        (enumToKeys):
        (appQuit):
        (urlFromUserInput):
        * MiniBrowser/qt/utils.h: Copied from QtTestBrowser/utils.h

2011-02-10  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        check-webkit-style: Add -build/include exemption for Tools/MiniBrowser/qt
        https://bugs.webkit.org/show_bug.cgi?id=54200

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

2011-02-10  Peter Varga  <pvarga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove PCRE source from trunk
        https://bugs.webkit.org/show_bug.cgi?id=54188

        * wx/build/settings.py:

2011-02-10  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style should be able to figure out function modifiers and return type.
        https://bugs.webkit.org/show_bug.cgi?id=54124

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_rfind_in_lines): A way to search backwards in lines.
        (_FunctionState.modifiers_and_return_type):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests for the new functionality.

2011-02-09  Adam Roben  <aroben@apple.com>

        Test that WM_PRINT doesn't trigger an assertion

        Test for <http://webkit.org/b/54145> <rdar://problem/8979559> WM_PRINT doesn't work with new
        drawing area (assertion failure in DrawingAreaProxyImpl in Debug builds)

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp: Added.
        (TestWebKitAPI::TEST): Send a WM_PRINT message to a WKView.

2011-02-09  Adam Roben  <aroben@apple.com>

        Test that having a WKView paint after being resized while hidden doesn't cause a crash

        Test for <http://webkit.org/b/54142> <rdar://problem/8979365> Crash in
        DrawingAreaProxyImpl::paint when WKView paints after being resized while hidden

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
        (TestWebKitAPI::TEST): Force the WKView to paint after resizing it while hidden.

2011-02-09  Adam Roben  <aroben@apple.com>

        Add a test that resizes a WKView while it's hidden

        Test for <http://webkit.org/b/54141> <rdar://problem/8979195> WKView draws at wrong size,
        performs badly if is resized while hidden (assertion fails in
        BackingStore::incorporateUpdate in Debug builds)

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame): Record that the load finished.
        (TestWebKitAPI::setPageLoaderClient): Hook up our didFinishLoadForFrame callback.
        (TestWebKitAPI::flushMessages): Load a URL and wait for the load to complete. This ensures
        that all pending messages have been handled by the UI and web process.
        (TestWebKitAPI::timerCallback): Kill the timer and record that it fired.
        (TestWebKitAPI::runForDuration): Set a timer and run the run loop until it fires.
        (TestWebKitAPI::waitForBackingStoreUpdate): Wait for half a second to give the web process a
        chance to display, then flush all pending messages.
        (TestWebKitAPI::TEST): Resize the WKView while it's hidden, then show it again and wait for
        the backing store to update. This triggers the assertion from bug 54141.

        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::resizeTo): Implemented.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added new test.

2011-02-10  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after roll out of r78157...

        * GNUmakefile.am:

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

        Unreviewed, rolling out r78157.
        http://trac.webkit.org/changeset/78157
        https://bugs.webkit.org/show_bug.cgi?id=54150

        Fails on a bunch of bots

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSDestroyingPluginFromDestroyStream.cpp: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2011-02-10  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Reset GTK' DRT's AccessibilityController to consistent value before every test
        https://bugs.webkit.org/show_bug.cgi?id=54185

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

2011-02-10  Philippe Normand  <pnormand@igalia.com>

        Unreviewed GTK build fix.

        Adding
        Tools/DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSDestroyingPluginFromDestroyStream.cpp
        in the build, fixing the
        plugins/npruntime/evaluate-js-destroying-plugin-from-destroy-stream.html
        test.

        * GNUmakefile.am:

2011-02-10  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Add support in DRT to log "accessibility events"
        https://bugs.webkit.org/show_bug.cgi?id=54116

        Added a way to log accessibility related events, in a
        platform-dependant way.

        Add new function to AccessibilityController.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityController.cpp:
        (logAccessibilityEventsCallback): New callback.
        (AccessibilityController::getJSClass): Added new function.
        (AccessibilityController::resetToConsistentState): Initialized
        calling setLogAccessibilityEvents(false).

        Provided implementation for the GTK port.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (accessibility_event_listener): Common listener for logging
        information about all the signals emitted by any AtkObject.
        (AccessibilityController::setLogAccessibilityEvents): Add or
        remove listeners for signals, as specified by the parameter.

        Provide dummy implementations for mac and win ports.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::setLogAccessibilityEvents):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::setLogAccessibilityEvents):

2011-02-09  Hayato Ito  <hayato@chromium.org>

        Reviewed by Tony Chang.

        [NRWT] Remove encoding parameters where we can assume data can be
        written in binary mode.

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

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-02-09  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt multiprocessing: minor cleanup prior to implementing the new worker

        This patch renames AbstractManager to ManagerConnection and
        changes some argument names to be more consistent between
        manager_worker_broker and message_broker. It also fixes a couple
        of typos in message_broker. These changes will be tested by code
        introduced in the next patch.
       
        https://bugs.webkit.org/show_bug.cgi?id=54067

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker2.py:

2011-02-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Repro crash with Sony Google TV ad at Gizmodo
        https://bugs.webkit.org/show_bug.cgi?id=54150
        <rdar://problem/8782346>

        Add a new plug-in test that runs JavaScript that destroys the plug-in from within its NPN_DestroyStream callback.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSDestroyingPluginFromDestroyStream.cpp: Added.
        (EvaluateJSDestroyingPluginFromDestroyStream::EvaluateJSDestroyingPluginFromDestroyStream):
        (EvaluateJSDestroyingPluginFromDestroyStream::NPP_Destroy):
        (EvaluateJSDestroyingPluginFromDestroyStream::NPP_DestroyStream):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2011-02-09  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style: The error message about NULL should be more clear for comments.
        https://bugs.webkit.org/show_bug.cgi?id=53786

        * Scripts/webkitpy/style/checkers/cpp.py: Clarified the error message.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Fixed the corresponding test.

2011-02-09  Nebojsa Ciric  <cira@chromium.org>

        Reviewed by Darin Fisher.

        Implements Locale object of JavaScript internationalization API proposal, as an
        v8 extension. Extension code is hosted in v8 project (src/extensions/experimental/i18n-extension.{cc,h})
        and in this patch we just provide flags, tests and build rules for chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=49414

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

2011-02-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove UiTools dependency from MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=54096

        * MiniBrowser/qt/MiniBrowser.pro:

2011-02-08  Hayato Ito  <hayato@chromium.org>

        Reviewed by Tony Chang.

        [NRWT] Pull up rebaseline code from compare_output() function defined
        in text_diff.py and image_diff.py into a SingleTestRunner.

        This patch is a first step for eliminating test_type/* classes.

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

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.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:

2011-02-07  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Mihai Parparita.

        stop generating results.json files
        https://bugs.webkit.org/show_bug.cgi?id=53977

        We've only used incremental_results.json for a while now
        and there are plans to start generating a results.json file that matches
        the format of unexpected_results.json.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-02-08  Sailesh Agrawal  <sail@chromium.org>

        Reviewed by Kenneth Russell.

        Invalidate rect doesn't work for windowless plugins on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=53117

        Added two new utility methods.
        - layoutTestController.displayInvalidatedRegion() does a paint of any area that has been invalidated. This is different from layoutTestController.display() which explicitly invalidates the entire page then paints.
        - plugin.invalidateRect(left, top, right, bottom) - invalidates the given rect
        This is used to test that invalidating a rect correctly causes a repaint of the plugin.

        * DumpRenderTree/LayoutTestController.cpp:
        (displayInvalidatedRegionCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (invalidateRect):
        (pluginInvoke):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::displayInvalidatedRegion):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-02-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: move the logic that starts and stops the
        servers from dump_render_tree_thread into single_test_runner
        so that we can reuse it in the new multiprocessing worker class
        as well.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
 
2011-02-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: split out thread stack logging code into a sharable module

        This patch splits out the code used to find and log thread
        stacks from NRWT-specific packages to something generic and
        shareable by other python modules. It will be shared in the near
        future by the manager_worker_broker module, for example.

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

        * Scripts/webkitpy/common/system/stack_utils.py: Added.
        * Scripts/webkitpy/common/system/stack_utils_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:

2011-02-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: move a bunch of testing logic out of
        dump_render_tree_thread and into single_test_runner so that we
        will be able to reuse it in the new multiprocessing worker class as well.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:

        
2011-02-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: remove no longer needed WatchableThread
        class.

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

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

2011-02-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: add stubs for the Manager objects that
        will abstract the concurrency implementation (inline / threads /
        processes). These classes do nothing yet and are not wired up to
        anything.

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

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py: Added.

2011-02-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: add simplified message broker for new-style
        messaging. This change adds a very simple message broker that
        will be used to shuttle messages between the TestRunner2 manager
        thread and the Worker threads. For now the class is not used by
        anything, but the eventual usage can be seen in the patches
        attached to bug 49566.

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

        * Scripts/webkitpy/layout_tests/layout_package/message_broker2.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker2_unittest.py: Added.

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

        Reviewed by Dimitri Glazkov.

        chromium-win builder shouldn't run python or perl tests
        https://bugs.webkit.org/show_bug.cgi?id=54032

        These tests don't pass on this builder because the builder isn't
        running in cygwin.  There isn't really any point in running them and
        making the bot red forever.

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

2011-02-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8972913> and https://bugs.webkit.org/show_bug.cgi?id=54036
        didChangeBackForwardList should include some context about what changed

        * MiniBrowser/mac/BrowserWindowController.m:
        (didChangeBackForwardList):

2011-02-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WK2: Add ability to pass context to policy delegate methods
        https://bugs.webkit.org/show_bug.cgi?id=54031

        * MiniBrowser/mac/BrowserWindowController.m:
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):
        (decidePolicyForMIMEType):
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction):
        (TestWebKitAPI::decidePolicyForNewWindowAction):
        (TestWebKitAPI::decidePolicyForMIMEType):
        Update policy client for new API.

2011-02-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DRT needs an implementation of LayoutTestController.setIconDatabaseEnabled
        https://bugs.webkit.org/show_bug.cgi?id=54033

        Add an implementation of LayoutTestController.setIconDatabaseEnabled that just
        call DumpRenderTreeSupportGtk. Turn off the icon database between tests.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Turn off the icon database.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setIconDatabaseEnabled): Call the appropriate DumpRenderTreeSupportGtk
        method.

2011-02-08  Kundu Suchismita  <suchi.kundu@nokia.com>

        Reviewed by Laszlo Gombos.

        Local Storage settings can be enable/disable from "Develop" menu
        https://bugs.webkit.org/show_bug.cgi?id=52296

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleLocalStorage):
        (LauncherWindow::toggleOfflineStorageDatabase):
        (LauncherWindow::toggleOfflineWebApplicationCache):
        (LauncherWindow::setOfflineStorageDefaultQuota):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-02-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] EventSender.keyDown does not support non-array modifier arguments
        https://bugs.webkit.org/show_bug.cgi?id=53962

        Support handling either an array or a string for the modifier argument
        to EventSender.keyDown.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gdkModifierFromJSValue): Added this helper which factors out the
        string comparison bits.
        (gdkModifersFromJSValue): Test up front whether the value is a string,
        to handle it specially.

2011-02-08  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Csaba Osztrogonác.

        openDatabaseSync() stop responding after too many call
        https://bugs.webkit.org/show_bug.cgi?id=53945

        Reset the database quota to a known state between each test.

        Define a quota for the known origins at each test run and delete
        all the databases.
        This way, the database related test do not depend on previous
        allocations.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::dumpDatabaseQuota):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):

2011-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] DRT's TextInputController is unimplemented on GTK
        https://bugs.webkit.org/show_bug.cgi?id=52997

        Initial implementation of TextInputController for GTK port.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewWindowObjectCleared):
        * DumpRenderTree/gtk/TextInputController.cpp: Added.
        (setMarkedTextCallback):
        (insertTextCallback):
        (unmarkTextCallback):
        (firstRectForCharacterRangeCallback):
        (selectedRangeCallback):
        (getClass):
        (makeTextInputController):
        * DumpRenderTree/gtk/TextInputController.h: Added.
        * GNUmakefile.am:

2011-02-07  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        clean up python imports
        https://bugs.webkit.org/show_bug.cgi?id=53966

        Convert "import A.B.C.D as D" to "from A.B.C import D" and
        make some imports absolute as required by PEP-8

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/net/irc/ircbot.py:
        * Scripts/webkitpy/common/system/logutils.py:
        * Scripts/webkitpy/common/system/logutils_unittest.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/mac.py: Remove some unused imports
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/prettydiff.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/roll.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/main.py:

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

        Reviewed by Adam Barth.

        Teach do-webcore-rename about the WebKit move to Source/
        https://bugs.webkit.org/show_bug.cgi?id=53967

        * Scripts/do-webcore-rename:

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

        Reviewed by Dan Bernstein.

        Add resource load client for injected bundle and move willSendRequest there
        https://bugs.webkit.org/show_bug.cgi?id=53972

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didCreatePage):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        (WTR::InjectedBundlePage::didReceiveContentLengthForResource):
        (WTR::InjectedBundlePage::didFinishLoadForResource):
        (WTR::InjectedBundlePage::didFailLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

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

        Add Leopard Debug back to the core builders.

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

2011-02-07  Adam Klein  <adamk@chromium.org>

        Reviewed by Jian Li.

        [chromium] Remove deprecated method WebNotification::dir
        https://bugs.webkit.org/show_bug.cgi?id=53735

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

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

        Reviewed by Eric Seidel.

        Remove Leopard Debug as a core builder
        https://bugs.webkit.org/show_bug.cgi?id=53971

        The Leopard Debug builder has been failing to compile for several days.
        My understanding is that folks are working on fixing the build, but for
        the time being we should probably remove it from the list of core
        builders so that the core waterfall can be green.  We can certainly add
        it back once the build is fixed.

        Also, I've removed the Tiger builders because those no longer appear to
        be attached to the buildbot master.

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

2011-02-01  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Roben.

        include svn revisions in git diffs for the code review tool to use
        https://bugs.webkit.org/show_bug.cgi?id=53569

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

2011-02-03  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Fisher.

        [Chromium] Should implement EditorClientImpl::requestCheckingOfString()
        https://bugs.webkit.org/show_bug.cgi?id=51013

        Gave DRT implementation for requestTextCheck().

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled): Implemented.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (invokeFinishLastTextCheck): Added.
        (WebViewHost::requestTextCheck): Added.
        (WebViewHost::finishLastTextCheck): Added.
        * DumpRenderTree/chromium/WebViewHost.h:

2011-02-07  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        [Gtk] Implement layoutTestController.findString
        https://bugs.webkit.org/show_bug.cgi?id=50237

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

2011-02-07  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Darin Adler.

        We should disable spatial navigation explicitly during the initialization
        of DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=53928

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

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

        Not reviewed.

        Fix WebKitTestRunner build on the SL bot.

        * WebKitTestRunner/Configurations/Base.xcconfig: Look for the JSC copy
        of ICU headers.

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

        Unreviewed.

        [Qt][WK2] Buildfix after r77794.

       WebKitTestRunner does not block remote resources or complain about them
       https://bugs.webkit.org/show_bug.cgi?id=42139
       <rdar://problem/8183942>

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Add missing includepaths.

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

        Not reviewed.

        More bot appeasement.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

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

        Not reviewed.

        Remove accidental references to directories on my laptop.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

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

        Reviewed by Antti Koivisto.

        WebKitTestRunner does not block remote resources or complain about them
        https://bugs.webkit.org/show_bug.cgi?id=42139
        <rdar://problem/8183942>

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame): Implement the required
        checks (using KURL, to avoid need to invent a whole URL API).
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Link WebCore
        directly to get at KURL symbols.

2011-02-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Daniel Bates.

        Add WebKit2 bot to list of expected builders in Python regression test results.
        https://bugs.webkit.org/show_bug.cgi?id=53905

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

2011-02-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ryosuke Niwa.

        Update test expectations for new core builder
        https://bugs.webkit.org/show_bug.cgi?id=53904

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

2011-02-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by David Levin.

        Add WebKit2 test bot to core builders
        https://bugs.webkit.org/show_bug.cgi?id=53901

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

2011-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        Another unreviewed Chromium build fix.

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

2011-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Chromium build fix.

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

2011-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
        https://bugs.webkit.org/show_bug.cgi?id=52867

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (Image::craeteFromStdin): Call adoptArrayPtr.

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

        Reviewed by Ojan Vafai.

        Add classes for representing test outputs.
        https://bugs.webkit.org/show_bug.cgi?id=52136

        These classes will make it easier to write scripts that deal with test
        outputs such as rebaselining and deduping scripts. The intent is that
        eventually we will be have buildbot return TestOutputs for a
        particular build which can be compared with TestOutputs derived from a
        local LayoutTests directory.

        * Scripts/webkitpy/common/net/testoutput.py: Added.
        * Scripts/webkitpy/common/net/testoutput_unittest.py: Added.
        * Scripts/webkitpy/common/net/testoutputset.py: Added.
        * Scripts/webkitpy/common/net/testoutputset_unittest.py: Added.
        * Scripts/webkitpy/common/system/zip_mock.py: Added.

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

        Reviewed by Andreas Kling.

        [Qt] Clear page's groupName even when not in DRT
        https://bugs.webkit.org/show_bug.cgi?id=53874

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

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

        Reviewed by Andreas Kling.

        [CMake] Add dependencies for Visual Studio projects
        https://bugs.webkit.org/show_bug.cgi?id=53773

        Add a WebKit dependecy to WinCELauncher, so CMake can 
        generate the correct build order for the solution.

        * CMakeListsWinCE.txt:

2011-02-06  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] MiniBrowser: Clean up handling of titleChanged() signal
        https://bugs.webkit.org/show_bug.cgi?id=53869

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView): Remove unnecessary titleChanged() handling.
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow): Connect titleChanged() directly to setWindowTitle().
        * MiniBrowser/qt/BrowserWindow.h:

2011-02-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        WebKitTestRunner needs layoutTestController.setWillSendRequestReturnsNull
        https://bugs.webkit.org/show_bug.cgi?id=42690
        <rdar://problem/8213851>

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::willSendRequestReturnsNull):
        (WTR::LayoutTestController::setWillSendRequestReturnsNull):

2011-02-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77720.
        http://trac.webkit.org/changeset/77720
        https://bugs.webkit.org/show_bug.cgi?id=53854

        "Broke nrwt on Chromium win." (Requested by dglazkov|away on
        #webkit).

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

2011-02-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77725.
        http://trac.webkit.org/changeset/77725
        https://bugs.webkit.org/show_bug.cgi?id=53844

        It broke Qt minimal build (Requested by Ossy_ on #webkit).

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-02-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Barth.

        [GTK] plugins/plugin-document-back-forward.html fails
        https://bugs.webkit.org/show_bug.cgi?id=53833

        Add the new "alert on load" functionality for the Unix version of the
        test plugin. This functionality was originally introduced in r77706.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance): Add new plugin fuctionality.

2011-02-04  Kundu Suchismita  <suchi.kundu@nokia.com>

        Reviewed by Andreas Kling.

        Local Storage settings can be enable/disable from "Develop" menu
        https://bugs.webkit.org/show_bug.cgi?id=52296

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleLocalStorage):
        (LauncherWindow::toggleOfflineStorageDatabase):
        (LauncherWindow::toggleOfflineWebApplicationCache):
        (LauncherWindow::setOfflineStorageDefaultQuota):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-02-04  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        get test-webkitpy running on win32 python
        https://bugs.webkit.org/show_bug.cgi?id=53822

        The test harness crashes with a WindowsError because it can't find
        'svn' when using subprocess.Popen.  This gets us past the error
        so we can see the failing tests on the Chromium Win Release Tests
        bot.

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

2011-02-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] fast/events/pagehide-timeout.html fails
        https://bugs.webkit.org/show_bug.cgi?id=53771

        Add knowledge of the document browser cache model the DRT. When resetting
        WebKit settings to consistent values between tests, default to the document
        browser cache model.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Reset the cache model to the document browser
        cache model between tests.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCacheModel): An int value of 2 here corresponds to the
        document browser cache model.

2011-02-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        PluginDocuments don't create widgets for plugins on back/forward
        https://bugs.webkit.org/show_bug.cgi?id=53474

        Teach the test plugin how to call alert on load.

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

2011-02-04  Adam Roben  <aroben@apple.com>

        Add a test case for encode/decode of FormData/FormDataElement

        If the fix made in r77401 is broken, this new test will crash.

        Fixes <http://webkit.org/b/53616> <rdar://problem/8949883>.

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Test.h: Moved the bulk of TEST_ASSERT into a new _TEST_ASSERT_HELPER macro.
        Added a new TEST_ASSERT_RETURN macro that can be used in functions with a return value.

        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame): Record that the load is finished.
        (TestWebKitAPI::setPageLoaderClient): Hook up the loader client.
        (TestWebKitAPI::createSessionStateContainingFormData): Load simple-form.html, submit the
        form, an return the session state data.
        (TestWebKitAPI::TEST): Create some session state that contains form data from one WKPage,
        and restore it into another WKPage.

        * TestWebKitAPI/Tests/WebKit2/simple-form.html: Added.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:
        Added new files.

2011-02-04  Adam Roben  <aroben@apple.com>

        Move code to run JavaScript tests into its own files

        This will allow other tests to use this mechanism.

        Fixes <http://webkit.org/b/53806> SpacebarScrolling should share its JavaScript-fu with the
        world

        Reviewed by Sam Weinig.

        * TestWebKitAPI/JavaScriptTest.cpp: Added.
        * TestWebKitAPI/JavaScriptTest.h: Added.
        Moved code here...

        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp: ...from here.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Added the new files.

2011-02-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        merge test expectations for chromium, chromium-gpu. The
        chromium-gpu port will no longer maintain its own
        test expectations file.

        Also add in a graphics_type() call on the port object to
        determine what graphics type to use in the test configuration,
        and log the configuration as a config setting.

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2011-02-04  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix processing Unicode literals from .js sources in check-inspector-strings.
        https://bugs.webkit.org/show_bug.cgi?id=53781

        * Scripts/check-inspector-strings:

2011-02-04  Adam Roben  <aroben@apple.com>

        Include the crashing function in the link to a crash log on Mac

        Fixes <http://webkit.org/b/53780> Crash log links in results.html should include the
        function that crashed on Mac

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (crashLocation): Moved all the Windows code inside an if instead of using an early return,
        but didn't otherwise change it. Added an if for Mac that parses the crashing function out of
        the crash log.

2011-02-04  Adam Roben  <aroben@apple.com>

        Link to Mac crash logs from results.html

        Fixes <http://webkit.org/b/14861> run-webkit-tests should link to Mac crash logs in
        results.html

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (captureSavedCrashLog): Added a case for Apple's Mac port. We get the crash log out of
        ~/Library/Logs/CrashReporter, and wait for ReportCrash to exit before trying to get the log.

2011-02-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Need WebKit2 equivalent of WebResourceLoadDelegate::willSendRequest in the Bundle
        https://bugs.webkit.org/show_bug.cgi?id=52897
        <rdar://problem/8898294>

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2011-02-03  Ivan Krstić  <ike@apple.com>

        Unreviewed.

        Adding myself to committers.py.

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

2011-02-03  James Kozianski  <koz@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add navigator.registerProtocolHandler behind a flag.
        https://bugs.webkit.org/show_bug.cgi?id=52609

        * Scripts/build-webkit:

2011-02-03  Hayato Ito  <hayato@chromium.org>

        Reviewed by Eric Seidel.

        [NRWT] Remove TestArgs class, which is wrongly used.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2011-02-03  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by Kenneth Russell.

        Change ENABLE_3D_CANVAS to ENABLE_WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=53714

        * Scripts/build-webkit: change --3d-canvas build option
          to set ENABLE_WEBGL

2011-02-03  Hayato Ito  <hayato@chromium.org>

        Reviewed by Tony Chang.

        [NRWT] Introduces Input/Output class used by base.Driver into port/base.py and
        move _run_single_test() and _process_output() functions from
        dump_render_tree_thread.py to a single_test_runner.py as an individual module.

        This is clean up and acts as a preparation for elimination of test_types/*
        classes. These classes will move to the single_test_runner module introduced
        in this patch.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/test_input.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_output.py: Removed.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

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

        Unreviewed, build fix.

        Delete a line that was accidentally missed in r77586; without it
        there is still a race between the two threads.

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

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

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

        Reviewed by Tony Chang.

        nrwt: handle "broken pipe" notifications from DRT more cleanly.

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

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:

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

        Reviewed by Kenneth Russell.

        Update, resubmit change to bug 51572. I think the race that was
        fixed in r76703 caused the hang that caused us to roll this
        patch out before, so I'd like to try again.

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

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

2011-02-03  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed.

        Adding myself to committers.py.

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

2011-02-03  Adam Roben  <aroben@apple.com>

        Include the crashing function in the link to a crash log

        Fixes <http://webkit.org/b/53739> Crash log links in results.html should include the
        function that crashed

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (crashLocation): Added. Returns the location of the crash.
        (linksForErrorTest): Include the crash location in the link text for the crash log, if one
        could be determined.

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

        Unreviewed, build fix.

        Actually make the changes suggested by Mihai in his review
        of bug 53720 :(

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

        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:

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

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: Fix bug introduced in r77434 that was
        causing us to run the canvas GPU tests on the Mac GPU port. This
        bug revealed that we were not setting the port.name() field
        properly in many cases, so I've cleaned up all of that code, and
        removed a few comments about "version-specific" GPU ports that
        don't exist and just confused things.

        Testing also revealed that port.abspath_for_test() wasn't
        normalizing paths on Windows properly, so I fixed that as well.

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

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

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: fix normalization of paths on windows when gathering files

        r77434 introduced a bug that was causing the test expectations
        for the GPU ports to not be treated properly. It turns out that
        when we gathered the list of test files on Windows, we would
        return paths of the form "c:\LayoutTests/fast/canvas", and the
        mixture of backslashes and forward slashes was confusing things.

        This patch normalizes all of the filenames returned from
        test_files.find(), and adds better tests for this (fixing a
        couple of other bugs found in the meantime).

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

        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:

2011-02-03  Adam Roben  <aroben@apple.com>

        Add links to Windows crash logs in results.html

        Fixes <http://webkit.org/b/53718> run-webkit-tests should link to Windows crash logs in
        results.html

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (top level): Added $crashLogTag and $windowsCrashLogFilePrefix (which came from
        createDebuggerCommandFile).
        (testCrashedOrTimedOut): If the test crashed, capture any saved crash log after the dump
        tool has exited.
        (captureSavedCrashLog): Added. Finds the crash log for the test that just crashed and moves
        it into the test results directory tree. Only implemented for Cygwin currently.
        (findNewestFileMatchingGlob): Added. Does what it says.
        (htmlForResultsSection): Only link to files that exist.
        (linksForErrorTest): Add a link to the crash log.
        (deleteExpectedAndActualResults): Delete any old crash log for this test.
        (createDebuggerCommandFile): Use the new $windowsCrashLogFilePrefix constant instead of
        hardcoding it here.

2011-02-03  Adam Roben  <aroben@apple.com>

        Tell the debugger the path to the WebKit source tree when saving a crash log

        This allows the debugger to include the crashing line of code in the log.

        Fixes <http://webkit.org/b/53678> Crash logs from buildslaves don't show the crashing line
        of code

        Reviewed by Sam Weinig.

        * Scripts/old-run-webkit-tests:
        (createDebuggerCommandFile): Added. Saves commands that we'd like the debugger to run to a
        file and returns the path to that file. The commands we pass came from
        setUpWindowsCrashLogSaving, but I've added a .srcpath command to tell the debugger where the
        WebKit source code lives.
        (setUpWindowsCrashLogSaving): Instead of specifying the commands directly on the command
        line using -c, save them to a file and specify the path to that file using -cf. This works
        around what is presumably a bug in Windows's command line parsing, where having multiple
        quoted paths in the debugger commands causes the post-mortem debugger not to be invoked at
        all. Also pulled the options we pass to the debugger out into a list that is then join()ed
        together to make them easier to modify in the future.

2011-02-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add notification of the end of a rubber band.
        <rdar://problem/8940648>

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        Stub out the new WKUIClient function.

2011-02-03  Gabor Rapcsanyi  <rgabor@webkit.org>

        Unreviewed.

        Adding myself to committers.py.

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

2011-02-03  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] MiniBrowser's window size should be 800x600
        https://bugs.webkit.org/show_bug.cgi?id=53670

        Make layout test failure debugging easier.
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):

2011-02-02  Andy Estes  <aestes@apple.com>

        Reviewed by Mark Rowe.

        'update-webkit' should handle OpenSource and Internal using different
        VCSs.

        * Scripts/update-webkit: Re-check the VCS type when updating Apple's
        Internal directory.

2011-02-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: hardcode the directories to scan for tests
        for GPU bots instead of SKIPping them. See bug 53562 for some
        context, but we will now hard-code the list of directories to
        use by default instead of skipping over directories in the
        expectations file. We do this so that we will be able to merge
        the expectations files without getting conflicting SKIP
        directives. Note that this change will reduce the # of tests
        being run on the Mac GPU bots, because we're accidentally
        including some today.

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2011-02-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Add ChromeClient function to paint custom overhang areas.
        https://bugs.webkit.org/show_bug.cgi?id=53639

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        Stub out new callback.

2011-02-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: support chromium code paths in mock_drt

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

        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:

2011-02-02  Adam Klein  <adamk@chromium.org>

        Reviewed by Tony Chang.

        Update new-run-webkit-tests --chromium to put output under Source/...
        https://bugs.webkit.org/show_bug.cgi?id=53612

        * BuildSlaveSupport/test-result-archive:
        * Scripts/webkitpy/layout_tests/port/chromium.py:

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

        Reviewed by Eric Seidel.

        [chromium] remove --use-test-shell from NRWT
        https://bugs.webkit.org/show_bug.cgi?id=53346

        I've already started removing some of the bindings like eventSender so
        this already doesn't work isn't useful.  Also updated some comments to
        refer to DRT instead of test_shell.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2011-02-02  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        Implement basic media statistics on media elements.
        https://bugs.webkit.org/show_bug.cgi?id=53322

        * Scripts/build-webkit:

2011-02-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes for wxWebKit.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setSerializeHTTPLoads):
        * wx/browser/wscript:
        * wx/build/build_utils.py:
        * wx/build/settings.py:

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

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: stop skipping so many tests

        r77163 introduced a regression where we weren't resetting test
        expectations properly and were skipping too many tests as a
        result. This patch fixes that and adds a test for it.

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

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

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

        Reviewed by Tony Chang.

        new-run-webkit-tests: add first stub of test_runner2. This
        will add support for the 'inline', 'threads', and 'processes'
        flags to --worker-model, but for now the implementatios just
        fall back on the old ones.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

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

        Reviewed by James Robinson.

        [Chromium] run-chromium-webkit-unit-tests looks for binaries in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=53522

        * Scripts/run-chromium-webkit-unit-tests:

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

        Reviewed by Mihai Parparita.

        Using Control-C to cancel webkit-patch or other python tools causes
        unpleasant traceback console spew
        https://bugs.webkit.org/show_bug.cgi?id=53462

        Catch the exception and don't print the stack trace.

        * Scripts/webkit-patch:

2011-02-01  Scott Cameron  <sccameron@rim.com>

        Reviewed by Daniel Bates.

        Use Windows format for MinGW HTTPD path.
        https://bugs.webkit.org/show_bug.cgi?id=53503

        * Scripts/webkitperl/httpd.pm:
          - Use single-quotes around MySys value for $httpdPath in getHTTPDPath()
            so that we don't have to escape the space characters in the path. Also,
            changed path to Windows-style path and removed FIXME comment.

2011-02-01  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Add a way to use shared process model in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=53090

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView): Removed the m_context member.
        From now the context is guaranteed to be non-null and we
        don't need to store that in the object.
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        Added static bool to determine that new windows need to be
        created with their own context or not. Use the same context
        and web process by default to be inilne with the other ports.
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::newWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/main.cpp:
        (main): Added command line switch to be able to use the
        non-shared process model. Simplify the handling of the command line
        switches a little bit.

2011-02-01  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Add Window menu and Toggle FullScreen action to MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=53491

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::toggleFullScreenMode):
        * MiniBrowser/qt/BrowserWindow.h:

2011-02-01  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Add Toggle Frame Flattening, Auto Load Images and Disable JavaScript actions to MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=53489

        Add Toggle Frame Flattening action to Develop menu. Add Auto Load Images and Disable JavaScript actions
        to Settings menu.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::toggleFrameFlattening):
        (BrowserWindow::toggleDisableJavaScript):
        (BrowserWindow::toggleAutoLoadImages):
        * MiniBrowser/qt/BrowserWindow.h:

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

        Reviewed by Tony Chang.

        [Chromium] Switch chromium-mac to use ChromiumDriver
        https://bugs.webkit.org/show_bug.cgi?id=53461
        
        For the sake of consistency with the other Chromium platforms (and so
        that chromium-mac picks up special flags like --enable-hardware-gpu),
        switch chromium-mac from the WebKitDriver to ChromiumDriver.

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

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

        Reviewed by Mihai Parparita.

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

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

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

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

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

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

2011-01-31  Scott Cameron  <sccameron@rim.com>

        Reviewed by Daniel Bates.

        update run-webkit-httpd to be able to launch Apache2.2 in a MSYS environment
        https://bugs.webkit.org/show_bug.cgi?id=50036

        This will add an Apache2.2 configuration file and modifies scripts to allow
        running an httpd server in an MSYS environment.

        The default Apache2.2 installation path has been preserved and PHP5 modules disabled
        in order to allow for simple installation/execution.  Simply install the latest
        Apache2.2 version with OpenSSL from http://httpd.apache.org/download.cgi#apache22 to
        be able to execute run-webkit-httpd.
        

        * Scripts/run-webkit-httpd:
        * Scripts/webkitperl/httpd.pm:

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

        Reviewed by Eric Seidel.

        mac DRT should report RTL scroll offset relative to top right corner
        https://bugs.webkit.org/show_bug.cgi?id=53324

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

2011-01-31  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Add Take Screen Shot action to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=53422

        Add Take Screen Shot action to MiniBrowser's view menu.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::screenshot):
        * MiniBrowser/qt/BrowserWindow.h:

2011-01-31  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] REGRESSION:  http/tests/media/video-{cookie,referer}.html failing
        https://bugs.webkit.org/show_bug.cgi?id=53379

        Remove left over #ifdef's. I thought all of the conditional code
        had been freed from the condition, but I forgot to check DRT.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAlwaysAcceptCookies):

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

        Unreviewed, build fix.

        Fix regression introduced in r77093 - path.rsplit() doesn't
        take keyword arguments.

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

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

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

        Reviewed by Mihai Parparita.

        Add more unit tests for rebaseline-chromium-webkit-tests. This
        change involves restructuring a bunch of r-c-w-t code to make it
        more testable as well. We also add wrapper classes for handling
        testing zip files and fetching URLs.

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

        * Scripts/webkitpy/common/system/urlfetcher.py:
        * Scripts/webkitpy/common/system/urlfetcher_mock.py:
        * Scripts/webkitpy/common/system/zipfileset_mock.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

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

        Reviewed by Eric Seidel.

        Clean up of the filesystem-related modules used in webkitpy.
        I've added relpath() to the filesystem interface, modified
        ospath.relpath() so that it could work with the filesystem
        interface, and modified the fileset* routines to use the
        filesystem interface consistently.

        This patch also adds a close() routine to the fileset routines
        to indicate that the caller is done with the fileset. This
        allows zipfileset to clean up after itself when it creates
        tempfiles to store downloads.

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

        * Scripts/webkitpy/common/system/directoryfileset.py:
        * Scripts/webkitpy/common/system/fileset.py:
        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        * Scripts/webkitpy/common/system/ospath.py:
        * Scripts/webkitpy/common/system/zipfileset.py:
        * Scripts/webkitpy/common/system/zipfileset_unittest.py:

2011-01-30  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2]REGRESSION (r76991): Fix build errors
        https://bugs.webkit.org/show_bug.cgi?id=53400

        Revert the temporary build fix (http://trac.webkit.org/changeset/77088)
        and remove WebKit2Prefix.h from the build.
        * MiniBrowser/qt/MiniBrowser.pro:

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

        Unreviewed.

        [Qt][WK2] Buildfix.

        * MiniBrowser/qt/MiniBrowser.pro:

2011-01-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.
        
        define NOMINMAX when building ImageDiff, as we do elsewhere.

        Add various clampToInt() methods to MathExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=52910

        * DumpRenderTree/win/ImageDiffCommon.vsprops:

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

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setPOSIXLocale
        https://bugs.webkit.org/show_bug.cgi?id=42682

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::resetLocalSettings):
        (WTR::InjectedBundle::didReceiveMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setPOSIXLocale):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-01-28  Dirk Pranke  <dpranke@chromium.org>
 
         Reviewed by Mihai Parparita.
 
         test-webkitpy: fix webkitpy.layout_tests.port.mac_unittest.MacTest.test_skipped_file_paths
 
         This patch re-enables this test and changes it to
         handle all of the mac platform versions, not just the one
         it is running on.
 
         https://bugs.webkit.org/show_bug.cgi?id=53356
 
         * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
 
2011-01-28  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Take two. The fix in 77023 didn't work, because we were
        still calling path.abspath_to_uri, which calls _cygpath under
        the covers, and it appears the cygpath on the bots does
        something different than it does on my machine. This patch
        removes the calls to path.abspath_to_uri, so it should be safe.
        If it doesn't work, I'll roll it out along with r76982 and 77023.

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

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

2011-01-28  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/8930699> build-webkit gives a bogus warning with newer versions of Xcode 
        <http://webkit.org/b/53353>

        Reviewed by Mark Rowe.

        * Scripts/webkitdirs.pm:
        (checkRequiredSystemConfig): Check the Xcode marketing version
        in addition to the DevCoreTools build version before complaining
        about an old version of Xcode.  Also make the Mac OS X version
        check use Perl's built-in version string comparitor.

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

        Unreviewed, build fix.

        Work around breakage on Win 7 Release bot caused by r76982
        and the fact that windows ports use "file:////" instead of
        "file:///". Ideally the test code should be isolated from
        this, but it isn't yet. Will fix properly in a bit.

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

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

        Reviewed by Tony Chang.

        new-run-webkit-tests: change worker model values to
        "old-inline", "old-threads" in preparation for test_runner2 /
        multiprocessing changes.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

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

        Reviewed by Tony Chang.

        committers.py - add an IRC nickname for dpranke
        https://bugs.webkit.org/show_bug.cgi?id=53335

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

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

        Reviewed by Tony Chang.

        new-run-webkit-tests: add a "mock DRT" port implementation
        and a separate class that emulates what we expect the
        DumpRenderTree behavior to be.

        This will eventually replace port/dryrun.py and allow us to get
        better test coverage of the new-run-webkit-tests code as well as
        a reference for what new-run-webkit-tests expects from DRT.

        This is the first attempt at this, and it is pretty bare-boned. It
        really only has been tested on the 'mac' port (and a little on
        the 'chromium-mac' port.

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

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py: Added.
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/test.py:

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

        Unreviewed. Removing .swp file checked in by mistake.

        * Scripts/.webkitdirs.pm.swp: Removed.

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

        Reviewed by David Kilzer.

        Space not necessary for undefined feature
        https://bugs.webkit.org/show_bug.cgi?id=53317

        * Scripts/build-webkit:

2011-01-28  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Andreas Kling.

        Reset NetworkAccessManager to clean up credentials from previous tests.
        This change causes no performance overhead either.
        https://bugs.webkit.org/show_bug.cgi?id=36688

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

2011-01-28  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Add Zoom Text Only action to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=53297

        Add Zoom Text Only action to MiniBrowser's view menu, change zoom levels to avoid unnecessary divides.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::zoomIn):
        (BrowserWindow::zoomOut):
        (BrowserWindow::resetZoom):
        (BrowserWindow::toggleZoomTextOnly):
        (BrowserWindow::applyZoom):
        * MiniBrowser/qt/BrowserWindow.h:

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

        Reviewed by Eric Seidel.

        Add webkit-patch roll-chromium-deps
        https://bugs.webkit.org/show_bug.cgi?id=53288

        This command updates the Source/WebKit/chromium/DEPS file with the
        last-known good revision of Chromium (or a revision specified on the
        command line).  I'd eventually like to turn this into a SheriffBot
        command, but this is the first step.

        This patch somewhat sprawled because I needed to move a bunch of code
        out of ChangeLog that should never have been there in the first place.
        Also, I had to fix a bug in MockUser in order to test the new command.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/deps.py: Added.
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/roll.py: Added.
        * Scripts/webkitpy/tool/commands/roll_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py: Added.
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py: Added.
        * Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechromiumdeps.py: Added.
        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:

2011-01-27  Greg Coletta  <greg.coletta@nokia.com>

        Reviewed by Laszlo Gombos.

        Get rid of prefix header dependency for WebKit2 build system
        https://bugs.webkit.org/show_bug.cgi?id=50174

        Change the style checker so that it enforces config.h include for
        WebKit2.

        * Scripts/webkitpy/style/checker.py:

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

        Reviewed by Darin Adler.

        execCommand("Paste") doesn't work in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=52785

        Enable both of the settings needed to allow paste.
        
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2011-01-27  Jacob Dinu  <dinu.jacob@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser: User input lost when toggling use of QGraphicsView
        https://bugs.webkit.org/show_bug.cgi?id=48440

        Preserve user input when toggling use of QGraphicsView

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::loadFinished):
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::addressUrl):
        * QtTestBrowser/mainwindow.h:

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

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: turn off pixel tests correctly by default
        for webkit-based ports. r70013 (bug 47510) used
        port.set_option_default() to attempt to set default values, but
        that didn't work correctly. I have removed set_option_default
        for now since it was only being used in two places and in three
        useless unit tests. There is a separate bug open to fix the
        option parsing (48095), so this workaround is fine for now.

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

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

2011-01-27  Balazs Kelemen  <kbalazs@webkit.org>

        Rubber-stamped by Ariya Hidayat.

        Trivial crash fix in WTR.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Increase the size
        of the vector by one to be able to store the null character.

2011-01-27  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] WTR should be initialized in the same way as DRT
        https://bugs.webkit.org/show_bug.cgi?id=53240

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts): Added missing initialization steps.

2011-01-27  Joone Hur <joone.hur@collabora.co.uk>

        Unreviewed. 

        Adding myself to committers.py.

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

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

        Reviewed by Csaba Osztrogonác.

        [Qt] [Symbian] Move project files into Source
        https://bugs.webkit.org/show_bug.cgi?id=52891

        Fix the Symbian build after the project files
        are moved to Source directory. On Symbian qmake
        needs to run in the same directory where the main
        pro files (WebKit.pro, Tools.pro) are located.

        * Scripts/webkitdirs.pm: Change to the directory where the pro file
        is located before running qmake for Symbian. Qmake on Symbian
        does not properly honor the "-o" option, work it around by setting
        the name of the Makefile to bld.inf.

2011-01-27  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Add simple zooming features to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=53231

        Add View menu and Zoom In, Zoom Out, Zoom Reset actions to MiniBrowser.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::zoomIn):
        (BrowserWindow::zoomOut):
        (BrowserWindow::resetZoom):
        (BrowserWindow::updateUserAgentList):
        (BrowserWindow::applyZoom):
        * MiniBrowser/qt/BrowserWindow.h:

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

        Reviewed by Dan Bernstein.

        WebKitTestRunner needs to support layoutTestController.evaluateInWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=42319
        
        Add evaluateInWebInspector and other APIs needed for inspector tests to run.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::showWebInspector):
        (WTR::LayoutTestController::closeWebInspector):
        (WTR::LayoutTestController::evaluateInWebInspector):
        (WTR::LayoutTestController::setTimelineProfilingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldOpenWebInspector):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

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

        Reviewed by Xan Lopez.

        [GTK] Pixel dumps do not include scrollbars in output images
        https://bugs.webkit.org/show_bug.cgi?id=53216

        Show scrollbars in pixel dumps. This will fix pixel dumps for tests
        that have scrollbars.

        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        (createBitmapContextFromWebView): Take the snapshot of the containing GtkScrolledWindow
        instead of the web view itself.

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

        Reviewed by Mihai Parparita.

        Fix regression introduced in r76322 ... new-run-webkit-tests
        was attempting to save the image diff output as a UTF-8-encoded
        file.

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

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

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

        Unreviewed, rolling out r76709.
        http://trac.webkit.org/changeset/76709
        https://bugs.webkit.org/show_bug.cgi?id=53194

        "broke python tests on non-snowleopard platforms" (Requested
        by dpranke on #webkit).

        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py: Removed.
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py: Removed.

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

        Reviewed by Tony Chang.

        new-run-webkit-tests: add a "mock DRT" port implementation
        and a separate class that emulates what we expect the
        DumpRenderTree behavior to be.

        This will eventually replace port/dryrun.py and allow us to get
        better test coverage of the new-run-webkit-tests code as well as
        a reference for what new-run-webkit-tests expects from DRT.

        This is the first attempt at this, and it is pretty bare-boned. It
        really only has been tested on the 'mac' port (and a little on
        the 'chromium-mac' port.

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

        * Scripts/webkitpy/layout_tests/port/mock_drt.py: Added.
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/factory.py:

2011-01-26  Xianzhu Wang  <wangxianzhu@google.com>

        Reviewed by Tony Chang.

        Add '--no-timeout' option to Chromium DRT to ease debugging.
        https://bugs.webkit.org/show_bug.cgi?id=52873

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

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

        Reviewed by Andreas Kling.

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

        * QtTestBrowser/locationedit.h:

2011-01-26  Mansi Mithal  <mansi.mithal@nokia.com>

        Reviewed by Antonio Gomes.

        QtTestBrowser should have a UI Setting to disable plugins
        https://bugs.webkit.org/show_bug.cgi?id=52408
        
        Added a new action item named "Disable Plugins"
        under the "Settings" menu. 

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::togglePlugins):
        * QtTestBrowser/launcherwindow.h:

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

        Reviewed by Adam Barth.

        Move main CMakeLists.txt into Source directory
        https://bugs.webkit.org/show_bug.cgi?id=52888

        * Scripts/webkitdirs.pm:

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

        Reviewed by Eric Seidel.

        Improve label text in submit-to-ews
        https://bugs.webkit.org/show_bug.cgi?id=53130

        * QueueStatusServer/templates/submittoews.html:

2011-01-25  Mansi Mithal  <mansi.mithal@nokia.com>

        Reviewed by Antonio Gomes.

        QtTestBrowser should have a UI Settings to prevent loading images
        https://bugs.webkit.org/show_bug.cgi?id=52409
        
        Added a new action item named "DisableAutoLoadImages"
        under the "Settings" menu 

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleAutoLoadImages):
        * QtTestBrowser/launcherwindow.h:

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

        Reviewed by Tony Chang.

        Minor bug fixes and cleanup for filesystem wrappers, port/* test
        classes, test_expectations.py. This change adds "test-win" and
        "test-mac" variants to the test port so that we can better test
        rebaselining, and adds a MockUser() object for reuse in testing.

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

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

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

        Reviewed by Dimitri Glazkov.

        [chromium] remove unused layoutTestController callback
        https://bugs.webkit.org/show_bug.cgi?id=53103

        This method is used by a test_shell_test, but not needed by DRT.

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

2011-01-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Andreas Kling.

        [GTK] Remove 64 bits release bot from the buildbot master
        https://bugs.webkit.org/show_bug.cgi?id=52899

        Removes the 64 bits release slave from the buildbot configuration,
        so that we can use it as an EWS.

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

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

        Reviewed by Dan Bernstein.

        Implement database quota callback to fix storage tests on WebKit2 bot
        https://bugs.webkit.org/show_bug.cgi?id=53064

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

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

        Reviewed by Anders Carlsson.

        Use designated temp directory for the database for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=53052
        
        Adopt the new WK2 API for this.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::libraryPathForTesting):
        (WTR::TestController::initialize):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformLibraryPathForTesting):
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::platformLibraryPathForTesting):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformLibraryPathForTesting):

2011-01-24  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Add a new Leopard test bot.

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

2011-01-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Adam Barth.

        Add EFL Builder to core waterfall
        https://bugs.webkit.org/show_bug.cgi?id=52704

        Add EFL Builder to the core waterfall again.

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

2011-01-24  Xianzhu Wang  <wangxianzhu@google.com>

        Reviewed by Tony Chang.

        new-run-webkit-tests fails to start HTTP server if there are proxy settings
        https://bugs.webkit.org/show_bug.cgi?id=52872

        Force disabling proxy to resolve the problem.

        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

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

        Reviewed by Darin Adler.

        check-webkit-style: Update exemptions following Source/ move.
        https://bugs.webkit.org/show_bug.cgi?id=53017

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

2011-01-24  Andras Becsi  <abecsi@webkit.org>

        Rubber-stamped by Csaba Osztrogonác.

        [Qt] Move project files into Source
        https://bugs.webkit.org/show_bug.cgi?id=52891

        * DumpRenderTree/qt/ImageDiff.pro: Add missing "Source" to WebKit.pri path

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: Find duplicate strings in localizedStrings.js

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

        * Scripts/check-inspector-strings:

2011-01-24  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Regroup MiniBrowser's menubar and add open file action
        https://bugs.webkit.org/show_bug.cgi?id=53000

        Add File and Develop menu to MiniBrowser's menubar and add open file action to File menu.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::openFile):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:

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

        Unreviewed fix after r76496

        [Qt] Move project files into Source
        https://bugs.webkit.org/show_bug.cgi?id=52891

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Remove unnecessary "Source" from the path.
        * BuildSlaveSupport/built-product-archive: Remove unnecessary "Source" from the path.
        * Scripts/webkitdirs.pm: Add the accidentally removed slash to the path.

2011-01-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Move project files into Source
        https://bugs.webkit.org/show_bug.cgi?id=52891

        * DerivedSources.pro: Renamed from DerivedSources.pro.
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * MiniBrowser/DerivedSources.pro:
        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * Scripts/webkitdirs.pm:
        * Tools.pro: Added.
        * WebKitTestRunner/DerivedSources.pro:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-01-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dan Bernstein.

        Beefed up --threaded mode to catch even more kinds of errors.
        https://bugs.webkit.org/show_bug.cgi?id=52971

        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp: Use a shared
        context group to force JSC to mark multiple threads. (This used to be
        the default, but it changed in SnowLeopard.)
        (runJavaScriptThread): Do more locking and unlocking, and more allocation,
        to give threading mistakes more chances to show themselves.
        (startJavaScriptThreads):
        (stopJavaScriptThreads):

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

        Reviewed by Andreas Kling.

        [Qt] Support layoutTestController.addURLToRedirect()
        https://bugs.webkit.org/show_bug.cgi?id=52956

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

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] REGRESSION (r72360): http/tests/security/aboutBlank/xss-DENIED-* tests fail
        https://bugs.webkit.org/show_bug.cgi?id=49802

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::open):

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

        Reviewed by Maciej Stachowiak.

        Disable mac_unittest.py that fails on some of the Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=52947

        As noted in the comment, this test does not appear to be correct
        because the function this test is testing returns different results
        depending on which flavor of Mac the test is run on.  This patch
        disable the test.  Hopefully we can re-enable the test once we've
        probably insulated the test from its environment.

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

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

        Reviewed by Mihai Parparita.

        Fix bug introduced in r76322 that caused NRWT to not actually
        read the Skipped files properly.

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

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

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

        Reviewed by Geoffrey Sean Garen and Mark Rowe.

        WebKitTestRunner needs the HOME environment variable to be set.
        <rdar://problem/8896573>

        * Scripts/old-run-webkit-tests: Set the HOME environment variable if
        it exists.

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

        Reviewed by Eric Seidel.

        Suppress a few remaining integration tests so that none of the
        layout_test unit tests ever read from the filesystem or launch
        subprocesses that aren't part of the unit tests.

        Also fix a minor bug in the printing unit tests that was
        incorrectly relying on sys.argv.

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

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-01-21  Darin Adler  <darin@apple.com>

       Fix Mac build.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Pass 0 for runModal function.

2011-01-20  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Implement showModalDialog
        https://bugs.webkit.org/show_bug.cgi?id=52855

        This fixes WebKitTestRunner to compile, but more work is probably
        needed to get it to pass the tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runModal): Added. Calls through to the
        platform-specific version of runModal.
        (WTR::TestController::createOtherPage): Changed to be a private
        static member function so it can refer to runModal, which is
        a private static member function.
        (WTR::TestController::initialize): Pass 0 for the runModal
        function since we don't need to run the main window modal.
        I suspect this is wrong and will need to change.
        * WebKitTestRunner/TestController.h: Added declarations for
        the functions added above.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::runModal): Added. Untested implementation.
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::runModal): Added.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::runModal): Added.

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

        Reviewed by Adam Barth.

        Split Host object off from WebKitPatch for easier re-use
        https://bugs.webkit.org/show_bug.cgi?id=52284

        new-run-webkit-tests and other tools are eventually going to want one of these.
        Basically you need to inherit from this class if you want to pretend to be a
        self.tool object for Steps/Commands.

        * Scripts/webkitpy/common/host.py: Added.
        * Scripts/webkitpy/tool/main.py:

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

        Reviewed by Adam Barth.

        Disable the tests that start and stop the http server and web
        server, so that we don't have to worry about port collisions on
        the bots.

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

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

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

        Reviewed by Eric Seidel.

        nrwt: rewrite google_chrome_unittest to use mock filesystem.
        
        https://bugs.webkit.org/show_bug.cgi?id=52772
        
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:

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

        Reviewed by Eric Siedel.

        nrwt: clean up almost all remaining port references, remove
        unnecessary import clauses. The only remaining references are
        in places where a mock filesystem makes no sense or can't be
        used, and in one routine in port/google_chrome_unittest that
        I'll rewrite in a separate patch.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:

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

        Reviewed by Mihai Parparita.

        remove fs refs from run_webkit_tests, rebaseline_chromium_webkit_tests

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

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

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

        Reviewed by Ojan Vafai.

        [chromium] fix the paths used for the rebaseline tool
        https://bugs.webkit.org/show_bug.cgi?id=52857

        Some of the bots were renamed so the path to grab the results zip
        file has changed.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

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

        Reviewed by Tony Chang.

        Fix bug introduced in r72688 / bug 52768 that broke the
        generation of the output filename links in the results.html
        output. Apparently none of the unit tests actually checked to
        make sure the generated links were correct :(

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

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

2011-01-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=52849
        Make window.print work with WebKit2

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):
        Added zeroes to WKPageUIClient structures to avoid build failures.

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

        Reviewed by Eric Seidel.

        nrwt: remove fs refs from printing, test_failures, test_expectations, text_diff

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

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2011-01-20  Mansi Mithal  <mansi.mithal@nokia.com>

        Reviewed by Antonio Gomes.

        QtTestBrowser should have a seperate menu for Settings
        https://bugs.webkit.org/show_bug.cgi?id=52817
        
        Added a new menu item named "Settings"
        and moved the "Enable interrupting js scripts" and "Enable js pop up windows" under the "Settings" menu 

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

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

        Reviewed by John Sullivan.

        Update update-webkit-localizable-strings with new path to WebKit.

        * Scripts/update-webkit-localizable-strings:

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

        Reviewed by Darin Fisher.

        Implement mozilla's requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=51218

        Chromium DumpRenderTree support for window.webkitRequestAnimationFrame.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (invokeScheduleComposite):
        (WebViewHost::scheduleAnimation):
        (WebViewHost::paintInvalidatedRegion):
        * DumpRenderTree/chromium/WebViewHost.h:

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

        Reviewed by Adam Roben.

        WebKitTestRunner needs to support layoutTestController.evaluateScriptInIsolatedWorld
        https://bugs.webkit.org/show_bug.cgi?id=42327

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm: Add support
        for methods that take their normal arguments but also a JSContextRef.
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: IDL definition
        for evaluateScriptInIsolatedWorld.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame): Set a magic variable only if
        this call is for an isolated world.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::worldMap): Helper to create a world map.
        (WTR::LayoutTestController::worldIDForWorld): Map from an ID to a world.
        (WTR::LayoutTestController::evaluateScriptInIsolatedWorld): The newly
        added LayoutTestController API.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

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

        Convert paths in environment variables back to msys-style inside commit-log-editor

        When this script gets run from inside git commit, msys-style paths in the environment will
        have been turned into Windows-style paths with forward slashes. This screws up functions
        like File::Spec->rel2abs, which seem to rely on $PWD having an msys-style path. We convert
        the paths back to msys-style before doing anything else.

        Fixes <http://webkit.org/b/48527> commit-log-editor uses full paths for section headers when
        using msysgit's Perl and multiple ChangeLogs have been edited

        Reviewed by David Kilzer.

        * Scripts/commit-log-editor: Call fixEnvironment before doing anything else.
        (fixEnvironment): Added. When run in msys in conjunction with git (i.e., when invoked from
        inside git commit), convert Windows-style paths in the environment back to msys-style paths.

2011-01-20  Zoltan Horvath  <zoltan@webkit.org>

        [Win] Unreviewed build fix after r76248.

        * DumpRenderTree/ForwardingHeaders/wtf/FastAllocBase.h: Added.

2011-01-20  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Refactoring of the custom allocation framework
        https://bugs.webkit.org/show_bug.cgi?id=49897

        Inheriting from FastAllocBase can result in objects getting larger (bug #33896, #46589).
        The modification replaces Noncopyable and FastAllocBase classes and these inherits with their
        equivalent macro implementation at the necessary places.
2011-01-20  Yi Shen  <yi.4.shen@nokia.com>

        Unreviewed. 

        Adding myself to committers.py.

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

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

        Reviewed by Tony Chang.

        Chromium builders don't delete unversioned directories when DEPS change
        https://bugs.webkit.org/show_bug.cgi?id=52745

        If we pass this option to gclient sync, gclient will delete directories
        that are no longer part of DEPS instead of leaving them around to
        confuse us later.  Apparently, the downstream buildbots use this option
        already.

        * Scripts/update-webkit-chromium:

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

        Unreviewed, build fix - I pulled this patch in to fix an issue
        revealed by r76195 running on some new bots). Also fix a couple
        of other issues revealed in testing.

        nrwt: remove fs refs from layout_package/json*

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

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

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

        Unreviewed, build fix.

        Fix a couple of minor bugs discovered while bringing up new bots
        for testing.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

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

        Unreviewed, rolling out r76194.
        http://trac.webkit.org/changeset/76194
        https://bugs.webkit.org/show_bug.cgi?id=51218

        Caused mysterious compile failure on the chromium win
        build.webkit.org bots

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

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

        Reviewed by Mihai Parparita.

        remove fs refs from test_runner, dump_render_tree_thread

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

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

        Reviewed by Darin Fisher.

        Implement mozilla's requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=51218

        Chromium DumpRenderTree support for window.webkitRequestAnimationFrame.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (invokeScheduleComposite):
        (WebViewHost::scheduleAnimation):
        (WebViewHost::paintInvalidatedRegion):
        * DumpRenderTree/chromium/WebViewHost.h:

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

        Unreviewed, build fix.

        Fix a few incorrect "self._filesystem" references introduced in
        r76184.

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

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

        Reviewed by Mihai Parparita.

        add a .sep property, abspath(), isabs(), mtime(), and
        open_text_file_for_writing() to filesystem modules. Some of
        these properties are not needed in this patch but will be needed
        in subsequent patches (I'm doing this to avoid having to track
        multiple versions of a single file).

        Also, change most of the port/* modules to use the filesystem
        objects instead of referencing the filesystem directly.

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

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:

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

        Reviewed by Anders Carlsson.

        If resetting between tests times out, treat it as a WebProcess crash
        https://bugs.webkit.org/show_bug.cgi?id=52757

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

2011-01-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=52739
        Make it possible for a WebKit2 client to print headers and footers

        Added dummy implementations for new printing UIClient calls.

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

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

        Reviewed by Ojan Vafai.

        Change webkitpy/layout_tests/port/test.py to use the
        in-memory filesystem for cleaner unit testing. This
        change allows us to kill a lot of code that was
        specific to the test port, at the cost of being a
        little less clear about how things would work if
        you didn't have a filesystem.

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

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

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

        Unreviewed, build fix.

        Fix test failure caused by committing attachment 79368 instead
        of attachment 79461 on bug 52604.

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

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

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: remove use of os.walk, use mock filesystem for better
        unit testing. os.walk() is too much of a hassle to implement on
        top of the in-memory mock filesystem and adding the necessary
        interface to files_under() gives clients a cleaner API anyway
        (for this particular usage model).

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

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:

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

        Reviewed by Tony Chang.

        Change more modules in the layout-tests code to use the
        filesystem wrapper for cleaner unit testing.

        This patch also adds the glob() wrapper to the filesystem
        abstraction.
        
        https://bugs.webkit.org/show_bug.cgi?id=52604

        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:

2011-01-19  Levi Weintraub  <leviw@chromium.org>

        Unreviewed.

        Updating my email addresses and irc nick.

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

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

        Reviewed by Mihai Parparita.

        [chromium] [linux] if check-sys-deps fails, output the failure reason
        https://bugs.webkit.org/show_bug.cgi?id=52671

        * Scripts/webkitpy/common/system/executive_mock.py: Add support for
            error handler functions.
        * Scripts/webkitpy/layout_tests/port/chromium.py:
            output the error text from --check-sys-deps
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-01-19  Aparna Nandyal  <aparna.nand@wipro.com>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser crashes when closing if Facebook is opened
        https://bugs.webkit.org/show_bug.cgi?id=52554
        
        QtNetworkAccessManager is created in a thread and set as
        member variable in QWebPage. When the thread is destroyed
        the object is still used. So fix will set the object to
        NULL once the thread is destroyed.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::~LauncherWindow):

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

        Rubber stamped by Csaba Osztrogonac

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: Removed unncessary inculde of WKStringCF.h

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

        Reviewed by Tony Chang.

        new-run-webkit-tests: add a --build-directory command line argument

        Official Google Chrome builds use a non-standard build directory
        location. This patch adds a --build-directory argument that
        allows that location to be specified on the command line. Only
        Chromium-based builds will use this flag for now, but anyone can
        in the future.

        There are no unit tests for this since it's difficult to test
        until mock filesystems are fully supported in the code. This was
        tested by hand for now.

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

        * 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_webkit_tests.py:

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

        Not reviewed. Bot fix.

        Remove an inadvertently committed debugging print.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::notifyDone):

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

        Reviewed by Sam Weinig.

        WebKitTestRunner should track loading more like DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=52692

        Change load tracking to track the current top loading frame, in the manner of DumpRenderTree.
        This makes some tests that call notifyDone multiple times pass.
        
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::topLoadingFrame):
        (WTR::InjectedBundle::setTopLoadingFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::stopLoading):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::notifyDone):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveMessageFromInjectedBundle):

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

        Reviewed by Kent Tamura.

        [Chromium] NRWT looking for DRT binary in the wrong path on Mac
        https://bugs.webkit.org/show_bug.cgi?id=52678
        
        Update path now that WebKit is inside Source.

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

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

        Reviewed by Simon Hausmann.

        [Qt] http/tests/incremental/slow-utf8-text.pl fails
        https://bugs.webkit.org/show_bug.cgi?id=44282

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

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

        Reviewed by Mihai Parparita.

        Fix a small race condition that could cause the unit tests for
        new-run-webkit-tests to fail in a multithreaded environment.
        There was a small window in the code where one thread would
        check to see if a thread had raised an exception, do something,
        and then check to see if the thread was alive. If the other
        thread raised an exception and exited in between these two
        steps, the exception would be lost. Flipping the order of the
        two checks fixes the race, since we will now always check for an
        exception on the thread before exiting.

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

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

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

        Reviewed by Adam Barth.

        commit-queue dies when test archiving fails
        https://bugs.webkit.org/show_bug.cgi?id=52617

        I looked at the machine and it had 10 archives already
        thus find_unused_name was returning None.  I've upped
        the limit to 100 (per bug) and tested the case where
        find_unused_name returns None (making archive return None).

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

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

        Reviewed by Ojan Vafai.

        Update rebaseline-chromium-webkit-tests unit tests to use a mock
        filesystem. Also fix a couple of "with" statements missed by
        r76050.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-01-18  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] Build fixes for gtk3 build
        https://bugs.webkit.org/show_bug.cgi?id=52648

        * DumpRenderTree/gtk/EventSender.cpp:
        (beginDragWithFilesCallback):

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

        Reviewed by Mihai Parparita.

        Update rebaseline-chromium-webkit-tests to use filesystem objects
        instead of direct references to os.path, shutil, tempfile, etc.

        This patch doesn't change anything, but will allow subsequent
        patches to change the unit tests to no longer use the real
        filesystem.

        This patch adds a bunch more methods to the filesystem object as
        well.

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

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

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

        Reviewed by Mihai Parparita.

        new-run-webkit-tests shouldn't crash when you try to run a
        directory containing only skipped files.

        https://bugs.webkit.org/show_bug.cgi?id=52478
        
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-01-18  Adam Bergkvist  <adam.bergkvist@ericsson.com> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] The GTK+ EventSender needs support for beginDragWithFiles
        https://bugs.webkit.org/show_bug.cgi?id=40833

        * DumpRenderTree/gtk/EventSender.cpp: Add a beginDragWithFiles implementation for the
        GTK+ event sender.
        (dragWithFilesDragDataGetCallback): Added.
        (dragWithFilesDragEndCallback): Added.
        (beginDragWithFilesCallback): Added.

2011-01-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Adam Barth.

        ews: Add additional watcher to efl ews
        https://bugs.webkit.org/show_bug.cgi?id=52613

        Add gyuyoung.kim@samsung.com to watcher list of efl-ews.

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

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

        Reviewed by Alexey Proskuryakov.

        Fix some headers with missing or misspelled #ifndef guards
        https://bugs.webkit.org/show_bug.cgi?id=52545

        * DumpRenderTree/chromium/TestEventPrinter.h:
        * DumpRenderTree/chromium/WebPreferences.h:

2011-01-17  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        REGRESSION: Assertion failure in FrameLoader::continueLoadAfterWillSubmitForm() when
        navigating back to an unreachable URL
        https://bugs.webkit.org/show_bug.cgi?id=52388

        Add a third parameter (unreachableURL) to queueLoadHTMLString.

        * DumpRenderTree/LayoutTestController.cpp:
        (queueLoadHTMLStringCallback):
        (LayoutTestController::queueLoadHTMLString):
        (LayoutTestController::queueLoadAlternateHTMLString):
        * DumpRenderTree/LayoutTestController.h:

        * DumpRenderTree/WorkQueueItem.h:
        (LoadHTMLStringItem::LoadHTMLStringItem):

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (WorkItemLoadHTMLString::WorkItemLoadHTMLString):
        (WorkItemLoadHTMLString::run):
        (LayoutTestController::queueLoadHTMLString):

        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/mac/WorkQueueItemMac.mm:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        (LoadHTMLStringItem::invoke):

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

        Rubber-stamped by Mark Rowe.

        Update xcodeproj svn:ignore to include xcuserdata.

        * DumpRenderTree/DumpRenderTree.xcodeproj: Modified property svn:ignore.
        * MiniBrowser/MiniBrowser.xcodeproj: Modified property svn:ignore.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj: Modified property svn:ignore.
        * WebKitLauncher/WebKitLauncher.xcodeproj: Modified property svn:ignore.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj: Modified property svn:ignore.

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

        Unreviewed fix after r75908.

        Move WebKit into Source
        https://bugs.webkit.org/show_bug.cgi?id=52530

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add Source to the path for Qt API tests.

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

        Unreviewed.

        Remove accidentally committed debug printing after r75908.

        * Scripts/webkitdirs.pm:

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

        Unreviewed.

        Add myself to committers list
        https://bugs.webkit.org/show_bug.cgi?id=52566

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

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

        Reviewed by Jeremy Orlow.

        GeolocationController should call stopUpdating on destruction
        https://bugs.webkit.org/show_bug.cgi?id=52216

        fast/dom/Geolocation/window-close-crash.html requires that a
        Geolocation watch be started in a secondary window. Consequently,
        we need to allow geolocation permission and provide a mock
        geolocation position for the secondary window's
        GeolocationClientMock.

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

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

        Update more include paths to reflect WebKit move.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        (EventSender::needsShiftModifier):
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:

2011-01-16  Kent Tamura  <tkent@chromium.org>

        Unreviewed, Chromium build fix.

        * Scripts/update-webkit-chromium: Webkit/chromium -> Source/WebKit/chromium

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

        Build fix for GTK+ after source directory movement.

        * GNUmakefile.am: Correct include paths.

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

        Teach svn-apply about WebKit move.

        * Scripts/VCSUtils.pm:

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

        Rubber-stamped by Eric Seidel.

        Move WebKit into Source
        https://bugs.webkit.org/show_bug.cgi?id=52530

        * DumpRenderTree/mac/InternalHeaders/WebKit/WebTypesInternal.h:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/GCControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/PlainTextControllerQt.cpp:
        * DumpRenderTree/qt/TextInputControllerQt.cpp:
        * DumpRenderTree/wscript:
        * QtTestBrowser/launcherwindow.h:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

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

        Teach svn-apply about WebKit2 move.

        * Scripts/VCSUtils.pm:

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

        Rubber-stamped by Eric Seidel.

        Move WebKit2 into Source
        https://bugs.webkit.org/show_bug.cgi?id=52438

        * MiniBrowser/qt/MiniBrowser.pro:
        * Scripts/build-webkit:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/test-webkitpy:
        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/style/checker.py:
        * WebKitTestRunner/DerivedSources.pro:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

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

        Reviewed by David Levin.

        [chromium] remove obsolete createView method
        https://bugs.webkit.org/show_bug.cgi?id=52437

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

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

        Reviewed by Geoff Garen.

        ShouldLoadResourceForFrame should use strings, not URLs.
        https://bugs.webkit.org/show_bug.cgi?id=52476

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::shouldLoadResourceForFrame): Update to use a WKStringRef.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

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

        Reviewed by David Levin.

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by David Levin.

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

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

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

        Reviewed by Kent Tamura.

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

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

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

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

        Reviewed by Adam Barth.

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

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

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

        Reviewed by David Levin.

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

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

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

        Unreviewed.  Make it work in python 2.5.

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

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

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

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

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

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

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

        Reviewed by Shinichiro Hamaji.

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

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

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

        Reviewed by Yury Semikhatsky.

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

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

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

        Reviewed by Shinichiro Hamaji.

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

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

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

        Reviewed by David Levin.

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

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

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

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

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

        Reviewed by Mihai Parparita.

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

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

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

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

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

        Reviewed by Adam Barth.

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

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

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

        Reviewed by Martin Robinson.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Kent Tamura.

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

        Forked Info.plist is not longer needed.

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

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

        Reviewed by Timothy Hatcher.

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

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

        * Scripts/check-inspector-strings:

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

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

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

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

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

        Reviewed by David Levin.

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

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

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

        Reviewed by Sam Weinig.

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

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

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

        Reviewed by Shinichiro Hamaji.

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

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

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

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

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

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

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

        Reviewed by Darin Adler.

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

        * Scripts/old-run-webkit-tests:

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

        Reviewed by Martin Robinson.

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

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

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

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

        Reviewed by Pavel Feldman.

        Add check-inspector-strings script.

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

        * Scripts/check-inspector-strings: Added.

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

        Advertise the .testnetscape file extension on Windows

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

        Reviewed by Dan Bernstein.

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

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

        Reviewed by Eric Seidel.

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

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Unreviewed.

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

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

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

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

        Reviewed by Ojan Vafai.

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

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

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

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

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

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

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

        Reviewed by Adam Barth.

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

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

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

        Unreviewed.

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

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

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

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

        Roll r75474 back in.

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

        Reviewed by Kenneth Rohde Christiansen.

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

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

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

        Unreviewed.

        Add myself to committers' list.

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

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

        Reviewed by Adam Barth.

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

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

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

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

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

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

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

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

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

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

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

        Reviewed by Csaba Osztrogonác.

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

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

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

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

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

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

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

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

        Fix build.

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

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

        Reviewed by Ojan Vafai.

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

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

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

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

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

        Some layout tests are crashing on Chromium Win.

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

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

        Roll out r75392

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

        * Scripts/run-javascriptcore-tests:

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

        Reviewed by Anders Carlsson.

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

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

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

        Reviewed by Mihai Parparita.

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

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

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

        Reviewed by Xan Lopez.

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

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

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

        Reviewed by Laszlo Gombos.

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

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

        * Scripts/build-webkit:

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

        Skip some asserting JS tests

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

        * Scripts/run-javascriptcore-tests:

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

        Reviewed by Xan Lopez.

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

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

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

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

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

        Reviewed by Steve Falkenburg.

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

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

        Reviewed by Laszlo Gombos.

        [Qt][WK2] Guard gcc-specific syntax

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

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

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

        Reviewed by Simon Hausmann.

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

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

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

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] MiniBrowser: Remove superfluous createNewPage() callback

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

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

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

        Reviewed by Jeremy Orlow.

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

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

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

        Reviewed by Adam Barth.

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

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

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

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

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

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

        Reviewed by Kenneth Rohde Christiansen.

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

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

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

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

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

        Reviewed by Ojan Vafai.

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

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

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

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

        Reviewed by Mihai Parparita.

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

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

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

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

        * Scripts/VCSUtils.pm:

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

        Rubber-stamped by Eric Seidel.

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

        Update the tools to understand WebCore's new location.

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

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

        Reviewed by Sam Weinig.

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

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

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

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

        This approach isn't quite right.

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

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

        Build master fix

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

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

        Reviewed by Csaba Osztrogonác.

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

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

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

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

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

        Unreviewed fix after r75233.

        Based on idea from Eric Seidel.

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Mihai Parparita.

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

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

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

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

        Reviewed by Adam Barth.

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

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

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

        Windows build fix.
        Import os before using it.

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

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

        Reviewed by Adam Barth.

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

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

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

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

        Reviewed by Stephanie Lewis.
        
        Fix syntax error in script.

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

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

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

        Unreviewed, fixing WinCE build after r75196.

        WinCE port does not (yet) support NPAPI.

        * Scripts/build-webkit:

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Eric Seidel.

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

        * Scripts/build-webkit:

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

        Reviewed by Adam Roben.

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

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

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

        Reviewed by Mihai Parparita.

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

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

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

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

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

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

        Reviewed by Tony Chang.

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

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

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

        * gdb/webkit.py:

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

        Reviewed by Ada Chan.

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

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

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

        Reviewed by Simon Fraser.

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

        Chromium DRT support for webkitAnimationTime.

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

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

        Reviewed by Tony Chang.

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

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

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

        Reviewed by Eric Seidel.

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

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

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

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

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

        * BuildSlaveSupport/built-product-archive:

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

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

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

        * BuildSlaveSupport/built-product-archive:

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

        Reviewed by Darin Adler.

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

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

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

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

        Reviewed by Ariya Hidayat.

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

        Only add a dependency on libX11 on X11 systems

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

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

        Reviewed by Adam Roben.

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

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

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

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

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

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

        Fixed, and added a unit test.

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

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

        Reviewed by Kenneth Rohde Christiansen.

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

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

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

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

        Reviewed by Ojan Vafai.

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

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

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

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

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

        Unreviewed.

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

        Add another unit test to cover a previously missing import.

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

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

        Reviewed by David Levin.

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

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

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

        Unreviewed. Adding myself to the list of committers.

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

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

        Unreviewed.

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

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

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

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

        Reviewed by Andreas Kling.

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

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

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

        Reviewed by Martin Robinson.

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

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

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

        Rubber-stamped by Csaba Osztrogonác.

        Based on idea from Péter Gál.

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

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

        Reviewed by Adam Barth.

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

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

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

        Reviewed by Adam Barth.

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

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

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

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

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

        Unreviewed. Adding myself to the list of committers.

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

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

        Reviewed by David Levin.

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

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

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

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

        Reviewed by Tony Chang.

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

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

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

        Reviewed by Sam Weinig.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Kenneth Russell.

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

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

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

        Reviewed by Laszlo Gombos.

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

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

        * Scripts/build-webkit:

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

        Reviewed by Adam Barth.

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

        Set shortcut for the SelectAll action.

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by David Kilzer.

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

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

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

        Reviewed by David Kilzer.

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

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

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

        Reviewed by Adam Barth.

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

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

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

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

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

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

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

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

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

        Reviewed by Simon Fraser.

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

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

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

        Reviewed by Simon Fraser.

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

        As requested by smfr.

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

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

        Reviewed by David Levin.

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

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

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

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

        Reviewed by Anders Carlsson.

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

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

        * Scripts/run-api-tests:

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

        Unreviewed. Adding myself to committers.py.

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

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

        Reviewed by Xan Lopez.

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

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

        * Scripts/webkitdirs.pm: 

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

        Reviewed by Adam Barth.

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

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

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

        [Qt] Unreviewed fix after r74855 and r74875.

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

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

        [Qt] Unreviewed fix after r74855.

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

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

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

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

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

        * Scripts/webkitdirs.pm:

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

        Unreviewed, build fix.

        [Qt] Fix DRT build after 74855

        * DumpRenderTree/qt/DumpRenderTree.pro:

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

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

        * Scripts/build-webkit:

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

        Reviewed by Eric Seidel.

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

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

        * Scripts/VCSUtils.pm:

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

        Reviewed by Eric Seidel.

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

        Update references to JavaScriptCore to point to the new location.

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

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

        Reviewed by Eric Seidel.

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

        Update scripts to point to the new location.

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Ariya Hidayat.

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

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

        * Scripts/wkstyle: Removed.

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

        Unreviewed. Coding style fix.

        * DumpRenderTree/chromium/TestShell.h:

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

        Reviewed by Pavel Feldman.

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

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

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

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

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

        Rubber-stamped by Eric Seidel.

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

        Update references to PageLoadTests to point to the new location.

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

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

        Rubber-stamped by Eric Seidel.

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

        Update these scripts to point to the new location.

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

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

        Reviewed by Kent Tamura.

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

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

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

        Reviewed by David Kilzer.

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

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

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

        Reviewed by David Kilzer.

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

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

        * Scripts/webkitdirs.pm:

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

        Reviewed by Darin Adler.

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

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

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

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

        Unreviewed WinCE buildfix.

        * WinCELauncher/main.cpp: Add missing include.

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Reviewed by Ojan Vafai.

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

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

        * Scripts/prepare-ChangeLog: Add -g.

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

        Reviewed by Simon Hausmann.

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

        * QtTestBrowser/webview.h:

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

        Reviewed by Sam Weinig.

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

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

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Rubber-stamped by Martin Robinson.

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

        * Scripts/do-webcore-rename:

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

        Reviewed by Adam Barth.

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

        * Scripts/build-webkit:

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

        Reviewed by Daniel Bates.

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

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Martin Robinson.

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

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

        * GtkLauncher/main.c:
        (main):

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Unreviewed WinCE buildfix after r74334.

        * CMakeListsWinCE.txt:

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

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

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

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

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

        Reviewed by Kenneth Rohde Christiansen.

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

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

        * EWebLauncher/main.c:
        (browserCreate):

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

        Reviewed by Adam Barth.

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

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

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

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

        Reviewed by Kenneth Russell.

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

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

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

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

        Reviewed by David Levin.

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

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Rubber-stamped by Eric Seidel.

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

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

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

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

        Reviewed by Eric Seidel.

        Bug 51539 - update iexploder scripts to point to new location

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

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

        Reviewed by Ryosuke Niwa.

        [chromium] LayoutTestController warning in float->int conversion
        https://bugs.webkit.org/show_bug.cgi?id=51553

        Rather than reading an int, converting to a float, then getting a compiler
        warning on passing the float to something that expects an int, instead
        just pass around ints.

        No tests, fixes a compiler warning.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (parsePageSizeParameters):
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):

2010-12-23  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Darin Adler.

        Bug 51537 - iexploder needs cleanup
        
        * iExploder/htdocs: Removed.
        * iExploder/htdocs/config.rb: Removed.
        * iExploder/htdocs/cssproperties.in: Removed.
        * iExploder/htdocs/cssvalues.in: Removed.
        * iExploder/htdocs/htmlattrs.in: Removed.
        * iExploder/htdocs/htmltags.in: Removed.
        * iExploder/htdocs/htmlvalues.in: Removed.
        * iExploder/htdocs/iexploder.cgi: Removed.
        * iExploder/htdocs/iexploder.rb: Removed.
        * iExploder/htdocs/index.html: Removed.
        * iExploder/htdocs/webserver.rb: Removed.
        * iExploder/iexploder-1.7.2/output: Removed.
        * iExploder/tools: Removed.
        * iExploder/tools/lasthit.rb: Removed.
        * iExploder/tools/osx_last_crash.rb: Removed.
        * iExploder/tools/showtest.rb: Removed.

2010-12-23  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Make 'single' the default backing store in EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=51534

        'single' is the simplest backing store and the one intended to be the
        default in the test browser. By mistake the tiled backing store was
        left as default in r72617.

        * EWebLauncher/main.c:
        (browserCreate): ditto.

2010-12-23  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Subject: [webkit 4/4] [EFL] Remove non-sense workaround
        https://bugs.webkit.org/show_bug.cgi?id=51533

        There's no point in concatenating env("HOME") with "blah", so remove
        option from EWebLauncher.

        * EWebLauncher/main.c:
        (main): ditto.

2010-12-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Eric Seidel.

        Web Inspector: chromium: inspector's tests are quite slow especially at windows(Debug).

        Almost all inspector's tests become flaky on chromium Win(dbg) after switching to DRT.
        I just discovered that we have two additional GC runs per each WebViewHost.
        Test_shell had no such calls.
        These gc runs eat 15% of cpu time.

        https://bugs.webkit.org/show_bug.cgi?id=51479

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::~WebViewHost):

2010-12-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        This change splits out the TestRunner class into its own file.
        When we fork the code for message passing, we will create a new
        TestRunner, and this change will allow that to be more modular.

        While we're at it, split out TestInput and ResultSummary into
        their own files, to reduce the size of run_webkit_tests to
        something more managable.

        https://bugs.webkit.org/show_bug.cgi?id=51092

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_input.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

 2010-12-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt multiprocessing - start over, prepare to fork the code
 
        This code cleans up the signatures and implementation of the
        TestRunner class so we can easily fork it to run either the
        stable implementation or the new, unstable message-passing
        implementation. The two variants will have different
        implementations of the run_tests() method. We will switch
        between the two based on the setting for the '--worker-model'
        switch. We rename the two currently valid values to 'old-inline'
        and 'old-threads'.

        https://bugs.webkit.org/show_bug.cgi?id=51081

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-22  Victor Wang  <victorw@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Update chromium archive test result url in rebaseline script.

        https://bugs.webkit.org/show_bug.cgi?id=51503

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-12-22  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Alice Liu.

        <rdar://problem/8633222> record-memory-win needs to record memory used by the webprocess.
        Verified on Chrome, Safari, and IE.
        With this change, we will record memory from a parent browser window and all child processes.

        * record-memory-win/main.cpp:
        (ProcessArgs):
        (PrintUsage):
        (getMemoryInfo):
        (printProcessInfo):
        (evalProcesses):
        (UseImage):
        (QueryContinuously):
        (ElapsedTime):

2010-12-22  Lucas Forschler  <lforschler@apple.com>

        Unreviewed rollout r74489, because it was missing changelog.

        * record-memory-win/main.cpp:
        
2010-12-22  Ryosuke Niwa  <rniwa@webkit.org>

        Adding myself as a reviewer.

        * Scripts/webkitpy/common/config/committers.py:

2010-12-22  Andrew Scherkus  <scherkus@chromium.org>

        Unreviewed.  Adding myself to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2010-12-22  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        TestNetscapePlugIn should use #if defined
        https://bugs.webkit.org/show_bug.cgi?id=51471

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_Initialize):
        (NPP_New):

2010-12-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [chromium] DRT inspector layout tests are flaky in debug.

        DevTools window should be closed explicitly because it has custom deinitialization code.

        https://bugs.webkit.org/show_bug.cgi?id=50722

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::closeRemainingWindows):

2010-12-22  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style shouldn't complaint about underscores in variables in objective C files.
        https://bugs.webkit.org/show_bug.cgi?id=51452

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FileState.__init__): Added the information to determine if a file is C or Objective C.
        Using the file extension if possible but falling back to the file contents if we have a header file.
        (_FileState.is_objective_c): Determine if we have an Objective C by examining the file contents if needed.
        (_FileState.is_c_or_objective_c):
        (check_using_std): Changed to using _FileState to determine the file type.
        (check_max_min_macros): Ditto.
        (check_for_null): Ditto.
        (check_style): Changed the parameters to various calls since they now need _FileState
        to determine the file type.
        (check_language): Added the file_state parameter so it could be passed
        to check_identifier_name_in_declaration.
        (check_identifier_name_in_declaration): Don't warn about underscores in variables if
        this is an Objective C file.
        (_process_lines): Added information for the _FileState constructor (and moved the
        call to a place that had the information).
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppFunctionsTest.test_is_c_or_objective_c): Changed the tests to use FileState and exercise
        its functionality.
        (WebKitStyleTest.test_names): Add tests for underscores in Objective C files.

2010-12-21  Andy Estes  <aestes@apple.com>

        Reviewed by Mark Rowe.

        Do not build non-Intel architectures for WebKit2-related projects.
        https://bugs.webkit.org/show_bug.cgi?id=51440

        * MiniBrowser/Configurations/Base.xcconfig: Only build for i386 and x86_64.
        * TestWebKitAPI/Configurations/Base.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto.

2010-12-21  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Rename WebThemeEngine/ControlDRT to WebThemeEngine/ControlDRTWin
        https://bugs.webkit.org/show_bug.cgi?id=51406 
        
        Rename WebThemeControlDRT to WebThemeControlDRTWin and WebThemeEngineDRT
        to WebThemeEngineDRTWin and update references everywhere.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestShellWin.cpp:
        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRT.cpp.
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRT.h.
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp.
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRT.h.

2010-12-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Clicking missing plug-in text does not show a sheet
        https://bugs.webkit.org/show_bug.cgi?id=51403

        Update for changes to the WebPageUIClient.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):

2010-12-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue will report constant failures as flaky if other tests flake
        https://bugs.webkit.org/show_bug.cgi?id=51272

        This patch just removes functionality and adds testing.
        Previously we attempted to report flaky tests when we had
        two different tests fail in a row.  However, since we stop
        running the tests at the first failure, our code was wrong in
        trying to determine flakiness from the incomplete runs.

        Originally I posted an alternate patch:
        https://bug-51272-attachments.webkit.org/attachment.cgi?id=77078
        which fixed our flaky logic in this case, however it was decided
        that that patch would be too difficult to maintain, so now
        I'm just removing the broken logic.

        This will dramatically cut-down on our flaky-test false positives
        at the (small) cost of the queues being unable to report
        any flakiness if the tree is very flaky.  (With at least one test
        flaking on every run, we'll never report failures anymore.)  I think
        this is a tradeoff worth making.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:

2010-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue wrongly rejects patches when it can't update itself
        https://bugs.webkit.org/show_bug.cgi?id=46636

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-12-20  Adam Barth  <abarth@webkit.org>

        Move web sites to Websites directory
        https://bugs.webkit.org/show_bug.cgi?id=51323

        Update references to BugsSite to point to the new location.

        This patch was never officially reviewed (because it was too large to
        upload to bugs.webkit.org), but it was discussed on webkit-dev and Mark
        Rowe gave me the green light.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:
        * Scripts/webkitpy/common/prettypatch.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/style/main.py:

2010-12-20  Adrienne Walker  <enne@google.com>

        Unreviewed. Adding myself to the list of committers.

        * webkitpy/common/config/committers.py:

2010-12-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8757601> Don't install header files in to the Resources directory.

        * Scripts/check-for-inappropriate-files-in-framework: Don't allow .h files in the
        Resources directory.

2010-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should include bot id when attaching failure diffs
        https://bugs.webkit.org/show_bug.cgi?id=51280

        This is a tiny change to include the bot id in the name of the attachment.
        Most of this diff is just changing the unit test expectations
        now that I hid the comment printing when the comment is None.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-20  Jeff Miller  <jeffm@apple.com>

        Reviewed by Dan Bernstein.

        Tools/vcbin/midl.exe needs to be rebuilt
        https://bugs.webkit.org/show_bug.cgi?id=51347

        * vcbin/midl.exe: Rebuilt.

2010-12-20  David Levin  <levin@chromium.org>

        Reviewed by Ariya Hidayat.

        .gitignore and webkit-tools-completion.sh have references to WebKitTools that should be Tools.
        https://bugs.webkit.org/show_bug.cgi?id=51343

        Follow up from the WebKitTools -> Tools rename.

        * Scripts/webkit-tools-completion.sh:

2010-12-20  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests ignores trailing EOL differences in text tests
        https://bugs.webkit.org/show_bug.cgi?id=36983

        Changed the handling of new-line characters within new-run-webkit-tests
        to match old-run-webkit-tests.  Differences in leading and trailing empty
        lines in text expectation files are no longer ignored.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        Added unit tests.  Removed old duplicate unit test entries.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-20  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style should detect function declarations (and trivial functions).
        https://bugs.webkit.org/show_bug.cgi?id=51303

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FunctionState.begin): Add is_declaration and changed the line count
        start to begin at -1 (which will keep the results consistent, since
        the starting line number passed in is one less in this change).
        (detect_functions): changed function detection to now catch trivial
        functions and declarations.
        (check_pass_ptr_usage): Don't check for Pass*Ptr on the first line
        of the function as this may look at return values (when processing
        a declaration).
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (FunctionDetectionTest.perform_function_detection): Basic mechanics
        of testing the function detection.
        (FunctionDetectionTest.test_basic_function_detection): Test a simple
        function.
        (FunctionDetectionTest.test_function_declaration_detection): Test a
        declaration.
        (FunctionDetectionTest.test_non_functions): A test case for a case
        that caused the code to fail due to the { being in quotes.
        (PassPtrTest.test_pass_ref_ptr_return_value): Added some more test
        cases to help catch false alarms for return values.
        (PassPtrTest.test_pass_ref_ptr_member_variable): Ensure that
        we don't get false alarms for member variables either.

2010-12-20  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [CMAKE] Rename WEBKITTOOLS_DIR to TOOLS_DIR
        https://bugs.webkit.org/show_bug.cgi?id=51319

        * CMakeListsEfl.txt:

2010-12-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Move WebKitExamplePlugins to Examples
        https://bugs.webkit.org/show_bug.cgi?id=51291

        * Scripts/webkitpy/common/config/build.py:

2010-12-17  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Qt buildfix after r74301.

        Rename WebKitTools to Tools
        https://bugs.webkit.org/show_bug.cgi?id=49861

        * MiniBrowser/DerivedSources.pro:
        * MiniBrowser/qt/MiniBrowser.pro:

2010-12-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Rename WebKitTools to Tools
        https://bugs.webkit.org/show_bug.cgi?id=49861

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * CodeCoverage/README:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::initializeFonts):
        * EWSTools/start-commit-queue.sh:
        * EWSTools/start-queue.sh:
        * GNUmakefile.am:
        * MIDLWrapper/MIDLWrapper.cpp:
        (wmain):
        * MiniBrowser/qt/MiniBrowser.pro:
        * Scripts/build-api-tests:
        * Scripts/build-dumprendertree:
        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/generate-coverage-data:
        * Scripts/old-run-webkit-tests:
        * Scripts/run-api-tests:
        * Scripts/run-iexploder-tests:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-mangleme-tests:
        * Scripts/run-sunspider:
        * Scripts/run-webkit-websocketserver:
        * Scripts/sunspider-compare-results:
        * Scripts/test-webkitperl:
        * Scripts/test-webkitpy:
        * Scripts/update-iexploder-cssproperties:
        * Scripts/update-webkit:
        * Scripts/update-webkit-localizable-strings:
        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/common/config/committervalidator.py:
        * Scripts/webkitpy/common/config/committervalidator_unittest.py:
        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/common/system/logutils_unittest.py:
        * Scripts/webkitpy/common/system/ospath_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * WebKitTestRunner/DerivedSources.pro:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * wx/build/build_utils.py:

2010-12-16  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        Settings::editingBehaviorType() incorrectly returns mac for the gtk build when running tests
        https://bugs.webkit.org/show_bug.cgi?id=51163

        Since GTK+'s default editing behavior was changed to UNIX in r70975 (see webkitwebsettings.cpp),
        GTK+'s DRT should also reset to UNIX after each test execution.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2010-12-17  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style should understand WTF #include guards
        https://bugs.webkit.org/show_bug.cgi?id=44911

        * Scripts/webkitpy/style/checkers/cpp.py:
        (get_header_guard_cpp_variable): modify to suggest the WTF style
        of header guard when appropriate.
        (check_for_header_guard): handle multiple return values from
        get_header_guard_cpp_variable
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_build_header_guard): Added tests for the WTF
        header style.

2010-12-16  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        test-webkitpy: unittest for the xml.py checker displays a decprecation warning.
        https://bugs.webkit.org/show_bug.cgi?id=51210

        The error only shows up when using python 2.6 or later.

        * Scripts/webkitpy/style/checkers/xml.py: Replace the usage of
        the decprecated field error,message with something equivalent.

2010-12-16  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Add --exit-after-n-failures/crashes to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=51160
        
        Abort test run (in a similar way to how control-C is handled) when
        --exit-after-n-failures/crashes-or-timeouts are passed and we've reached
        that number of unexpected failures/crashes/timeouts.

        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-16  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style unit tests has some duplicate boilerplate code.
        https://bugs.webkit.org/show_bug.cgi?id=49519

        * Scripts/webkitpy/style/checkers/cpp.py:
        (update_include_state): Replaced the "io" parameter with the global
        configuration _unit_test_config. This allowed not calling into
        functions at a low level and also not plumbing through the injection
        information through many levels of code.
        (check_for_include_what_you_use): Ditto.
        (process_file_data): Added the ability to set up the unit test config
        to allow for injection.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (ErrorCollector.__init__): Added support for having a filter for errors.
        (ErrorCollector.__call__): Ditto.
        (CppStyleTestBase.process_file_data): Added the ability to set unit_test_config.
        (CppStyleTestBase.perform_lint): Consolidated logic for the perform functions.
        (CppStyleTestBase.perform_single_line_lint): Replace specific calls to
        functions in the cpp.py with generic processing and a filter that
        indicates what errors should be kept.
        (CppStyleTestBase.perform_multi_line_lint): Ditto.
        (CppStyleTestBase.perform_language_rules_check): Ditto.
        (CppStyleTestBase.perform_function_lengths_check): Ditto.
        (CppStyleTestBase.perform_pass_ptr_check): Ditto.
        (CppStyleTestBase.perform_include_what_you_use): Ditto.
        (CppStyleTest.test_multi_line_comments): Added another
        error message which applies to the test case.
        (CppStyleTest.test_spacing_for_binary_ops): Fixed test
        to not have config.h, since it is processed as a header file.
        (CppStyleTest.test_static_or_global_stlstrings): Fixed variable name
        style and indentation in checked code.
        (OrderOfIncludesTest.test_check_preprocessor_in_include_section):
        Fixed line number.
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_with_error):
        Ditto.

2010-12-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74136.
        http://trac.webkit.org/changeset/74136
        https://bugs.webkit.org/show_bug.cgi?id=51135

        r74136 breaks chromium canary bots because some tests are not
        rebaselined correctly to resolve EOL differences (Requested by
        jianli on #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-15  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style to check .vcproj and .vsprops files for XML
        syntax errors

        Fixes <http://webkit.org/b/51103> check-webkit-style should check for
        XML syntax errors in .vcproj/.vsprops files

        Reviewed by Dave Levin.

        * Scripts/webkitpy/style/checker.py: Added lists of file extensions
        that should be treated as XML and that should be allowed to contain
        carriage returns. (These lists happen to be identical currently.)
        (FileType): Added a new XML type.
        (CheckerDispatcher.should_check_and_strip_carriage_returns): Added.
        Just does a simple file extension check.
        (CheckerDispatcher._file_type): Added a case for XML files.
        (CheckerDispatcher._create_checker): Ditto. We use XMLChecker for XML
        files (surprise!).
        (StyleProcessor.process): Ask the dispatcher whether we should pass the
        lines through the carriage checker.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherCarriageReturnTest.test_should_check_and_strip_carriage_returns):
        Added. Checks a few file names to see if carriage returns are allowed
        or not.
        (CheckerDispatcherDispatchTest.assert_checker_xml): Added. Similar to
        other assert_checker_* functions.
        (CheckerDispatcherDispatchTest.test_xml_paths): Added. Similar to other
        test_*_paths functions.
        (CheckerDispatcherDispatchTest.test_xml_paths): Added. Similar to other
        test_*_paths functions.
        (CheckerDispatcherDispatchTest.test_none_paths): Removed the vcproj
        file from this test case, as vcproj files now have a type.
        (StyleProcessor_CodeCoverageTest.MockDispatcher.should_check_and_strip_carriage_returns):
        Added. Similar to the other should_* functions.
        (StyleProcessor_CodeCoverageTest.test_process__carriage_returns_not_stripped):
        Added. Checks that carriage returns aren't checked for or stripped for
        allowed files.

        * Scripts/webkitpy/style/checkers/xml.py: Added.
        (XMLChecker.__init__): Simple init method.
        (XMLChecker.check): Pass each line through the expat parser, and record
        a style error for any errors thrown by the parser.

        * Scripts/webkitpy/style/checkers/xml_unittest.py: Added.
        (XMLCheckerTest.assert_no_error): Checks that the given XML does not
        produce a style error.
        (XMLCheckerTest.assert_error): Checks that the given XML produces an
        error of the given category on the given line.
        (XMLCheckerTest.mock_handle_style_error): Does nothing. Used for
        checking that the XMLChecker constructor works properly.
        (XMLCheckerTest.test_conflict_marker): Tests that conflict markers
        cause a style error (see, e.g., r73887).
        (XMLCheckerTest.test_extra_closing_tag): Tests that extra closing tags
        cause a style error (see, e.g., r73773).
        (XMLCheckerTest.test_init): Tests that the XMLChecker constructor works
        properly.
        (XMLCheckerTest.test_missing_closing_tag): Tests that missing closing
        tags cause a style error (see, e.g., r72795).
        (XMLCheckerTest.test_no_error): Tests that valid XML does not cause a
        style error.

2010-12-15  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        https://bugs.webkit.org/show_bug.cgi?id=51117
        Add a new leopard test bot
        really really commit to trunk this time.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2010-12-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Can't add files to an <input type=file>
        https://bugs.webkit.org/show_bug.cgi?id=51087

        * MiniBrowser/mac/BrowserWindowController.m:
        (runOpenPanel):
        (-[BrowserWindowController awakeFromNib]):
        Add simple implementation of runOpenPanel callback.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):
        Stub out runOpenPanel callback. 

2010-12-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should upload failure diffs when tests flake
        https://bugs.webkit.org/show_bug.cgi?id=51051

        To make this testable I needed to pipe FileSystem down onto tool.
        We've wanted it there for a long time anyway.

        This patch is kinda a big hack.  But we don't have a nice
        way to read results.html files.  I think this will need further
        revision before this code actually feels clean.

        As part of testing this change, I had to make MockBugzilla.create_bug
        actually return an id (like it should) which required updating
        a few other unit test results (for the better).

        The results_matching_keys change in layouttestresults/rebasline
        was an alternate path which I decided not to use in the end, but
        I left the change as it seemed an improvement.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-15  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests ignores trailing EOL differences in text tests
        https://bugs.webkit.org/show_bug.cgi?id=36983

        Changed the handling of new-line characters within new-run-webkit-tests
        to match old-run-webkit-tests.  Differences in leading and trailing empty
        lines in text expectation files are no longer ignored.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        Added unit tests.  Removed old duplicate unit test entries.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        make status-bubble white-space:nowrap so we can measure it's width without wrapping
        https://bugs.webkit.org/show_bug.cgi?id=51149

        * QueueStatusServer/templates/statusbubble.html:

2010-12-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        have the statusbubble postMessage it's metrics so that embedders can properly size the iframe
        https://bugs.webkit.org/show_bug.cgi?id=51125

        * QueueStatusServer/templates/statusbubble.html:

2010-12-15  Darin Adler  <darin@apple.com>

        * Scripts/webkitpy/common/net/buildbot: Added property svn:ignore.

2010-12-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74117.
        http://trac.webkit.org/changeset/74117
        https://bugs.webkit.org/show_bug.cgi?id=51113

        This broke the GTK1 build. (Requested by mrobinson on
        #webkit).

        * Scripts/webkitdirs.pm:

2010-12-15  Amruth Raj  <amruthraj@motorola.com> and Ravi Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        Change generate-forwarding-headers.pl for GTK port usage 
        (https://bugs.webkit.org/show_bug.cgi?id=37369)

        * Scripts/webkitdirs.pm: Added changes to build webkit2 for GTK port using build-webkit script.

2010-12-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Jian Li.

        [DRT/Chromium] Remove another unnecessary error message
        https://bugs.webkit.org/show_bug.cgi?id=51083

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didInvalidateRect):

2010-12-14  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Add a new Leopard Debug Test WK2 Bot

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2010-12-14  Ojan Vafai  <ojan@chromium.org>

        Fix python unittests after http://trac.webkit.org/changeset/74070.

        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2010-12-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Jian Li.

        [DRT/Chromium] Remove a unnecessary error message
        https://bugs.webkit.org/show_bug.cgi?id=51069

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):

2010-12-14  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ojan Vafai.

        Using BUG/BUGWK in test_expectations is error prone, should use BUGCR/BUGWK
        https://bugs.webkit.org/show_bug.cgi?id=48926

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        Add presubmit check that BUG isn't used, either BUGCR/BUGWK/BUGV8_.

2010-12-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] [Symbian] Do not use pkg-config on Symbian as it is not supported
        https://bugs.webkit.org/show_bug.cgi?id=50231

        Guard CONFIG+=link_pkgconfig with !symbian.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2010-12-14  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Ojan Vafai.

        [new-run-webkit-tests] expectations parsing is slow
        https://bugs.webkit.org/show_bug.cgi?id=50635

        Avoid expensive iteration of all the tests when checking if a test
        file is to be skipped or not.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2010-12-14  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Implement STATE_FOCUSED, STATE_FOCUSABLE, and corresponding events for text objects
        https://bugs.webkit.org/show_bug.cgi?id=27048

        Add support in DRT for checking whether an accessibility UI
        element is focusable and/or focused. Implemented for GTK.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsFocusedCallback): New.
        (getIsFocusableCallback): New.
        (AccessibilityUIElement::getJSClass): Add the new available
        callbacks for isFocused and isFocusable.
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isFocused): New, implemented by checking
        whether the related AtkState value is in the object's state set.
        (AccessibilityUIElement::isFocusable): Ditto.
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isFocused): New, dummy implementation.
        (AccessibilityUIElement::isFocusable): Ditto.
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isFocused): Ditto.
        (AccessibilityUIElement::isFocusable): Ditto.

2010-12-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        webkit-patch should warn users when they're using a 32-bit git on a 64-bit system
        https://bugs.webkit.org/show_bug.cgi?id=50715

        This patch makes webkit-patch print the following:

        Warning: This machine is 64-bit, but the git binary (/usr/local/git/bin/git) does not support 64-bit.
        Install a 64-bit git for better performance, see:
        https://lists.webkit.org/pipermail/webkit-dev/2010-December/015249.html

        I wrote this mostly because I have approximately 8 machines that I use
        and making sure each one is using a good Git install seemed folly.
        webkit-patch makes a lot of git calls, so using a fast git can shave
        several seconds in every invocation.  See the webkit-dev thread for more info.

        This message will print twice during 'webkit-patch upload',
        once from webkit-patch and once from check-webkit-style.

        Unfortunately there is no good way to test this due to how machine-dependent
        the code is.  I considered writing a test for the log message, but it seemed not worth it.

        * Scripts/webkitpy/common/checkout/scm.py:

2010-12-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        FlakyTestReporter doesn't understand bots running from multiple email addresses
        https://bugs.webkit.org/show_bug.cgi?id=50960

        This explains at least one of the dupes of:
        https://bugs.webkit.org/show_bug.cgi?id=50863
        that we saw filed by the commit-queue this morning.
        I think the other one was explained by my previous fix to result counting code.

        Since this is really hard to test with a unit test, instead I
        create a new (possibly useful in the future) command
        which given a layout test path will return you
        the one bug which our tools would assume it the flaky test bug.
        If some other script wants to use bug-for-test we'll
        need to extend it with some options like --create-if-missing or similar.

        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/bugfortest.py: Added.

2010-12-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        Add option to build-webkit to not build WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50988
        
        Add support for a --no-webkit2 option to build-webkit. It seems to save
        ~1 minute from clean builds and ~10 seconds from no-op builds.

        * Scripts/build-webkit:

2010-12-13  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Dave Kilzer.

        Update iexploder from 1.3.2 to 1.7.2
        Move 1.3.2 into its own subdir
        Add 1.7.2 into its own subdir
        update scripts to point to new 1.3.2 location (avoid breaking existing scripts)

        * Scripts/run-iexploder-tests:
        * Scripts/update-iexploder-cssproperties:
        * iExploder/CHANGELOG.txt: Removed.
        * iExploder/LICENSE.txt: Removed.
        * iExploder/README.txt: Removed.
        * iExploder/htdocs: Removed.
        * iExploder/iexploder-1.3.2: Added.
        * iExploder/iexploder-1.3.2/CHANGELOG.txt: Copied from iExploder/CHANGELOG.txt.
        * iExploder/iexploder-1.3.2/LICENSE.txt: Copied from iExploder/LICENSE.txt.
        * iExploder/iexploder-1.3.2/README.txt: Copied from iExploder/README.txt.
        * iExploder/iexploder-1.3.2/htdocs: Added.
        * iExploder/iexploder-1.3.2/htdocs/config.rb: Copied from iExploder/htdocs/config.rb.
        * iExploder/iexploder-1.3.2/htdocs/cssproperties.in: Copied from iExploder/htdocs/cssproperties.in.
        * iExploder/iexploder-1.3.2/htdocs/cssvalues.in: Copied from iExploder/htdocs/cssvalues.in.
        * iExploder/iexploder-1.3.2/htdocs/htmlattrs.in: Copied from iExploder/htdocs/htmlattrs.in.
        * iExploder/iexploder-1.3.2/htdocs/htmltags.in: Copied from iExploder/htdocs/htmltags.in.
        * iExploder/iexploder-1.3.2/htdocs/htmlvalues.in: Copied from iExploder/htdocs/htmlvalues.in.
        * iExploder/iexploder-1.3.2/htdocs/iexploder.cgi: Copied from iExploder/htdocs/iexploder.cgi.
        * iExploder/iexploder-1.3.2/htdocs/iexploder.rb: Copied from iExploder/htdocs/iexploder.rb.
        * iExploder/iexploder-1.3.2/htdocs/index.html: Copied from iExploder/htdocs/index.html.
        * iExploder/iexploder-1.3.2/htdocs/webserver.rb: Copied from iExploder/htdocs/webserver.rb.
        * iExploder/iexploder-1.3.2/tools: Added.
        * iExploder/iexploder-1.3.2/tools/lasthit.rb: Copied from iExploder/tools/lasthit.rb.
        * iExploder/iexploder-1.3.2/tools/osx_last_crash.rb: Copied from iExploder/tools/osx_last_crash.rb.
        * iExploder/iexploder-1.3.2/tools/showtest.rb: Copied from iExploder/tools/showtest.rb.
        * iExploder/iexploder-1.7.2: Added.
        * iExploder/iexploder-1.7.2/ChangeLog.txt: Added.
        * iExploder/iexploder-1.7.2/LICENSE.txt: Added.
        * iExploder/iexploder-1.7.2/README.txt: Added.
        * iExploder/iexploder-1.7.2/output: Added.
        * iExploder/iexploder-1.7.2/src: Added.
        * iExploder/iexploder-1.7.2/src/browser_harness.rb: Added.
        * iExploder/iexploder-1.7.2/src/config.yaml: Added.
        * iExploder/iexploder-1.7.2/src/css-atrules: Added.
        * iExploder/iexploder-1.7.2/src/css-atrules/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/css-atrules/webkit: Added.
        * iExploder/iexploder-1.7.2/src/css-properties: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/dillo: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/internet_explorer6: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/webkit: Added.
        * iExploder/iexploder-1.7.2/src/css-pseudo: Added.
        * iExploder/iexploder-1.7.2/src/css-pseudo/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/css-pseudo/webkit: Added.
        * iExploder/iexploder-1.7.2/src/css-values: Added.
        * iExploder/iexploder-1.7.2/src/css-values/dillo: Added.
        * iExploder/iexploder-1.7.2/src/css-values/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/css-values/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/css-values/other: Added.
        * iExploder/iexploder-1.7.2/src/css-values/webkit: Added.
        * iExploder/iexploder-1.7.2/src/headers: Added.
        * iExploder/iexploder-1.7.2/src/headers/dillo: Added.
        * iExploder/iexploder-1.7.2/src/headers/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/headers/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/headers/webkit: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/dillo: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/internet_explorer6: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/other: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/webkit: Added.
        * iExploder/iexploder-1.7.2/src/html-tags: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/dillo: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/other: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/webkit: Added.
        * iExploder/iexploder-1.7.2/src/html-values: Added.
        * iExploder/iexploder-1.7.2/src/html-values/dillo: Added.
        * iExploder/iexploder-1.7.2/src/html-values/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/html-values/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/html-values/other: Added.
        * iExploder/iexploder-1.7.2/src/html-values/webkit: Added.
        * iExploder/iexploder-1.7.2/src/iexploder.cgi: Added.
        * iExploder/iexploder-1.7.2/src/iexploder.rb: Added.
        * iExploder/iexploder-1.7.2/src/index.html: Added.
        * iExploder/iexploder-1.7.2/src/media: Added.
        * iExploder/iexploder-1.7.2/src/media/blank.ogg: Added.
        * iExploder/iexploder-1.7.2/src/media/blank.snd: Added.
        * iExploder/iexploder-1.7.2/src/media/blank.wav: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.bmp: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.gif: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.ico: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.jng: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.jpg: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.png: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.svg: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.tiff: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.xbm: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.xpm: Added.
        * iExploder/iexploder-1.7.2/src/mime-types: Added.
        * iExploder/iexploder-1.7.2/src/mime-types/dillo: Added.
        * iExploder/iexploder-1.7.2/src/mime-types/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/mime-types/webkit: Added.
        * iExploder/iexploder-1.7.2/src/protocols: Added.
        * iExploder/iexploder-1.7.2/src/protocols/dillo: Added.
        * iExploder/iexploder-1.7.2/src/protocols/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/protocols/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/protocols/webkit: Added.
        * iExploder/iexploder-1.7.2/src/scanner.rb: Added.
        * iExploder/iexploder-1.7.2/src/version.rb: Added.
        * iExploder/iexploder-1.7.2/src/webserver.rb: Added.
        * iExploder/iexploder-1.7.2/testcases: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-Linux_x86_64_rv2.0b6pre_Gecko-20100904_Firefox-4.0b6pre-TEST-8375-1_59.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-Opera-9.80_Linux_x86_64_en_Presto-2.6.30_Version-10.61-16704-3_108,3.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Intel_Mac_OS_X_10_6_4_en-US_AppleWebKit-534.8_Chrome-7.0.529.0-TEST-611-3_36,9.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Intel_Mac_OS_X_10_6_4_en-US_AppleWebKit-534.8_hrome-7.0.529.0-TEST-55313622206-3_6,0.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Linux_x86_64_en-US_AppleWebKit-534.6_Chrome-7.0.503.1-TEST-120813-8_72,56,24,8,0.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Linux_x86_64_en-US_AppleWebKit-534.6_Chrome-7.0.503.1-TEST-121240-3_81,3.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Linux_x86_64_en-US_AppleWebKit-534.7_Chrome-7.0.513.0-4800-5_80,65,15.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Linux_x86_64_en-US_AppleWebKit-534.7_Chrome-7.0.513.0-TEST-23583190347-3_15,12.html: Added.
        * iExploder/iexploder-1.7.2/tools: Added.
        * iExploder/iexploder-1.7.2/tools/lasthit.rb: Added.
        * iExploder/iexploder-1.7.2/tools/osx_last_crash.rb: Added.
        * iExploder/iexploder-1.7.2/tools/release_src.sh: Added.
        * iExploder/iexploder-1.7.2/tools/update_html_tags_from_sources.sh: Added.
        * iExploder/tools: Removed.

2010-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove associated page concept from WKView constructor
        https://bugs.webkit.org/show_bug.cgi?id=50983

        Step 1: Remove associate page constructors from WKView and make
        all views use the shared namespace for the context.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:

2010-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Change the WebKit2 public API so there is no explicit WKPageNamespace object
        https://bugs.webkit.org/show_bug.cgi?id=50898

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        * MiniBrowser/win/BrowserView.cpp:
        Convert MiniBrowser to not use PageNamespaces.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        Convert TestWebKitAPI to not use PageNamespaces.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        Convert WebKitTestRunner to not use PageNamespaces.

2010-12-13  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        webkit-patch rollout should be able to do multi-revision rollouts
        https://bugs.webkit.org/show_bug.cgi?id=33336

        Make it possible to pass more than one revision to webkit-patch.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/revertrevision.py:

2010-12-13  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Teach webkit-patch how to search bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=50500

        webkit-patch bug-search fails when there is only one result.
        Turns out we needed a bit more logic in our result count parsing code.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:

2010-12-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add setSerializeHTTPLoads function to allow testing resource load order on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=50758

        * DumpRenderTree/LayoutTestController.cpp:
        (setSerializeHTTPLoadsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setSerializeHTTPLoads):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setSerializeHTTPLoads):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setSerializeHTTPLoads):

2010-12-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        Remove "use-drt" option from test step command line, since the option was removed in r73748.
        https://bugs.webkit.org/show_bug.cgi?id=50936

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Removed the option.

2010-12-13  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Add revlink to BuildBot status
        https://bugs.webkit.org/show_bug.cgi?id=50914

        This adds a hyperlink to trac changeset on the revision numbers. 

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:

2010-12-13  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Fix build if WebKitTools are not available
        https://bugs.webkit.org/show_bug.cgi?id=50242

        * MiniBrowser/qt/MiniBrowser.pro: Correct the comment.
        * Scripts/webkitdirs.pm: Added WebKitTools/MiniBrowser to $subdirs.
        * MiniBrowser/DerivedSources.pro: Added.

2010-12-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS Queues should remove orpahned pyc files before starting
        https://bugs.webkit.org/show_bug.cgi?id=50904

        A previous check added a platform.py which caused
        EWS bots on some platforms to hit an import exception.
        The platform.py file was removed in a subsequent commit, but
        the EWS bots in question stayed stuck.  This change will
        fix those bots once restarted (and prevent this in the future).

        I also went ahead and unified start-queue and start-commit-queue
        since they were nearly identical.  I also added bot_id support
        to both force all EWSes to have bot ids as well as get rid of the one
        remaining reason why I had my own copies of these scripts.
        Hopefully this will be enough to get all the other bot admins
        (ahem, Adam, ahem) to move to using these checked in copies as well.

        * EWSTools/start-commit-queue.sh: Removed.
        * EWSTools/start-queue.sh:

2010-10-28  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        spellcheck does not check pasted text
        https://bugs.webkit.org/show_bug.cgi?id=40092

        Added LayoutTestController::setAsynchronousSpellCheckingEnabled()
        to control the setting.

        * DumpRenderTree/LayoutTestController.cpp:
        (setAsynchronousSpellCheckingEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):

2010-12-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix failing API test. It turns out that a pop-state event
        is sent before every fragment navigation, so we have to test
        for it in addition in PageLoadDidChangeLocationWithinPageForFrame.

        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::didSameDocumentNavigationForFrame):

2010-12-12  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Add new-run-webkit-tests support to gtk
        https://bugs.webkit.org/show_bug.cgi?id=50681

        Adding the basic support to run the new-run-webkit-tests.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2010-10-11  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Mock DeviceOrientation client for DRT
        https://bugs.webkit.org/show_bug.cgi?id=47490

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockDeviceOrientation):

2010-12-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] launcher: disable the Mozilla-style fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=50874

        Disabling the fullscreen API until its implementation for GTK is
        mature enough. The webview setting for it is already FALSE by
        default.

        * GtkLauncher/main.c:
        (createWindow):

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue flaky test messages show cryptic version information for mac os x
        https://bugs.webkit.org/show_bug.cgi?id=50864

        Turns out platform.platform() returns kernel version information
        which isn't helpful, and just plain confusing on Mac
        (OS X 10.6.5 uses Darwin Kernel 10.5.0).

        So I've updated PlatformInfo.display_name() to special case
        mac.  I also found a bad use of sys.platform in the process
        and fixed that.  (sys.platform always returns 'darwin' on mac).

        * Scripts/webkitpy/common/system/platforminfo.py:
        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-12-10  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Exception seen while reporting flaky test with commit-queue.
        Just a missing include.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:

2010-12-10  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Remove old JSONResultsGenerator script that existed for backward-compatibility
        https://bugs.webkit.org/show_bug.cgi?id=50796

        Also updating the test code to use JSONResultsGeneratorBase and
        to improve test coverage for incremental cases.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2010-12-10  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        prepare-ChangeLog --help doesn't mention --bug shorthand -b
        https://bugs.webkit.org/show_bug.cgi?id=50835

        * Scripts/prepare-ChangeLog: be more explicit about -b and match file style.

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Bugs created by the commit-queue should all block on a master bug
        https://bugs.webkit.org/show_bug.cgi?id=50857

        This makes all bugs created by the commit-queue block on:
        https://bugs.webkit.org/show_bug.cgi?id=50856

        In the process of testing this, I found that the existing
        create_bug code was wrong.  I also found that existing
        unit tests for create-rollout used invalid values
        for options.blocks.  I fixed both issues and tested.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach webkitpy how to follow duplicate chains when posting comments on flake bugs
        https://bugs.webkit.org/show_bug.cgi?id=50853

        I also discovered when doing this that the code was posting
        the comment on the wrong bug, but that's fixed here too.

        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Make WKContextGetStatistics gather global statistics
        https://bugs.webkit.org/show_bug.cgi?id=50850

        Remove the code that gets the statistics and fills in the per context
        statistics information for now.

        * MiniBrowser/mac/BrowserStatisticsWindowController.m:
        (-[BrowserStatisticsWindowController refreshStatistics:]):

2010-12-10  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        commit-queue should report port/platform information when commenting on flaky test bugs
        https://bugs.webkit.org/show_bug.cgi?id=50839

        Renamed platform.py to platforminfo.py.  This broke import platform in executive.py
        which was only used by new run webkit tests (and clearly not unit tested).

        * Scripts/webkitpy/common/system/platforminfo.py: Renamed from WebKitTools/Scripts/webkitpy/common/system/platform.py.
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        commit-queue should report port/platform information when commenting on flaky test bugs
        https://bugs.webkit.org/show_bug.cgi?id=50839

        This was a suggestion from Tony Chang this morning.
        I added a platform.py class so I could easily mock the platform call,
        but that may not be the final solution for this mocking.
        We'll try it and see.

        * Scripts/webkitpy/common/system/platform.py: Added.
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-10  Krithigassree Sambamurthy  <krithigassree.sambamurthy@nokia.com>

        Reviewed by Joseph Pecoraro.

        Bug 43455 - [Qt]: Implement Application Cache Quotas
        https://bugs.webkit.org/show_bug.cgi?id=43455

        Introduce functions to allow new appcache layout test origin-quota.html
        to work correctly under Qt.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::dumpApplicationCacheQuota):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:

        Introduce functions to allow new appcache layout test origin-quota.html
        to be successful under qt. Changes required because LayoutTestControllerQt
        does not inherit from LayoutController.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::shouldDumpApplicationCacheDelegateCallbacks):
        (LayoutTestController::dumpApplicationCacheDelegateCallbacks):

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move buildbot.py into its own module so we can split it out into one-file-per-class
        https://bugs.webkit.org/show_bug.cgi?id=50806

        We're adding more buildbot logic these days, so it makes sense
        to give buildbot its own module.

        * Scripts/webkitpy/common/net/buildbot/__init__.py: Added.
        * Scripts/webkitpy/common/net/buildbot/buildbot.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/buildbot.py.
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py.
        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/regressionwindow.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2010-12-10  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Use FileSystem::remove when cleaning up http lock files
        https://bugs.webkit.org/show_bug.cgi?id=50830

        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-12-10  Joone Hur  <joone@kldp.org>

        Reviewed by Martin Robinson.

        [GTK] DRT needs layoutTestController.setCacheModel
        https://bugs.webkit.org/show_bug.cgi?id=50705
        
        webkit_set_cache_mode() is called to set the cache model.
        
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCacheModel): Set the cache model. 

2010-12-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] remove --use-drt and add --use-test-shell
        https://bugs.webkit.org/show_bug.cgi?id=50701

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2010-12-10  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        [Chromium] Implement mocks for client-based geolocation
        https://bugs.webkit.org/show_bug.cgi?id=46895

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationPosition):
        (LayoutTestController::setMockGeolocationError):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::geolocationClient):
        (WebViewHost::geolocationClientMock):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-12-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add hasSpellingMarker support to the DRT
        https://bugs.webkit.org/show_bug.cgi?id=50739

        Implemented the hasSpellingMarker to support spelling tests.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::hasSpellingMarker):

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        webkit-patch: not possible to use build-and-test with local commits
        https://bugs.webkit.org/show_bug.cgi?id=33378

        Make --no-clean not even check if we have local commits.
        It's unclear to me why the code was originally written this way.
        I was unable to dig up a reason from svn history.

        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory_unittest.py: Copied from WebKitTools/Scripts/webkitpy/tool/steps/cleanworkingdirectory.py.

2010-12-10  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] AX: implement isEnabled in DRT
        https://bugs.webkit.org/show_bug.cgi?id=50814

        Implement AccessibilityUIElement::isEnabled() for GTK.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (checkElementState): New function to refactor common code.
        (AccessibilityUIElement::isEnabled): Implement this by checking
        the current state of the AtkObject.
        (AccessibilityUIElement::isSelected): Use the new
        checkElementState function.

2010-12-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Add the QWKContext API class to wrap the WebContext.
        https://bugs.webkit.org/show_bug.cgi?id=50750

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView):
        * MiniBrowser/qt/BrowserView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::WebView):

2010-12-10  Joone Hur  <joone@kldp.org>

        Reviewed by Xan Lopez.

        [GTK] Unskipping some test cases in userscripts dependent on addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=50808

        Unskipping the following test cases:
        userscripts/mixed-case-stylesheet.html
        userscripts/simple-stylesheet.html
        userscripts/user-style-all-frames.html

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::addUserStyleSheet):

2010-12-10  Joone Hur  <joone@kldp.org>

        Reviewed by Eric Seidel.

        [GTK] Add DRT support for pageProperty, isPageBoxVisible, pageSizeAndMarginsInPixels, and addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=50783

        This patch allows to unskip the following test cases:
        printing/page-rule-selection.html
        printing/page-format-data.html

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pageProperty): Added.
        (LayoutTestController::isPageBoxVisible): Ditto.
        (LayoutTestController::pageSizeAndMarginsInPixels): Ditto.
        (LayoutTestController::addUserStyleSheet): Ditto.

2010-12-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make QtTestBrowser spawn QNAM in a secondary thread.

        A menu allows to switch QNAM back to the same thread.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleThreadedQnam):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::setQnamThreaded):
        * QtTestBrowser/webpage.h:
        (QnamThread::QnamThread):
        (QnamThread::~QnamThread):
        (QnamThread::networkAccessManager):
        (QnamThread::run):

2010-12-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] style="font-family: courier" makes text disappear
        https://bugs.webkit.org/show_bug.cgi?id=47452

        Add a test that verifies that fonts without valid charmaps are
        never selected.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Initialize DRT with our font (derived from Ahem)
        that has no valid charmap.
        * DumpRenderTree/gtk/fonts/FontWithNoValidEncoding.fon: Added.
        * DumpRenderTree/gtk/fonts/fonts.conf: Updated settings to override users'
        settings which may disable selection of bitmap fonts.

2010-12-10  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        The commit-queue should file bugs about flaky tests it encounters
        https://bugs.webkit.org/show_bug.cgi?id=50803

        create_bug_for_flaky_test was insufficiently tested, thus buggy.
        Now it's tested.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:

2010-12-10  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Somehow this last-minute edit didn't quite get committed.

        The commit-queue should file bugs about flaky tests it encounters
        https://bugs.webkit.org/show_bug.cgi?id=50803

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:

2010-12-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        The commit-queue should file bugs about flaky tests it encounters
        https://bugs.webkit.org/show_bug.cgi?id=50803

        This change got a bit big.  I also added a new config.urls file
        because I needed to share the view_source_url code with committervalidator.py.

        This adds a new class FlakyTestReporter which holds all the logic about
        reporting flaky tests to bugzilla.

        Right now this code knows how to look up bugs for flaky tests.
        If it can't find a bug filed from the commit-queue, it will open a new
        one, ccing the relevant people and adding information about the failure.

        It is not yet smart enough to chase down duplicate chains, or to include
        the actual failure diff.  But those can be added in later iterations.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        * Scripts/webkitpy/common/config/committervalidator.py:
        * Scripts/webkitpy/common/config/urls.py: Copied from WebKitTools/Scripts/webkitpy/tool/comments.py.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py: Added.
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py: Copied from WebKitTools/Scripts/webkitpy/tool/comments.py.
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/comments.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/commit.py:

2010-12-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach webkit-patch how to search bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=50500

        This is a step towards teaching webkitpy how to file
        new bugs for flaky tests and update them when new flakes occur.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/bugsearch.py: Added.

2010-12-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Ojan Vafai.

        commit-queue errors out due to local commits
        https://bugs.webkit.org/show_bug.cgi?id=50766

        We seem to be tripping over having local commits in the working copy a
        lot recently.  I don't quite fully understand what the issue is, but
        this patch attempts to solve the problem by adding an explicit clean
        step before processing a patch.  Previously, we did the cleaning as
        part of the apply-attachment step, so this might not actually fix the
        problem.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-12-09  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        Make new-run-webkit-tests --lint-test-files log slightly better
        messages and return -1 if lint fails. Remove the
        'suppress_errors' keyword param to the TestExpectationsFile
        class, and clean up logging and exception raising for error
        handling. Also add more unit tests and clean up the unit test code a bit.

        https://bugs.webkit.org/show_bug.cgi?id=50205

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2010-12-09  Tony Chang  <tony@chromium.org>

        Unreviewed, fix for windows code.  We were catching the wrong
        exception in Windows.

        * Scripts/webkitpy/common/system/filesystem.py:

2010-12-09  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk (part IV)
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Adjust call sites of webkit_thread_count to use the DumpRenderTreeSupportGtk version now.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::workerThreadCount):

2010-12-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Support the Mozilla-style Fullscreen Javascript API
        https://bugs.webkit.org/show_bug.cgi?id=50572

        Enable the Javascript Fullscreen support in the GtkLauncher. Also
        make DRT update the Chrome when the WebView settings have been
        reset to consistent values.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * GtkLauncher/main.c:
        (create_window):
        * Scripts/build-webkit:

2010-12-09  Koan-Sin Tan  <koansin.tan@gmail.com>

        Reviewed by Tor Arne Vestbø

        [Qt] run-launcher doesn't start the browser on Mac OS X 10.6
        https://bugs.webkit.org/show_bug.cgi?id=50742

        check not only QtWebKit.framework/QtWebKit but also libQtWebKit.dylib

        * Scripts/webkitdirs.pm:

2010-12-09  Joone Hur  <joone@kldp.org>

         Reviewed by Martin Robinson.

         [GTK] Support for viewport meta tag
         https://bugs.webkit.org/show_bug.cgi?id=45443

         Add support for testing the viewport properties for WebKitGtk.

         * DumpRenderTree/LayoutTestController.cpp:
         (dumpConfigurationForViewportCallback): Added this JS callback to set the size of the visible viewport.
         (LayoutTestController::staticFunctions):
         * DumpRenderTree/LayoutTestController.h:
         * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
         (LayoutTestController::dumpConfigurationForViewport): Added this function to test the viewport properties.
         * DumpRenderTree/mac/LayoutTestControllerMac.mm:
         (LayoutTestController::dumpConfigurationForViewport): Ditto.
         * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
         (LayoutTestController::dumpConfigurationForViewport): Ditto.
         * DumpRenderTree/win/LayoutTestControllerWin.cpp:
         (LayoutTestController::dumpConfigurationForViewport): Ditto.
         * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
         (LayoutTestController::dumpConfigurationForViewport): Ditto.

2010-12-08  William Siegrist <wsiegrist@apple.com>

        Reviewed by Eric Seidel.

        Migrate buildbot.py from xmlrpc to json.
        https://bugs.webkit.org/show_bug.cgi?id=50647

        * Scripts/webkitpy/common/net/buildbot.py:

2010-12-08  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        make starting the websocket server more reliable on windows
        https://bugs.webkit.org/show_bug.cgi?id=50712

        * Scripts/webkitpy/common/system/filesystem.py:
        (remove): Substitute method for os.remove to retry on error on Windows
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py: Use FileSystem.remove

2010-12-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Implement WebChromeClient::exceededDatabaseQuota
        https://bugs.webkit.org/show_bug.cgi?id=50656

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        Indicate that exceededDatabaseQuota is not implemented.
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        Ditto.
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        Ditto.
        (WTR::TestController::initialize):
        Ditto.

2010-12-08  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk (part III)
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Moved the following methods from webkitprivate.h to DumpRenderTreeSupportGtk.cpp|h:
        * webkit_gc_collect_javascript_objects;
        * webkit_gc_collect_javascript_objects_on_alternate_thread;
        * webkit_gc_count_javascript_objects;
        * webkit_web_frame_layout.

        These were all only used by GTK+ DRT.

        * DumpRenderTree/gtk/EventSender.cpp:
        (dispatchEvent):
        * DumpRenderTree/gtk/GCControllerGtk.cpp:
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):

2010-12-07  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] force NRWT to use DRT
        https://bugs.webkit.org/show_bug.cgi?id=50359

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-12-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Generalize didChangeLocationWithinPageForFrame for all same document navigations
        https://bugs.webkit.org/show_bug.cgi?id=50584

        * MiniBrowser/mac/BrowserWindowController.m:
        (didSameDocumentNavigationForFrame):
        (-[BrowserWindowController awakeFromNib]):
        (-[BrowserWindowController didSameDocumentNavigationForFrame:]):
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didSameDocumentNavigationForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-12-06  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Make TestResultsServer return 404 for non-existing results files.
        https://bugs.webkit.org/show_bug.cgi?id=50581

        * TestResultServer/handlers/testfilehandler.py:

2010-12-06  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] fix an assert hit in DRT
        https://bugs.webkit.org/show_bug.cgi?id=50575

        This class uses WTF's RefPtr, but expects chrome's base::RefPtr
        semantics.

        Otherwise, we hit ASSERTION FAILED: !m_adoptionIsRequired
        (third_party/WebKit/JavaScriptCore/wtf/RefCounted.h:37 void
        WTF::RefCountedBase::ref()).

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::TestWebWorker):

2010-12-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        make webkit-patch command work when the git branch is not synced to the remote svn branch
        https://bugs.webkit.org/show_bug.cgi?id=50424

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-12-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Add build system
        https://bugs.webkit.org/show_bug.cgi?id=50522

        * CMakeListsWinCE.txt: Added.

2010-12-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Allow the Chromium port to have Leopard-specific baselines
        https://bugs.webkit.org/show_bug.cgi?id=50506

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:

2010-12-03  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] fix 2 bugs with inspector tests in DRT
        https://bugs.webkit.org/show_bug.cgi?id=50492

        Tasks can outlive the tasklist (even when canceled) so this was
        causing a crash when ~WebTask() ran.  Avoid this by unregistering
        when a task is canceled.

        Also fix an assert when closing devtool windows by copying some
        logic from test_shell.

        * DumpRenderTree/chromium/Task.cpp:
        (WebTask::~WebTask):
        (TaskList::revokeAll):
        * DumpRenderTree/chromium/Task.h: Canceling a task now removes it from
            the tasklist (since the task can outlive the tasklist).
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::devToolsWebView):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::~WebViewHost): Don't load about:blank when closing
            a window if the window has devtools loaded.  This avoids an
            ASSERT and matches test_shell.

2010-12-06  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix GtkLauncher.c style, use webkit style
        https://bugs.webkit.org/show_bug.cgi?id=50542

        * GtkLauncher/main.c:
        (activateUriEntryCb):
        (updateTitle):
        (linkHoverCb):
        (notifyTitleCb):
        (notifyLoadStatusCb):
        (notifyProgressCb):
        (destroyCb):
        (goBackCb):
        (goForwardCb):
        (create_webViewCb):
        (webViewReadyCb):
        (closeWebViewCb):
        (createBrowser):
        (createStatusbar):
        (createToolbar):
        (createWindow):
        (main):

2010-12-04  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk (Part II)
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Moved more private method declared with WEBKIT_API to
        DumpRenderTreeSupportGtk, since they were only being used by DRT.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::addOriginAccessWhitelistEntry):
        (LayoutTestController::execCommand):
        (LayoutTestController::isCommandEnabled):

2010-12-04  Antonio Gomes  <agomes@rim.com>

        Reviewed by Andreas Kling.

        Removed extern webkit_web_view_set_group_name from gtk/DumpRenderTree.cpp

        Method was removed by http://trac.webkit.org/changeset/71604

        * DumpRenderTree/gtk/DumpRenderTree.cpp:

2010-12-05  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix compilation warnings reported by clang
        https://bugs.webkit.org/show_bug.cgi?id=50252

        * GtkLauncher/main.c:
        (create_window): The create_statusbar function does not have
        parameters.

2010-12-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Zero-sized font does not yet work

        Fix fast/text/font-size-zero.html

        Copy other ports by setting minimumFontSize to 0 for DRT runs.

        https://bugs.webkit.org/show_bug.cgi?id=49759

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):

2010-12-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        WebKit2: Need client functions to notify app when the url changes due to a fragment navigation
        https://bugs.webkit.org/show_bug.cgi?id=50511

        Update tools for new didChangeLocationWithinPageForFrame client function (and changed bundle
        signature) and added a test for the functionality (PageLoadDidChangeLocationWithinPageForFrame.cpp)

        * MiniBrowser/mac/BrowserWindowController.m:
        (didChangeLocationWithinPageForFrame):
        (-[BrowserWindowController awakeFromNib]):
        (-[BrowserWindowController didChangeLocationWithinPageForFrame:]):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::toWK):
        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::adoptWK):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp: Added.
        (TestWebKitAPI::nullJavaScriptCallback):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didChangeLocationWithinPageForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/file-with-anchor.html: Added.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didChangeLocationWithinPageForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-11-08  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Made the previous calls to webkit_web_frame* functions defined as private
        APIs in webkitprivate.h go through DRTSupportGtk.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::focusedElement):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (resetDefaultsToConsistentValues):
        (dump):
        (webViewDocumentLoadFinished):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::counterValueForElementById):
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        (LayoutTestController::numberOfActiveAnimations):
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        (LayoutTestController::markerTextForListItem):

2010-12-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: use pretty text diff output
        https://bugs.webkit.org/show_bug.cgi?id=50484
        
        Serve *-pretty-diff.html for text diff output.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73302.
        http://trac.webkit.org/changeset/73302
        https://bugs.webkit.org/show_bug.cgi?id=50499

        Causes crashes in debug LayoutTests (Requested by xan_ on
        #webkit).

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::parentElementCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        * DumpRenderTree/chromium/CppBoundClass.h:

2010-12-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Enable <a ping> for Mac/Windows/WebKit2 builds
        <rdar://problem/8504473>
        https://bugs.webkit.org/show_bug.cgi?id=50488

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST): Test that the default value of
        WKPreferencesGetHyperlinkAuditingEnabled is true.

2010-12-03  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Include the FrameView widget of a RenderWidget in the accessibility tree.
        https://bugs.webkit.org/show_bug.cgi?id=49106

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::parentElementCallback):
        (AccessibilityUIElement::isEqualCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        (CppBoundClass::getFromCppVariant):
        * DumpRenderTree/chromium/CppBoundClass.h:

2010-12-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: organize tests by state, add dry run mode
        https://bugs.webkit.org/show_bug.cgi?id=50473
        
        Group tests in the menu by state, so that it's easier to see after
        processing the queue which failed.
        
        Add support for the --dry-run flag so that it's easier to test changes
        such as this (stubs out filesystem and SCM operations).

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-12-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Groundwork for <rdar://problem/7660733> and https://bugs.webkit.org/show_bug.cgi?id=50191
        WebKit2 Authentication Support

        Keep these builds working:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-12-02  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: move existing baselines
        https://bugs.webkit.org/show_bug.cgi?id=50421
        
        Implement moving of existing baselines: move all files that are about
        to be overwriten by update baselines.
        
        Also fix a typo in the UI JS.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73211.
        http://trac.webkit.org/changeset/73211
        https://bugs.webkit.org/show_bug.cgi?id=50450

        Broke Chromium's "Webkit Win (dbg)(2)" bot. (Requested by
        yutak on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73222.
        http://trac.webkit.org/changeset/73222
        https://bugs.webkit.org/show_bug.cgi?id=50449

        r73211 seemed to break Chromium's "Webkit Win (dbg)(2)" bot.
        (Requested by yutak on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73228.
        http://trac.webkit.org/changeset/73228
        https://bugs.webkit.org/show_bug.cgi?id=50448

        r73211 seemed to break Chromium's "Webkit Win (dbg)(2)" bot.
        (Requested by yutak on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73231.
        http://trac.webkit.org/changeset/73231
        https://bugs.webkit.org/show_bug.cgi?id=50443

        r73211 seemed to broke Chromium's "Webkit Win (dbg)(2)" bot.
        (Requested by yutak on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-03  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style: false positive reported for #if macro
        https://bugs.webkit.org/show_bug.cgi?id=48242

        * Scripts/webkitpy/style/checkers/cpp.py: Adjusted check to avoid
          all preprocessor commands.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added test.

2010-12-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update the EWSTools scripts to use modern-style git repos
        https://bugs.webkit.org/show_bug.cgi?id=50402

        * EWSTools/create-webkit-git:
        * EWSTools/start-commit-queue.sh:
        * EWSTools/start-queue.sh:

2010-12-02  Simon Fraser  <simon.fraser@apple.com>

        Fix Chromium Linux plugin tests by not logging
        unconditionally from the event handling code.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventX11):

2010-12-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt multiprocessing - move logic back into run_webkit_tests

        This change moves a bunch of logic that I had put into
        message_broker back into run_webkit_tests, in a slightly
        different format. WorkerMessageBroker needed to become less aware of
        the logic the TestRunner class uses, and more generic.
        Eventually the MessageBroker will only do generic messaging and
        thread/process-pooling, and (almost) all of the
        run-webkit-tests-specific logic will be moved to
        run_webkit_tests.py and dump_render_tree_thread.py.
        
        The biggest changes are that the Broker can now start a single
        worker, but the responsibility for starting all of them is pushed
        back to the TestRunner (Manager), and the logic for checking if
        the threads are done or wedged is moved back to TestRunner. We
        also remove WorkerMessageBroker.cleanup (not needed) and
        cancel_workers (they have to be cancelled individually).
        
        The  message_broker is now encapsulated inside
        TestRunner._run_tests(); it only needs to exist while actually
        running the tests.

        Also, delete a bunch of tests in message_broker_unittest that no
        longer make much sense.

        This patch depends on bug 50372.

        https://bugs.webkit.org/show_bug.cgi?id=50374

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-02  Hayato Ito  <hayato@chromium.org>

        Reviewed by Eric Seidel.

        Refactor test_types's compare_output() method so that it takes a
        TestInput object.

        compare_output() will need additional information included in a TestInput
        object to support reftests. This change is a pre-requirement of that.

        https://bugs.webkit.org/show_bug.cgi?id=50362

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Add the ability to run script on 'new' and 'paint' in the test plugin
        https://bugs.webkit.org/show_bug.cgi?id=50425
        
        Add "onnew" and "onpaintevent" attributes to the test plugin,
        so that tests can run JS at these times.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (NPP_Destroy):
        (handleEventCarbon):
        (handleEventCocoa):
        (NPP_HandleEvent):

2010-12-02  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2010-12-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 Preferences should be held off the PageGroup, not the Context
        https://bugs.webkit.org/show_bug.cgi?id=50414

        Update for API changes.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2010-12-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: minor cleanup for multiprocessing work

        This change:
        * moves worker naming into TestShellThread, eliminating a
          parameter to the constructor and putting the responsibility in
          the correct place.
        * eliminates the _WorkerState() class in message_broker, because
          it turns out that state really needs to be in run_webkit_tests
        * renames the Broker classes to be module-private.
        * fixes a bunch of minor commenting and whitespace issues to
          make subsequent patches a bit clearer.
        * Adds a Port hook for default_worker_model() so that we can
          accomodate the potential for different worker models on
          different ports.
        * merge in the fix from 50420 for the brokenness introduced in
          bug 50367.

        This patch depends on bug 50367.

        https://bugs.webkit.org/show_bug.cgi?id=50372

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        This change is a bunch of cleanup / refactoring of the file
        below. It moves a bunch of free functions to methods on the
        TestShellThread class, and restructures other methods to be
        closer to the structure we'll need for the multiprocessing
        rewrite.

        It also makes the logic of --run-singly a *lot* easier to follow
        by nestling all of the separate-thread logic into a single
        routine.

        There should be no semantic changes in this patch, just cleanup.

        https://bugs.webkit.org/show_bug.cgi?id=50367

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:

2010-12-02  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r73164.
        http://trac.webkit.org/changeset/73164
        https://bugs.webkit.org/show_bug.cgi?id=50359

        broke debugger tests on win

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: add updating of baselines
        https://bugs.webkit.org/show_bug.cgi?id=50305
        
        Implements updating of baselines, where we copy -actual.* files over
        the current -expected.* files. To do this, we need a
        _get_actual_result_files method to get test results files and a
        _rebaseline_test method to actually do the file copy and SCM operation.
        _rebaseline_test logs output into a buffer, this is useful for both
        showing result in the UI and for unit tests.
        
        To make passing around of the various test environment properties
        (results directory, filesystem, SCM, etc) easier, add a TestConfig
        class for them.
        
        Moving of existing baselines is not implemented yet, this patch is big
        enough as it is.

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-02  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix after vcproj updates.

        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Make sure
        that WIN_CAIRO is defined for this build.
        * DumpRenderTree/win/DumpRenderTreePreBuild.cmd: Update file
        to reflect new 'Debug_Cairo_CFLite' and 'Release_Cairo_CFLite'
        (these were previously 'Debug_Cairo' and 'Release_Cairo'

2010-12-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs API to turn on popup blocking
        https://bugs.webkit.org/show_bug.cgi?id=50407

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2010-12-01  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] force NRWT to use DRT
        https://bugs.webkit.org/show_bug.cgi?id=50359

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-12-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DumpRenderTree has two copies of JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=49877

        * GNUmakefile.am: Remove the second copy of JavaScriptCore from the
        LDADD list for DumpRenderTree.

2010-12-02  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed: Added myself to list of Committers.

        * Scripts/webkitpy/common/config/committers.py:

2010-12-01  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        build-webkit --chromium always updates DEPS and re-generates project files
        https://bugs.webkit.org/show_bug.cgi?id=50340
        
        Make build-webkit --chromium invoke update-webkit-chromium only when
        --update-chromium is passed in, so that we don't add 20 seconds to all
        builds.
        
        Making all invocations update was added with r61883, with the goal of
        making EWS bots always update. The bots will switch to using this flag
        (as will all other webkit-patch build steps) so nothing should change
        for them.

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:

2010-12-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: add a --dry-run / -n flag
        https://bugs.webkit.org/show_bug.cgi?id=50045

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WinCairo build should not use link-time code generation (LTCG)
        https://bugs.webkit.org/show_bug.cgi?id=50353

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * FindSafari/FindSafari.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * record-memory-win/record-memory-win.vcproj:

2010-12-01  Martin Robinson  <mrobinson@igalia.com>

        Touch GetUserAgentWithNullNPPFromNPPNew.cpp in an effort to force
        a rebuild of TestNetscapePlugin.la on GTK+. It seems that simply
        adding the file to the sources list was not enough to force the rebuild.

        * DumpRenderTree/TestNetscapePlugIn/Tests/GetUserAgentWithNullNPPFromNPPNew.cpp:
        Remove an empty line at the end of this file to force a rebuild.

2010-12-01  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2010-12-01  Martin Robinson  <mrobinson@igalia.com>

        Add missing file to the TestNetscapePlugin sources list after r73057.

        * GNUmakefile.am: Add missing file.

2010-12-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add PageGrouping to WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=50332

        - Update testing harnesses to deal with new PageGroup API.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (WKBundleInitialize):
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        (TestWebKitAPI::InjectedBundleController::didInitializePageGroup):
        (TestWebKitAPI::InjectedBundleController::initializeTestNamed):
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/InjectedBundleTest.h:
        (TestWebKitAPI::InjectedBundleTest::initialize):
        (TestWebKitAPI::InjectedBundleTest::didInitializePageGroup):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextForInjectedBundleTest):
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::initialize):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didInitializePageGroup):
        (WTR::InjectedBundle::initialize):
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::pageGroup):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::addUserScript):
        (WTR::LayoutTestController::addUserStyleSheet):
        (WTR::LayoutTestController::setXSSAuditorEnabled):
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        vcproj changes can't be applied cleanly by the Windows EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=50328

        * CLWrapper/CLWrapper.sln: Modified property svn:eol-style.
        * CLWrapper/CLWrapper.vcproj: Modified property svn:eol-style.
        * DumpRenderTree/DumpRenderTree.sln: Modified property svn:eol-style.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Modified property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeApple.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeCFLite.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiff.vcproj: Modified property svn:eol-style.
        * DumpRenderTree/win/ImageDiffCommon.vsprops: Added property svn:eol-style.
        * FindSafari/FindSafari.vcproj: Modified property svn:eol-style.
        * FindSafari/FindSafariCommon.vsprops: Added property svn:eol-style.
        * MIDLWrapper/MIDLWrapper.sln: Modified property svn:eol-style.
        * MIDLWrapper/MIDLWrapper.vcproj: Modified property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserCFLite.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserCoreFoundation.vsprops: Added property svn:eol-style.
        * MiniBrowser/MiniBrowser.vcproj: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPICFLite.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPICoreFoundation.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/win/TestWebKitAPI.sln: Added property svn:eol-style.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added property svn:eol-style.
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj: Added property svn:eol-style.
        * TestWebKitAPI/win/TestWebKitAPIGeneratedCommon.vsprops: Added property svn:eol-style.
        * WebKitAPITest/WebKitAPITest.vcproj: Added property svn:eol-style.
        * WebKitAPITest/WebKitAPITestCommon.vsprops: Added property svn:eol-style.
        * WebKitLauncherWin/WebKitLauncherWin.vcproj: Modified property svn:eol-style.
        * WebKitLauncherWin/WebKitLauncherWinCommon.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/InjectedBundleCoreFoundation.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCFLite.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreFoundation.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/WebKitTestRunner.sln: Added property svn:eol-style.
        * WebKitTestRunner/win/InjectedBundle.vcproj: Added property svn:eol-style.
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj: Added property svn:eol-style.
        * WebKitTestRunner/win/InjectedBundleGeneratedCommon.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Added property svn:eol-style.
        * WinLauncher/WinLauncher.vcproj: Modified property svn:eol-style.
        * WinLauncher/WinLauncherCommon.vsprops: Added property svn:eol-style.
        * record-memory-win/record-memory-win-common.vsprops: Added property svn:eol-style.
        * record-memory-win/record-memory-win.vcproj: Modified property svn:eol-style.

2010-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Return a correct user agent if NPN_UserAgent is called with a null NPP from NPP_New.
        https://bugs.webkit.org/show_bug.cgi?id=50336

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add new test.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_New):
        Add default implementation/

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetUserAgentWithNullNPPFromNPPNew.cpp: Added.
        (GetUserAgentWithNullNPPFromNPPNew::GetUserAgentWithNullNPPFromNPPNew):
        (GetUserAgentWithNullNPPFromNPPNew::NPP_New):
        Get the user agent.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        Call PluginTest::NPP_New.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        Add new files.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        Call PluginTest::NPP_New.

2010-12-01  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes after recent trunk changes.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::findString):
        * wx/build/settings.py:

2010-12-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.findString
        https://bugs.webkit.org/show_bug.cgi?id=50238

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added findString().
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::findString): Updated signature for autogenerated bindings.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Ditto.

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Try using svn:eol-style native on a vcproj file.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Modified property svn:eol-style.

2010-12-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Add WinCELauncher
        https://bugs.webkit.org/show_bug.cgi?id=50217

        * WinCELauncher/main.cpp: Added.

2010-11-30  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement layoutTestController.findString
        https://bugs.webkit.org/show_bug.cgi?id=50236

        Add the missing function to the LayoutTestController.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::findString):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-11-30  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] fix get-int-identifier-special-values.html using TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=49036

        * DumpRenderTree/chromium/LayoutTestController.cpp: Use IsNumber instead of IsInt32
            for CppVariants.
        (LayoutTestController::cppVariantToBool):
        (LayoutTestController::cppVariantToInt32):
        (LayoutTestController::setDatabaseQuota):
        (LayoutTestController::evaluateInWebInspector):
        (LayoutTestController::setMockGeolocationError):

2010-11-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        update-webkit should call git fetch before git svn rebase
        https://bugs.webkit.org/show_bug.cgi?id=50273

        After discussion on webkit-dev, we've decided to move the "default"
        git setup to pulling updates from git.webkit.org in preference
        to rebuilding the local svn index using git svn fetch every time.

        This change should have no effect on people using the "old" git setup
        and should dramatically increase the speed of updates for those using
        the "new" git setup along with update-webkit.  I'm about to move the
        EWS and other queues over to this setup once this lands.

        * Scripts/update-webkit:

2010-11-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        GTK: AX: implement press in DRT
        https://bugs.webkit.org/show_bug.cgi?id=36146

        Implement AccessibilityUIElement::press() for GTK.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::press): Implemented.

2010-11-29  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        config.webkit_base_dir returns a path with a trailing slash
        https://bugs.webkit.org/show_bug.cgi?id=50197
        
        config.webkit_base_dir() should return a path without a trailing slash,
        like all the other methods that return paths.
        
        Undoes MockFileSytem changes by r72640, since they're no longer
        necessary for GetBaselinesTest to pass.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: baseline display tweaks
        https://bugs.webkit.org/show_bug.cgi?id=50207
        
        Determine which baselines were used when running the tests and highlight
        them in the UI. Sort platform names alphabetically.
        
        Also makes the server URL be launched in the user's browser
        automatically.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2010-11-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8710645> WebKitTestRunner needs layoutTestController.findString
        https://bugs.webkit.org/show_bug.cgi?id=50238

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::findString): Added.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-11-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        All projects on Windows should use cmd files for build events
        https://bugs.webkit.org/show_bug.cgi?id=50213

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPostBuild.cmd: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPreBuild.cmd: Added.
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops:
        * DumpRenderTree/win/DumpRenderTreePostBuild.cmd: Added.
        * DumpRenderTree/win/DumpRenderTreePreBuild.cmd: Added.
        * DumpRenderTree/win/ImageDiffCommon.vsprops:
        * DumpRenderTree/win/ImageDiffPostBuild.cmd: Added.
        * DumpRenderTree/win/ImageDiffPreBuild.cmd: Added.
        * MiniBrowser/Configurations/MiniBrowserCFLite.vsprops:
        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops:
        * MiniBrowser/Configurations/MiniBrowserCoreFoundation.vsprops:
        * MiniBrowser/MiniBrowserPostBuild.cmd: Added.
        * MiniBrowser/MiniBrowserPreBuild.cmd: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/win/TestWebKitAPIPostBuild.cmd: Added.
        * TestWebKitAPI/win/TestWebKitAPIPreBuild.cmd: Added.
        * WebKitAPITest/WebKitAPITestCommon.vsprops:
        * WebKitAPITest/WebKitAPITestPostBuild.cmd: Added.
        * WebKitAPITest/WebKitAPITestPreBuild.cmd: Added.
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops:
        * WebKitTestRunner/win/InjectedBundlePostBuild.cmd: Added.
        * WebKitTestRunner/win/InjectedBundlePreBuild.cmd: Added.
        * WebKitTestRunner/win/WebKitTestRunnerPostBuild.cmd: Added.
        * WebKitTestRunner/win/WebKitTestRunnerPreBuild.cmd: Added.
        * WinLauncher/WinLauncherCommon.vsprops:
        * WinLauncher/WinLauncherPostBuild.cmd: Added.
        * WinLauncher/WinLauncherPreBuild.cmd: Added.

2010-11-29  Dan Bernstein  <mitz@apple.com>

        GTK DumpRenderTree build fix after r72887.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::findString):

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Windows DumpRenderTree build fix after r72887.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::findString): Added empty implementation.

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        DumpRenderTree changes for testing the text search API.
        https://bugs.webkit.org/show_bug.cgi?id=50038

        * DumpRenderTree/LayoutTestController.cpp:
        (findStringCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::findString):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController find:]):

2010-11-29  Johnny Ding  <jnd@chromium.org>

        Unreviewed: Add myself to the list of Committers.

        * Scripts/webkitpy/common/config/committers.py:

2010-11-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/8694997> DumpRenderTree fails to build.

        * DumpRenderTree/mac/PerlSupport/Makefile: Skip generating wrappers.

2010-11-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/8694997> DumpRenderTree fails to build.

        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupportPregenerated.pm: Renamed from WebKitTools/DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupportTiger.pm.
        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport_wrapPregenerated.c: Renamed from WebKitTools/DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport_wrapTiger.c.
        * DumpRenderTree/mac/PerlSupport/Makefile:

2010-11-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Null-check needed in DRT's AccessibilityUIElement::allAtributes()
        https://bugs.webkit.org/show_bug.cgi?id=50154

        Added missing checks to allAttributes().

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::allAttributes): Added missing checks.

2010-11-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Allow pre-generation for package builds for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50139

        Use a build variable for the generated directory path and set the
        value based on CONFIG just like for WebKit1.

        For non-package builds use a relative base path for the
        genrated directory just like for WebKit1.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2010-11-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Move some build logic from Qt to platform independent code
        https://bugs.webkit.org/show_bug.cgi?id=50134

        Create target directories inside generate-forwarding-headers.pl.

        * Scripts/generate-forwarding-headers.pl:

2010-11-24  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Windowless plugins gets broken key input
        https://bugs.webkit.org/show_bug.cgi?id=49927

        Convert the XEvent::keycode to ASCII before printing it. Not
        doing this was causing false positive in 
        plugins/keyboard-events.html.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (keycode_to_char):
        (webkit_test_plugin_handle_event):

2010-11-24  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Antonio Gomes.

        [Qt] Html autofocus not working with QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=43169

        Tell the scene to set the webview item as the currently
        focused item. This makes the input field with autofocus get
        focus as it should.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):

2010-11-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt - clean up create_driver interface and print out the
        command line used for DumpRenderTree/TestShell.

        This patch adds a driver_cmd_line() call to the Port class in
        order to retrive the command line to print it out (as part of
        --print config).

        In addition, this patch cleans up the Port.create_driver()
        signature and the Driver constructor interface to take a worker
        number and no longer require the image_path argument (Chromium's
        drivers now synthesize the image_path from the worker number
        internally).

        https://bugs.webkit.org/show_bug.cgi?id=49934

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-24  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] improve memory usage for test results server and store fewer runs
        https://bugs.webkit.org/show_bug.cgi?id=50035

        Store fewer runs and don't pass full files around when we only need bools.
        Greatly improves error rates on test-results.appspot.com.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/model/dashboardfile.py:
        * TestResultServer/model/jsonresults.py:

2010-11-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        This patch implements the first part of the manager side of the
        Broker objects - it handles creating threads, waiting for them
        to complete, and running a single-threaded loop as well.

        https://bugs.webkit.org/show_bug.cgi?id=49779

        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-24  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by David Levin.

        DRT should not generate pixel output for text/plain tests
        https://bugs.webkit.org/show_bug.cgi?id=50002
        
        Modify Mac, Windows and GTK DRT implementations to disable pixel output
        when encountering a text/plain response (the Chromium one already does
        this, and none of the other ports special-case text/plain output in
        the first place).

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):

2010-11-24  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Unreviewed.

        Add my other email address to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2010-11-24  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Make build-webkit --minimal build with ENABLE_INSPECTOR=0
        https://bugs.webkit.org/show_bug.cgi?id=49975

        * Scripts/build-webkit: Add ENABLE_INSPECTOR define to features,
        to enable the script to define it 0 in case of a minimal build.

2010-11-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] The WebKitWebView should expose a set of signals encapsulating the behavior of the EditorClient
        https://bugs.webkit.org/show_bug.cgi?id=49143

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (createWebView): Call the new connectEditingCallbacks function.
        * DumpRenderTree/gtk/EditingCallbacks.cpp: Added.
        (dumpNodePath):
        (dumpRange):
        (insertActionString):
        (selectionAffinityString):
        (shouldBeginEditing):
        (shouldEndEditing):
        (shouldInsertNode):
        (shouldInsertText):
        (shouldDeleteRange):
        (shouldShowDeleteInterfaceForElement):
        (shouldChangeSelectedRange):
        (shouldApplyStyle):
        (editingBegan):
        (userChangedContents):
        (editingEnded):
        (selectionChanged):
        (connectEditingCallbacks):
        * DumpRenderTree/gtk/EditingCallbacks.h: Added.
        * GNUmakefile.am: Added EditingCallbacks.{h,cpp} to the source list.

2010-11-24  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Make QtTestBrowser remember the selected user agent
        https://bugs.webkit.org/show_bug.cgi?id=50021

        Set user agent for a new page by using the old page's

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::setPage):

2010-11-24 Patrick Gansterer <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove Bakefile build system files
        https://bugs.webkit.org/show_bug.cgi?id=49983

        r53757 only removed the content, but not the files.
        This patch removes that empty files.

        * DumpRenderTree/wx/DumpRenderTree.bkl: Removed.
        * wx/browser/browser.bkl: Removed.
        * wx/build-wxwebkit: Removed.

2010-11-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        This patch cleans up the logic used to shard tests into groups a
        bit and adds the --worker-model flag to NRWT. The flag is only
        used at the moment to control whether to run single-threaded or
        not, but eventually will also allow toggling between threads and
        processes.

        Also add a minor cleanup with _test_is_slow(), which just
        eliminates some repetition and gives slightly better encapsulation.

        https://bugs.webkit.org/show_bug.cgi?id=49773

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-23  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: list current baselines and platforms
        https://bugs.webkit.org/show_bug.cgi?id=49991
        
        List existing baselines (with Trac links) for tests.
        
        Add dropdowns for choosing with platform baselines to target (and what
        to do with existing ones).

        Also fix MockFileSystem.join to behave more like os.path.join (unit
        test was ending up with two consecutive slashes in a layout test
        path).        

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py: Added.

2010-11-23  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        remove timeout argument to urlopen
        https://bugs.webkit.org/show_bug.cgi?id=49995

        Apparently the version of python we have on the bots doesn't accept a timeout argument.

        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py:

2010-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72628.
        http://trac.webkit.org/changeset/72628
        https://bugs.webkit.org/show_bug.cgi?id=49994

        This patch is causing layout-test failtures on GTK Linux
        64-bit Debug (Requested by ctguil on #webkit).

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::parentElementCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        * DumpRenderTree/chromium/CppBoundClass.h:

2010-11-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        speculative fix for upload errors: stop using mechanize to upload to test-results.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=49944

        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py:

2010-11-23  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Dimitri Glazkov.

        Include the FrameView widget of a RenderWidget in the accessibility tree.
        https://bugs.webkit.org/show_bug.cgi?id=49106

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::parentElementCallback):
        (AccessibilityUIElement::isEqualCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        (CppBoundClass::getFromCppVariant):
        * DumpRenderTree/chromium/CppBoundClass.h:

2010-11-23  Alex Grilo  <abgrilo@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Add tiled backing store to EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=45777

        Allow EWebLauncher to choose between single and tiled backing store

        * EWebLauncher/main.c:
        (on_key_down):
        (browserCreate):
        (main):

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Renamed requestPermissionFromUser to featurePermissionRequested
        and cancelRequestsForPermission to featurePermissionRequestCanceled.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::featurePermissionRequestCanceled):
        * QtTestBrowser/webpage.h:

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Rename setUserPermission to setFeaturePermission

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::permissionSet):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        * QtTestBrowser/webpage.cpp:
        (WebPage::requestPermission):

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Rename PermissionDomain to Feature, NotificationsPermissionDomain to Notifications
        and GeolocationPermissionDomain to Geolocation.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::cancelPermission):
        (WebCore::WebPage::permissionSet):
        (WebCore::DumpRenderTree::geolocationPermissionSet):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::requestPermission):
        (WebPage::cancelRequestsForPermission):
        * QtTestBrowser/webpage.h:

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Add a ByUser suffix to PermissionGranted/Denied. In the future
        we can add PermissionGrantedByDefault.


        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::permissionSet):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        * QtTestBrowser/webpage.cpp:
        (WebPage::requestPermission):

2010-11-18  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        For speech input event, send an event object containing all the recognition results and metadata.
        https://bugs.webkit.org/show_bug.cgi?id=49736

        Updated DRT by renaming the mock result method on all platforms to the new signature.

        * DumpRenderTree/LayoutTestController.cpp:
        (addMockSpeechInputResultCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::addMockSpeechInputResult):

2010-11-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Fix some spacing issues with log messages with
        new-run-webkit-tests --verbose.

        https://bugs.webkit.org/show_bug.cgi?id=49936

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2010-11-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        update scm to work with different remote branches
        https://bugs.webkit.org/show_bug.cgi?id=49949

        This works if there are multiple svn tracking branches
        and/or if the tracking branch is refs/remots/origin/master
        instead of refs/remotes/trunk which is the direction we're trying
        to head since that makes fetches faster.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-11-22  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Ignore reference files which will be used by reftests when collecting
        test cases.
        https://bugs.webkit.org/show_bug.cgi?id=49835

        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:

2010-11-22  Adam Roben  <aroben@apple.com>

        Use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops files

        Apple's Windows build allows placing header files and import libraries for WebKit's
        dependencies (CoreGraphics, CFNetwork, SQLite, etc.) outside the source tree via the
        $WebKitLibrariesDir environment variable. This is both required for production builds and
        convenient for Apple-internal developer builds. Apple's production builds also require that
        WebKit's shared .vsprops files be accessed relative to $WebKitLibrariesDir. In production
        builds, the files are copied into that directory tree by the
        WebKitLibraries/win/tools/WinTools.make file. In Apple-internal developer builds, the
        copying is done by
        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make.

        This .vsprops copying is problematic in one very important case: when a developer updates
        their source tree and then tries to build. Visual Studio only reads .vsprops files when a
        project is first loaded. So, when Visual Studio is first opened after the .vsprops files are
        updated, it reads in the old files that were already residing in $WebKitLibrariesDir. When a
        build is started, JavaScriptCoreGenerated.make copies the new .vsprops files into
        $WebKitLibrariesDir, but Visual Studio will not pick up the changes.  The rest of the build
        will proceed with out-of-date .vsprops files, which will likely result in a build failure.

        To fix this, we now use normal relative paths to access the .vsprops files in the source
        tree rather than in $WebKitLibrariesDir, but prefix those paths with a new environment
        variable, $WebKitVSPropsRedirectionDir. In developer builds, this environment variable is
        unset, so the normal relative paths are used to read the .vsprops files out of the source
        tree directly. In production builds, this environment variable is set to a fake directory
        that will cause the .vsprops files in $WebKitLibrariesDir to be found when the relative path
        is resolved.
        
        For example, JavaScriptCore.vcproj uses this path for FeatureDefines.vsprops:

        $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        In developer builds, where $WebKitVSPropsRedirectionDir is unset, this will point to the
        files in WebKitLibraries\win\tools\vsprops in the source tree. In production builds,
        JavaScriptCore.make sets $WebKitVSPropsRedirectionDir to
        "$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\", so the full path for
        FeatureDefines.vsprops becomes:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        which resolves to:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        (We rely on the fact that Windows doesn't care whether the directories "1", "2", and "3"
        actually exist since they are matched by an equal number of ".." path components.)

        Note that Visual Studio still won't pick up changes made to .vsprops files while Visual
        Studio is open, but that problem hasn't seemed to cause developers many headaches so far.

        Fixes <http://webkit.org/b/49181> Windows build fails mysteriously when .vsprops files are
        updated

        Reviewed by Dave Hyatt.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * FindSafari/FindSafari.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * record-memory-win/record-memory-win.vcproj:
        Changed to use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops
        files.

2010-11-22  Adam Roben  <aroben@apple.com>

        Make it possible to run tests on Windows without Visual Studio or VC++
        Express installed

        webkitdir.pm::setupCygwinEnv dies when Visual Studio and VC++ Express
        are not installed. But this function doesn't need to be called when we
        already have a build available and are just trying to run the tests.

        Fixes <http://webkit.org/b/49932> New Windows 7 bot can't run tests
        because Visual Studio/VC++ Express aren't installed

        Reviewed by Dave Hyatt.

        * Scripts/webkitdirs.pm:
        (determineConfigurationForVisualStudio): Don't call setupCygwinEnv, as
        it is not needed by this function. Also added a FIXME.

        (usingVisualStudioExpress): Call setupCygwinEnv directly rather than
        relying on determineConfigurationForVisualStudio doing it.

2010-11-19  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Simplify Driver.run_test() so that it takes only one parameter, TestInput.

        https://bugs.webkit.org/show_bug.cgi?id=49812

        * Scripts/webkitpy/layout_tests/driver_test.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-22  Hayato Ito  <hayato@chromium.org>

        Reviewed by Tony Chang.

        [NRWT] Retry a few times in reading a png image to avoid a race condition.

        https://bugs.webkit.org/show_bug.cgi?id=49924

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-11-22  João Paulo Rechi Vita  <jprvita@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Fix EWebLauncher zoom discretization
        https://bugs.webkit.org/show_bug.cgi?id=49810

        * EWebLauncher/main.c:
        (nearest_zoom_level_get):
        (zoom_level_set):
        (on_load_finished):
        (on_key_down):

2010-11-21  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        Fix ~300 WebKit2 tests by enabling developer extras preference.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2010-11-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Textareas should be resizable by default
        https://bugs.webkit.org/show_bug.cgi?id=49892

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp: Added.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add preferences test.

2010-11-19  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: checksum-only differences and prefetching
        https://bugs.webkit.org/show_bug.cgi?id=49841
        
        Add support for image test results where the only difference is in the
        checksum.
        
        Add prefetching of the image results from the next test.
        
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:

2010-11-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt multiprocessing - add 'worker number' concept, move stuff to worker thread

        Add the 'worker number' and 'worker name' concepts to the 
        TestShellThread objects, and move test_types and test_args from
        the TestRunner to the TestShellThread.

        https://bugs.webkit.org/show_bug.cgi?id=49768

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        Do some minor cleanup and bug fixing.

        https://bugs.webkit.org/show_bug.cgi?id=49777

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt - config.build_directory() is busted

        Fixes a typo that was causing us to usually return the top level
        directory WebKitBuild instead of WebKitBuild/{Debug,Release}. The
        bug was hidden by test stubs that were too simplistic :(.

        https://bugs.webkit.org/show_bug.cgi?id=49815

        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add Debug_Cairo_CFLite and Release_Cairo_CFLite configurations for all vcproj files
        https://bugs.webkit.org/show_bug.cgi?id=49819

        * DumpRenderTree/DumpRenderTree.sln:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * FindSafari/FindSafari.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.sln:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * record-memory-win/record-memory-win.vcproj:

2010-11-19  Adam Roben  <aroben@apple.com>

        Add some more Windows slaves

        This is probably more than we will be using in the immediate future,
        but having some extra slave names makes experimenting with different
        configurations easier.

        Reviewed by Jon Honeycutt.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added 5 more
        Windows slaves and distributed them among the three different Test
        builders.

2010-11-19  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium] REGRESSION: Record actual test results in the JSON result summary for non-layout tests
        https://bugs.webkit.org/show_bug.cgi?id=49702

        Re-landing r72357 with a test fix.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2010-11-19  Avi Drissman  <avi@google.com>

        Reviewed by Antonio Gomes.

        Complete support for Unix editing mode
        https://bugs.webkit.org/show_bug.cgi?id=49757

        * DumpRenderTree/LayoutTestController.cpp:
        (setEditingBehaviorCallback):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setEditingBehavior):

2010-11-19  Adam Roben  <aroben@apple.com>

        Fix run-javascriptcore-tests when there's a space in the path to
        testapi

        Reviewed by Sam Weinig.

        * Scripts/run-javascriptcore-tests: Use an indirect object when calling
        system() to force it to interpret spaces in the path correctly.

2010-11-19  Adam Roben  <aroben@apple.com>

        Update scripts for .exe name changes after r72327

        As of r72327, the "_debug" suffix is only used in Debug_All builds.

        Reviewed by Sam Weinig.

        * Scripts/run-javascriptcore-tests:
        (testapiPath):

        * Scripts/sunspider-compare-results:
        (pathToBuiltJSC):

        * Scripts/webkitdirs.pm:
        (jscPath):
        (safariPath):

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Normalize Cairo/CFLite project/solution configuration names
        https://bugs.webkit.org/show_bug.cgi?id=49818

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.sln:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * Scripts/webkitdirs.pm: Updated cairo build configs.

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Windows vcproj configuration names should be normalized across projects
        https://bugs.webkit.org/show_bug.cgi?id=49776

        * DumpRenderTree/DumpRenderTree.sln:
        * FindSafari/FindSafari.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.sln:
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIGeneratedCommon.vsprops: Added.
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitAPITest/WebKitAPITestCommon.vsprops:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/WebKitTestRunner.sln:
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj:
        * WebKitTestRunner/win/InjectedBundleGeneratedCommon.vsprops: Added.
        * record-memory-win/record-memory-win.vcproj:

2010-11-18  Gavin Barraclough  <barraclough@apple.com>

        Build fix - as per DRT-mac, always enabled developer extras,
        in win/qt/gtk DRT.

        This is necessary to enable rich exception messages to be generated
        following https://bugs.webkit.org/show_bug.cgi?id=49708.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (shouldEnableDeveloperExtras):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::shouldEnableDeveloperExtras):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldEnableDeveloperExtras):

2010-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72357.
        http://trac.webkit.org/changeset/72357
        https://bugs.webkit.org/show_bug.cgi?id=49784

        It broke test-webkitpy tests since the patch didn't have the
        corresponding test update (Requested by kinuko on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-11-18  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: add rebaseline queue
        https://bugs.webkit.org/show_bug.cgi?id=49763
        
        Add a UI queue (a multi-item <select>) where tests to be baselined
        can be enqueued (also supports basic removal). A queue is used instead
        of immediately doing rebaselines since SCM operations can take a while.
        It's better to go through lots of tests quickly to mark them as
        needing rebaselining and then batch the SCM operations.
        
        Also adds a simple log where results can be displayed.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js: Added.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-11-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 49708 - Stop recompiling functions to regenerate exception info.

        Instead only hold info as necessary – keep divot info is the inspector
        is enabled, line number info is debugging or profiling, and handler
        info for functions with try/catch.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldEnableDeveloperExtras):
            - always enable the developer tools from DRT, to ensure we
              produce rich error messages on JavaScript exceptions.

2010-11-18  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium] REGRESSION: Record actual test results in the JSON result summary for non-layout tests
        https://bugs.webkit.org/show_bug.cgi?id=49702

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-11-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: create first part of 'message_broker' class for multiprocessing fixes

        Create the first version of the 'message_broker' package. This
        class will encapsulate all of the threading/multiprocessing and
        message-sending details for the communication between the
        'manager' object and the 'worker' objects. For the moment, it
        just holds some routines and tests for logging thread stacks.

        There should be no functional changes in this patch, just moving stuff
        around.

        https://bugs.webkit.org/show_bug.cgi?id=49707

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Remove leftover Windows Debug_Internal configurations
        https://bugs.webkit.org/show_bug.cgi?id=49758

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:

2010-11-18  Adam Roben  <aroben@apple.com>

        Add three new Windows XP build slaves

        Reviewed by Steve Falkenburg.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added three
        new slaves, and added them to the Windows XP Debug (Tests) builder.

2010-11-18  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

        update-webkit-support-libs should fall back to existing
        WebKitSupportLibrary version if there is no internet connectivity
        https://bugs.webkit.org/show_bug.cgi?id=49503

        Fall back to existing support libraries (if present) when there is
        no internet connection.

        Currently, update-webkit-support-libs dies with an "out-of-date"
        error when there is no internet connection because it cannot
        retrieve versioning information from developer.apple.com. Because
        update-webkit-support-libs fails, build-webkit fails. Instead,
        if there is no internet connection and the support libraries are
        present then we should warn the user and exit() with success so
        that build-webkit can work without an internet connection.

        * Scripts/update-webkit-support-libs:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Debug_Internal Windows configuration is unnecessary, should be removed
        https://bugs.webkit.org/show_bug.cgi?id=49753

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * MiniBrowser/win/stdafx.h:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        * WebKitTestRunner/win/TestControllerWin.cpp:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Clean up vcproj errors
        https://bugs.webkit.org/show_bug.cgi?id=49741

        * MiniBrowser/MiniBrowser.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:

2010-11-18  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [NRWT] Fix a break of '--new-baseline' feature in pixel_test
        which is caused by r72249.

        https://bugs.webkit.org/show_bug.cgi?id=49751

        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:

2010-11-18  Adam Roben  <aroben@apple.com>

        Implement layoutTestController.waitForPolicyDelegate on Windows

        Fixes <http://webkit.org/b/25038> <rdar://problem/6790213>.

        Reviewed by Simon Fraser.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::waitForPolicyDelegate): Implemented by porting
        code from LayoutTestControllerMac.mm.

2010-11-18  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [NRWT] Fix a break of '--new-baseline' feature which is caused by r72249.

        https://bugs.webkit.org/show_bug.cgi?id=49740

        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-11-18  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        run platform/chromium/plugins/refcount-leaks.html on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49485

        Add PluginObject.testObjectCount which returns the number of allocated
        TestObjects. Add PluginObject.testCreateTestObject which allocates
        and returns a TestObject.

        Add TestObject.refCount which returns the number of refs on the
        TestObject.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginGetProperty):
        (pluginInvoke):
        * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp:
        (getTestObjectCount):
        (testAllocate):
        (testDeallocate):
        (testGetProperty):
        (testScriptObjectInvoke): Release a ref to a plugin object that was
            previously leaked.
        * DumpRenderTree/TestNetscapePlugIn/TestObject.h:

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKitTools projects (WebKitTestRunner, record-memory-win) should use vsprops for common build settings
        https://bugs.webkit.org/show_bug.cgi?id=49711

        * WebKitTestRunner/Configurations/WebKitTestRunnerCFLite.vsprops: Added.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops: Added.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreFoundation.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * record-memory-win/record-memory-win-common.vsprops: Added.
        * record-memory-win/record-memory-win.vcproj:

2010-11-18  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Only add user agent strings to the list which aren't listed yet.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateUserAgentList):

2010-11-17  Adam Roben  <aroben@apple.com>

        Don't trigger Windows builds when chromium-win test results change

        Reviewed by Mark Rowe.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Changed the regular expression used to
        search for directory names to only consider full directory names,
        rather than matching directory names where the string we care about is
        a suffix of the name.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Added a test.

2010-11-17  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Remove a uri member from TestInput class.

        https://bugs.webkit.org/show_bug.cgi?id=49691

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-17  Adam Roben  <aroben@apple.com>

        Move FindSafari's settings into a vsprops file

        Fixes <http://webkit.org/b/49699> FindSafari should use a vsprops file

        Reviewed by Steve Falkenburg.

        * FindSafari/FindSafari.vcproj:
        * FindSafari/FindSafariCommon.vsprops: Added.

2010-11-17  Adam Roben  <aroben@apple.com>

        Use a minimum font size of 0 in DRT on Windows

        This is the Windows equivalent of r72164.

        Rubber-stamped by Dave Hyatt.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2010-11-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Andreas Kling.

        webkit-patch pretty-diff shouldn't need to be run from a checkout root in git
        https://bugs.webkit.org/show_bug.cgi?id=49639

        * Scripts/webkitpy/common/checkout/scm.py:

2010-11-17  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: add loupe for image diffs
        https://bugs.webkit.org/show_bug.cgi?id=49692
        
        Add a loupe (magnifiying glass) for inspecting image diffs. Shows an
        enlarged area of the expected, actual and diff images side by side.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/loupe.js: Added.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKitLauncherWin should use vsprops for shared build settings
        https://bugs.webkit.org/show_bug.cgi?id=49696

        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitLauncherWin/WebKitLauncherWinCommon.vsprops: Added.

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WinLauncher should use vsprops for shared build settings
        https://bugs.webkit.org/show_bug.cgi?id=49695

        * WinLauncher/WinLauncher.cpp:
        (_tWinMain):
        (PrintView):
        (WndProc):
        (MyEditProc):
        * WinLauncher/WinLauncher.vcproj:
        * WinLauncher/WinLauncherCommon.vsprops: Added.

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Delete unused file unintentionally added in last change.

        * DumpRenderTree/win/DumpRenderTreeCURL.vsprops: Removed.

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        DumpRenderTree on Windows should use a vsprops file for shared project settings
        https://bugs.webkit.org/show_bug.cgi?id=49690

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeApple.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeCFLite.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeCURL.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops: Added.
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/ImageDiffCommon.vsprops: Added.

2010-11-17  Hayato Ito  <hayato@chromium.org>

        Refactor TestTypeBase.compare_output().

        Introduce a TestOutput class and update compare_output() of each test
        types so that they can take both actual and expected TestOutput objects.

        https://bugs.webkit.org/show_bug.cgi?id=49431

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_output.py: Added.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-11-17  Adam Roben  <aroben@apple.com>

        Make each Windows Test builder use the same OS for all its slaves

        Currently each WebKit1 Windows Test builder has one Windows XP slave
        and one Windows 7 slave. Having different OSes in a single builder
        meant that the builders would alternate between red and green when
        there were OS-specific failures.

        Fixes <http://webkit.org/b/49688> Windows Test builders alternate
        between red and green because of multiple OS versions

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Renamed
        "Windows Release (Tests)" to "Windows 7 Release (Tests)", "Windows
        Debug (Tests)" to "Windows XP Debug (Tests)", and "Windows Release
        (WebKit2 Tests)" to "Windows 7 Release (WebKit2 Tests)". Updated the
        builders for the two WebKit1 builders so that they would all use the
        appropriate OS.

2010-11-17  James Robinson  <jamesr@chromium.org>

        Reviewed by Dan Bernstein.

        [chromium] Set minimum font size to 0 for DRT
        https://bugs.webkit.org/show_bug.cgi?id=49677

        Followup for http://trac.webkit.org/changeset/72141.

        Test: http/tests/misc/acid3.html

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):

2010-11-17  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Add missing file I forgot in r72220.

        * MiniBrowser/MiniBrowser.qrc: Added.

2010-11-17  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Make it possible to set custom user agent strings in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=49627

        Add a user agent dialog and a resource file for useragentlist.txt to MiniBrowser.

        * MiniBrowser/MiniBrowser.qrc: Added.
        Add it here to prevent qmake from detecting it
        since it needs to be copied to the build directory.
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::updateUserAgentList):
        (BrowserWindow::showUserAgentDialog):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:

2010-11-17  Adam Roben  <aroben@apple.com>

        Make changes to the Mac WebKit2 Skipped file trigger Windows builds

        We use that file on Windows!

        Fixes <http://webkit.org/b/49643> Changes to
        LayoutTests/platform/mac-wk2 should trigger a Windows build, but don't

        Reviewed by Steve Falkenburg.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Added the mac-wk2 directory and make it
        trigger builds on SnowLeopard and Windows.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest.test_should_build): Added a test.

2010-11-17  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Clear the speech input mock explicitly before each test.
        https://bugs.webkit.org/show_bug.cgi?id=49660

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController):
        (WebViewHost::reset): Invoke speech input mock's clearResults method.
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::speechInputControllerMock): Moved mock from LayoutTestController.

2010-11-17  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, specify IRC nickname in committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2010-11-17  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Make http locking similar to perl implementation
        https://bugs.webkit.org/show_bug.cgi?id=49187

        * Scripts/webkitpy/common/system/file_lock.py: Added.
        * Scripts/webkitpy/common/system/file_lock_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-11-17  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium][DRT] EventSender.contextClick() should aware spellchecking
        https://bugs.webkit.org/show_bug.cgi?id=49366

        - EvenSender: Checked WebContextMenuData.misspelledWord and added extra context menu entries
          according to the spellchecker suggestion
        - MockSpellCheck: add fillSuggestionList to provide fake suggestions.

        test_expectations.txt will be changed after this change is ported to test_shell.
        
        * DumpRenderTree/chromium/EventSender.cpp:
        (makeMenuItemStringsFor):
        (EventSender::contextClick):
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::fillSuggestionList):
        (MockSpellCheck::initializeIfNeeded):
        * DumpRenderTree/chromium/MockSpellCheck.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::mockSpellCheck):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Make sure the pref for minimum font size is just explicitly set to 0 every time,
        since the bots have 1 stuck in their plist otherwise.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):

2010-11-16  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: compute diffs client-side
        https://bugs.webkit.org/show_bug.cgi?id=49640
        
        The image diff output from the DRT is pretty bad on some ports (at
        least the Mac one), so it's better to compute diffs on the client by
        using <canvas>.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:

2010-11-16  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: display test results
        https://bugs.webkit.org/show_bug.cgi?id=49626
        
        Adds basic result display to the rebaseline server. On the Python side
        this involves:
        - Parsing the unexpected_results.json into a dictionary.
        - Serving it as JSON under /results.json.
        (the JSON -> dict -> JSON transform isn't strictly necessary right now,
        but I'll need to have access to the parsed results on the Python side
        for follow-up changes).
        
        On the web UI side this adds:
        - Markup for display image and text results (expected, actual, diff),
          and JS for populating it.
        - Markup for breaking down test results by failure type and directory,
          and JS for populating it.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js: Added.
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-11-16  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        See Chromium issue http://codereview.chromium.org/5133001/ - we
        are modifying the build bots to pass in the builder name with
        the "GPU" string appended instead of appending it in the code.

        https://bugs.webkit.org/show_bug.cgi?id=49636

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2010-11-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
        https://bugs.webkit.org/show_bug.cgi?id=49632

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * record-memory-win/record-memory-win.vcproj:

2010-11-16  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: rename TestInfo to TestInput, move image hash to work thread

        Rename the TestInfo class to TestInput to be clearer about its
        function, and move the checksum-reading code into dump_render_tree_thread
        to avoid cross-thread access.

        https://bugs.webkit.org/show_bug.cgi?id=49573

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Fix bustage. Remove the minimum font size pref setting in DumpRenderTree.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):

2010-11-16  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/8624267> Leak creating offscreen webview running fast/dom tests

        Use shared DeviceOrientationProviderMock. The old allocation method created a new WebDeviceOrientationProviderMock 
        for every WebView, and the WebKit API doesn't support that ownership model.

        I also fixed a leak in setMockDeviceOrientation by adding a missing release.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockDeviceOrientation):

2010-11-16  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: log the process id in --verbose mode

        As part of the switch to multi-process mode, we should log the
        process id when running w/ --verbose.

        https://bugs.webkit.org/show_bug.cgi?id=49571

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2010-11-16  Adam Roben  <aroben@apple.com>

        Only trigger Windows builds when files that we actually use on Windows
        are changed

        A new Scheduler subclass, PlatformSpecificScheduler, has been added.
        It uses the new webkitpy.common.config.build module to determine
        whether a particular change should trigger a build on a particular
        platform. The Windows builders have been switched to use a
        PlatformSpecificScheduler.

        The logic to determine whether or not a particular change should
        trigger a build on a given platform has only been implemented/tested
        for Windows. I tried to make it easy to add more platforms in the
        future, but I don't have enough familiarity with all platforms to be
        able to implement it for them.

        Fixes <http://webkit.org/b/49407> Windows builders kick off builds for
        lots irrelevant changes (e.g., rebaselining Chromium test results)

        Reviewed by Eric Seidel.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Use a
        PlatformSpecificScheduler for the Windows builders.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (PlatformSpecificScheduler.__init__): Added. Stores our platform, sets
        up a ChangeFilter that filters to our branch and will call through to
        our filter method, and calls up to our base class.
        (PlatformSpecificScheduler.filter): Calls through to
        build.should_build to find out whether we should trigger a build for
        this change.

        * Scripts/webkitpy/common/net/build.py: Added.
        (_should_file_trigger_build): Uses a set of directories and regexp
        patterns to determine whether the given file should trigger a build on
        the given platform. As mentioned earlier, this has only been
        implemented for Windows, though I did try to make some guesses about
        other platforms.
        (should_build): Returns true if any of the files should trigger a
        build on the given platform.

        * Scripts/webkitpy/common/net/build_unittest.py: Added.
        (ShouldBuildTest.test_should_build): Does some basic testing to make
        sure we're triggering builds for the right files. It only tests
        Windows for now, though I tried to make some guesses about other
        platforms.

2010-11-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Remove synchronous QWebPage::checkPermissions signal
        https://bugs.webkit.org/show_bug.cgi?id=46810

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::grantDesktopNotificationPermission): When granting
        permission, grant it directly on the QWebPage/Frame, that will remember it.
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        * QtTestBrowser/webpage.h:


2010-11-16  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Add isPrinting and setPrinting methods to DRT's LayoutTestController.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::isPrinting):
        (LayoutTestController::setPrinting):

2010-11-16  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Add a way to turn on tiled backing store in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=49587

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView): Added BackingStoreType
        argument to ctor. Propagating it to the QGraphicsWKView.
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::newWindow): Create the new BrowserWindow
        with the same BackingStoreType that this instance has.
        * MiniBrowser/qt/BrowserWindow.h: Added BackingStoreType member.
        * MiniBrowser/qt/main.cpp:
        (main): Use tiled backing store if got -tiled command line argument.
        Avoid redundant copy of command line args.

2010-11-16  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        Move DeviceOrientationClientMock from LayoutTestController to WebViewHost.
        https://bugs.webkit.org/show_bug.cgi?id=48506

        This ensures that there is one mock per page WebView / WebViewHost. This is a
        design constraint of the DeviceOrientationClientMock because the m_controller
        field can only store a pointer to a single instance of the corresponding
        DeviceOrientationController.

        Test: fast/dom/DeviceOrientation/no-page-cache.html

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        (LayoutTestController::deviceOrientationClientMock):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::deviceOrientationClientMock):
        (WebViewHost::deviceOrientationClient):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-15  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Avoid polling in WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=49542

        Make the WK2 testing session about 10-15% faster and decrease random flakiness
        resulting from timing skew by removing the millisecond polling from TestControllerQt.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didFinishLoadForFrame):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::notifyDone): Add method stub.
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestControllerRunLoop::instance):
        (WTR::TestControllerRunLoop::start):
        (WTR::TestControllerRunLoop::stop):
        (WTR::TestControllerRunLoop::TestControllerRunLoop):
        (WTR::TestControllerRunLoop::timerEvent):
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformRunUntil):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::notifyDone): Add method stub.

2010-11-15  Darin Adler  <darin@apple.com>

        * Scripts/webkitpy/common/net/bugzilla: Added property svn:ignore.

2010-11-15  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Add Ctrl+L shortcut to Qt Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=49544

        Add the shortcut to BrowserWindow.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::openLocation):
        * MiniBrowser/qt/BrowserWindow.h:

2010-11-14  David Levin  <levin@chromium.org>

        Reviewed by Daniel Bates.

        check-webkit-style should detect PassRefPtr usage in functions.
        https://bugs.webkit.org/show_bug.cgi?id=49513

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_function_lengths): Revert a comment change that I
         accidentally made in r71986.
        (check_pass_ptr_usage): Added the code to do the check.
        (process_line): Added the call to check_pass_ptr_usage.
        (CppChecker): Added the new error category.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase::perform_pass_ptr_check): Runs the new check for
         testing purposes.
        (PassPtrTest::*): The class/functions to unit test the new
         functionality.

2010-11-14  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style function detection and the line count style checks should be separate.
        https://bugs.webkit.org/show_bug.cgi?id=49512

        * Scripts/webkitpy/style/checkers/cpp.py: Do the separation.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Adjust the test to
          call the detection function and fix line counts in two places now that
          the code really only counts the lines in the body of the function.

2010-11-14  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        http/tests/plugins tests print "Unhandled variable" to stderr under Qt
        https://bugs.webkit.org/show_bug.cgi?id=33438

        Stifle "Unhandled variable" warning to match what the other
        TestNetscapePlugin does (NPP_GetValue in TestNetscapePlugIn/main.cpp
        simply returns NPERR_GENERIC_ERROR for unhandled variables.)

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_get_value):

2010-11-13  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style function detection crashes on functions in templates.
        https://bugs.webkit.org/show_bug.cgi?id=49504

        For example "template <bool shouldClose(const Element*)>".

        * Scripts/webkitpy/style/checkers/cpp.py: If not function is detected, bail out.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Modified the complex
          function detection test to expose this issue.

2010-11-12  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style function detection doesn't detect indented functions declaractions.
        https://bugs.webkit.org/show_bug.cgi?id=49446

        Indented function declarations occur inside class definitions, so
        they are a pretty common (and worth detecting).

        * Scripts/webkitpy/style/checkers/cpp.py:
          Changed regex to allow indentation.
          Changed the function start detection to only happen when not in a
          function.
          Changed function end detection to work based on matching braces
          instead of finding a close brace at the beginning of the line.
          Fixed close_expression to do what it says when it doesn't find
          the close.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Indented function test.

2010-11-12  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Nikolas Zimmermann.

        Make do-file-rename rename files in the directory WebKit2.

        This also makes the list of searched directories in do-file-rename
        consistent with the list of searched directories in the script do-webcore-rename.

        * Scripts/do-file-rename:

2010-11-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        Attempt yet again to land the fix for bug 49360 (respecting
        set-webkit-configuration). We need to handle the cases where
        trying to run webkit-build-directory to find out where the
        default configuration might be fails (that shows up on some
        Chromium bots that apparently don't have perl installed).

        https://bugs.webkit.org/show_bug.cgi?id=49360

        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_standalone.py: Added.
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-12  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        webkit-patch land logs commit message twice
        https://bugs.webkit.org/show_bug.cgi?id=49482
        
        Don't log the comment that's used by bugzilla.close_bug_as_fixed, since
        that's just the commit message, which we now output following the
        actual commit.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:

2010-11-12  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        run platform/chromium/plugins/script-object-invoke.html on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49280

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testScriptObjectInvoke):
        (pluginInvoke):

2010-11-12  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        webkit-patch land-cowboy (and other commands) should display the committed SVN revision after landing a patch
        https://bugs.webkit.org/show_bug.cgi?id=49471

        Right now there's no indication of a successful commit.
        
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/commit.py:

2010-11-12  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Include detailed test modifiers in results.json and enable incremental uploading for non-layout tests
        https://bugs.webkit.org/show_bug.cgi?id=49354

        Also moved/integrated the upload method from run_webkit_tests.py to json_results_generator.py.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-12  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Load a blank page when closing DRT WebViewHosts
        https://bugs.webkit.org/show_bug.cgi?id=49417

        In test_shell, when we close a window, we first load about:blank
        and run GC to fire the destruction logic of the page.  In test_shell,
        this happens in ~TestShell.  In DRT, we manage virtual windows as
        WebViewHosts, so we need to replicate this logic in ~WebViewHost.

        Managing focus is a bit trickier, since normally you would get window
        events to reset the focus to the right window.  We do it manually
        instead.

        This fixes 2 plugin tests on DRT.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell): Move window close logic to ~WebViewHost.
        (TestShell::closeWindow): Move widget close() to WVH destructor and
            manage focus manually.
        (TestShell::closeRemainingWindows): Comment typo.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::closeWidget):
        (invokeCloseWidget):
        (WebViewHost::closeWidgetSoon): Close the window asynchronously (matches
            test_shell).
        (WebViewHost::~WebViewHost):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-12  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        cpp.py needs some tidying.
        https://bugs.webkit.org/show_bug.cgi?id=49443

        * Scripts/webkitpy/style/checkers/cpp.py:
          Fix parameter ordering for iteratively_replace_matches_with_char
          to mirror other similar functions (and improved comments, etc.)
          Also, use a python-ism (for/else) to get rid of a variable that
          was there to determine if something had been found in the loop.

2010-11-12  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by James Robinson.

        [Chromium/DRT] Make EventSendingController send complete touch events.
        https://bugs.webkit.org/show_bug.cgi?id=49285

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::addTouchPoint):
        (EventSender::updateTouchPoint):
        (EventSender::sendCurrentTouchEvent):

2010-11-12  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed rollout of r71858.

        Rollout out r71858 since it breaks new-run-webkit-httpd as used by the
        NaCl tests.

        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_standalone.py: Removed.
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-12  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] TestController::runUntil doesn't honor the timeout parameter
        https://bugs.webkit.org/show_bug.cgi?id=48941

        Implement the missing timeout of WebKitTestRunner for Qt.

        A QElapsedTimer has been added to RunUntilConditionLoop in order
        to measure how long the loop has been running. When the timer
        is bigger or equal than the timeout, the loop ends even if the
        condition is not met.

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::RunUntilConditionLoop::start):
        (WTR::RunUntilConditionLoop::run):
        (WTR::RunUntilConditionLoop::timerEvent):
        (WTR::TestController::platformRunUntil):

2010-11-11  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style function detection doesn't handle templates with spaces.
        https://bugs.webkit.org/show_bug.cgi?id=49427

        * Scripts/webkitpy/style/checkers/cpp.py: Stripped out templates when
          finding the function name.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Made the test have a
          template with a space.

2010-11-11  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Shinichiro Hamaji.

        Enable check-webkit-style on Qt files
        https://bugs.webkit.org/show_bug.cgi?id=48322

        Adding exception for _q_... private slots and
        ..._data() methods in tests

        * Scripts/webkitpy/style/checker.py: enable Qt dirs, add exceptions
        * Scripts/webkitpy/style/checker_unittest.py: improve unittests

2010-11-11  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style function detection doesn't work for templates and destructors.
        https://bugs.webkit.org/show_bug.cgi?id=49425

        * Scripts/webkitpy/style/checkers/cpp.py: Changed regex for templates and destructors.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Made the test hit this issue.

2010-11-11  Joone Hur  <joone@kldp.org>

        Reviewed by Antonio Gomes.

        [GTK][DRT] Implement LayoutTestController::nodesFromRect
        https://bugs.webkit.org/show_bug.cgi?id=46598

        Support nodesFromRect in DRT

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::nodesFromRect):

2010-11-11  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        editing/selection/context-menu-on-text.html fails on chromium
        https://bugs.webkit.org/show_bug.cgi?id=45898

        Enhance Chromium's EventSender::contextClick() to return
        array of menu strings. The implementation incomplete because
        Although actual context menu is implemented by the browser,
        it reflects editability of underlying context thus makes
        context-menu-on-text.html passed.
        
        * DumpRenderTree/chromium/EventSender.cpp:
        (makeMenuItemStringsFor): Added.
        (EventSender::contextClick): Now returns array of menu strings.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::showContextMenu): Now storing given WebContextMenuData object.
        (WebViewHost::clearContextMenuData): Added.
        (WebViewHost::lastContextMenuData): Added.
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-11  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        fix build breakage caused by fix for bug 49380 (r71858).

        config_standalone needs to ensure that the packages it needs are
        in sys.path.

        https://bugs.webkit.org/show_bug.cgi?id=49419

        * Scripts/webkitpy/layout_tests/port/config_standalone.py:

2010-11-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Fix NRWT to respect set-webkit-configuration again :(

        This change fixes a typo in config.py that was causing the wrong
        value to be read initially and us never actually looking into
        the filesystem to get the default configuration.
        
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_standalone.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out Bug, Attachment and CommitterValidator from bugzilla.py
        https://bugs.webkit.org/show_bug.cgi?id=49403

        CommitterValidator really had nothing to do with bugzilla.py.
        I've put it next to committers.py for now since its rather tied to that file.

        * Scripts/webkitpy/common/config/committervalidator.py: Added.
        * Scripts/webkitpy/common/config/committervalidator_unittest.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/__init__.py:
        * Scripts/webkitpy/common/net/bugzilla/attachment.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bug.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/bot/feeders.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2010-11-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        fix missing 'pid' argument for http lockfile checking on win32
        https://bugs.webkit.org/show_bug.cgi?id=49363

        * Scripts/webkitpy/common/system/executive.py:

2010-11-11  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by Adam Barth.

        Move bugzilla.py into its own module in preparation for splitting one-file-per-class
        https://bugs.webkit.org/show_bug.cgi?id=49402

        * Scripts/webkitpy/common/net/bugzilla/__init__.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/bugzilla.py.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/bugzilla_unittest.py.

2010-11-10  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Use IAccessibleComparable to compare accessibility objects.
        https://bugs.webkit.org/show_bug.cgi?id=49118

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::isEqual):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (comparableObject):
        (AccessibilityUIElement::isEqual):

2010-11-10  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by David Hyatt.

        HTML5 Ruby support should be mandatory feature
        https://bugs.webkit.org/show_bug.cgi?id=49272

        Remove Ruby as optional feature.

        * Scripts/build-webkit:

2010-11-10  Adam Roben  <aroben@apple.com>

        Print VC++ Express build logs in the same order that the projects are
        built

        Fixes <http://webkit.org/b/49326> print-vse-failure-logs prints logs
        in an unhelpful order

        Reviewed by Eric Seidel.

        * Scripts/print-vse-failure-logs:
        (PrintVisualStudioExpressLogs._build_order): Added. Uses
        print-msvc-project-dependencies to figure out the order in which
        projects are built.
        (PrintVisualStudioExpressLogs._sort_buildlogs): Added. Sorts the logs
        based on their build order and project name.
        (PrintVisualStudioExpressLogs._obj_directory): Moved code to find the
        scripts directory from here...
        (PrintVisualStudioExpressLogs._scripts_directory): ...to here.
        (PrintVisualStudioExpressLogs.main): Sort the logs before printing
        them.

2010-11-10  Adam Roben  <aroben@apple.com>

        Only print the interesting text from VC++ Express build logs

        Fixes <http://webkit.org/b/49325> It's hard to find the interesting
        output from print-vse-failure-logs

        Reviewed by Eric Seidel.

        * Scripts/print-vse-failure-logs: Removed unnecessary os.path import,
        added newly-required imports. Removed a comment that was essentially a
        FIXME, and is now fixed.
        (PrintVisualStudioExpressLogs._relevant_text): Added. Uses
        BeautifulSoup to extract the relevant text from the build log.
        (PrintVisualStudioExpressLogs.main): Only print the relevant text.

2010-11-09  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] http/tests/security/XFrameOptions fail with Chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=49286
        
        The tests in http/tests/security/XFrameOptions started to fail after
        r71297, since it changed the WebViewHost::assignIdentifierToRequest
        logic to always assign identifiers to requests, even if we're not going
        to be dumping resource load callbacks at that point. These tests
        only call LayoutTestController.dumpResourceLoadCallbacks after the
        request is started, thus their expectations have "<unknown>" as the
        identifier. Change WebViewHost to the previous behavior, which also
        match the other ports'.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::assignIdentifierToRequest):
        (WebViewHost::removeIdentifierForRequest):

2010-11-08  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        run platform/chromium/plugins/return-npobject.html on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49103

        This tests that we can get an NPObject returned through a method on
        an NPAPI Object.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testCallbackReturn):
        (pluginInvoke):

2010-11-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r71672.
        http://trac.webkit.org/changeset/71672
        https://bugs.webkit.org/show_bug.cgi?id=49276

        It doesn't work on Chromium Windows bot (Requested by Ossy on
        #webkit).

        * Scripts/webkitpy/common/system/file_lock.py: Removed.
        * Scripts/webkitpy/common/system/file_lock_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-11-09  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Make http locking similar to perl implementation
        https://bugs.webkit.org/show_bug.cgi?id=49187

        * Scripts/webkitpy/common/system/file_lock.py: Added.
        * Scripts/webkitpy/common/system/file_lock_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-11-09  James Kozianski  <koz@chromium.org>

        Reviewed by Eric Seidel.

        Clean up imports for webkit-patch.
        https://bugs.webkit.org/show_bug.cgi?id=49083

        Move some imports from commands into main.py where they are used.
        Move command imports into the __init__ of the commands module.

        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/main.py:

2010-11-09  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][QtTestBrowser] Don't erase incorrect url in the Url Bar
        https://bugs.webkit.org/show_bug.cgi?id=49047

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::setAddressUrl):

2010-11-09  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Improve old-run-webkit-tests --verbose to show DumpTool opening/closing
        https://bugs.webkit.org/show_bug.cgi?id=49252

        * Scripts/old-run-webkit-tests:

2010-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Output of old-run-webkit-tests is buggy in verbose mode
        https://bugs.webkit.org/show_bug.cgi?id=49249

        * Scripts/old-run-webkit-tests: Redundant outputs removed.

2010-11-08  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Link with target name set does not work
        https://bugs.webkit.org/show_bug.cgi?id=48865

        When a new page is created with a name (target=myFrame), the new
        mainFrame could not be found because they where not stored in the
        same PageGroup. As PageGroup are not exposed externally so the
        simpliest solution is to use a global page group name. This also fixes
        issue with visited link coloration across pages. After this change the
        private function webkit_web_view_set_group_name() was no longer used
        so it was removed completly.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (createWebView):

2010-11-08  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Kent Tamura.

        WebViewHost::reset() uses placement new.
        https://bugs.webkit.org/show_bug.cgi?id=49069

        WebViewHost is using placement destruction / new to simulate a fresh
        WebViewHost object at the same address. This is because the WebView remains
        open across tests and maintains a pointer to the WebViewHost.
        This change resets member variables explictly instead of the placement new dance.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::reset):

2010-11-08  Dirk Pranke <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Fix the webkit_base_dir logic in webkitpy/layout_tests/port/config.py. 
        It turns out that NRWT can't use the code in scm.find_checkout_root()
        because the Chromium bots don't do full checkouts of the WebKit
        tree; they only check out subdirectories like WebKitTools/Scripts.
        Until we can figure out a better approach for this, I've
        restored the base_dir-detecting code from NRWT, which works in
        any directory tree, scm or no.

        This also restores the files modified in r71475 and r71474.

        https://bugs.webkit.org/show_bug.cgi?id=49151

        * WebKitTools/Scripts/webkitpy/layout_tests/port/config.py
        * WebKitTools/Scripts/webkitpy/layout_tests/port/config_unittest.py

2010-11-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch failure-reason explodes if a build is missing
        https://bugs.webkit.org/show_bug.cgi?id=49195

        This is likely a recent regression.  Adding a unit test for this case.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:

2010-11-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Ignore the system scrollbar setting.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Set the scrollbar default.

2010-11-05  Adam Roben  <aroben@apple.com>

        Make webkitpy.common.system.executive_unittest pass when running under
        Win32 Python

        Fixes <http://webkit.org/b/49033>.

        Reviewed by Dave Levin and Eric Seidel.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._run_command_with_teed_output): Pass the arguments through
        encode_argument_if_needed rather than using Cygwin-specific code here.
        (Executive.run_and_throw_if_fail): Use child_process_encoding to decode
        the output.
        (Executive.run_command): Use encode_argument_if_needed to encode the
        arguments and child_process_encoding to decode the output.
        (Executive._child_process_encoding): Returns the encoding that should be
        used when communicating with child processes. On Windows we use mbcs,
        which maps to the current code page. On all other platforms we use
        UTF-8.
        (Executive._should_encode_child_process_arguments): Returns True if
        arguments to child processes need to be encoded. This is currently
        only needed on Cygwin and Win32 Python 2.x.
        (Executive._encode_argument_if_needed): Encode the argument using
        child_process_encoding if we need to encode arguments to child
        processes on this platform.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (never_ending_command): Added. Returns arguments to run a command that
        will not quit until we kill it. On Windows we use wmic, on other
        platforms we use yes.
        (ExecutiveTest.test_run_command_with_unicode): Changed to expect the
        mbcs encoding to be used and for output from the child processes to
        have been roundtripped through encode/decode on Win32 Python. When
        UTF-8 is the encoding the roundtripping is undetectable, but with mbcs
        it's possible that some characters will not be able to be converted
        and will be replaced by question marks; the round-tripping allows us
        to expect this result.

        (ExecutiveTest.test_kill_process):
        (ExecutiveTest.test_kill_all):
        Use never_ending_command instead of invoking "yes" directly. Expect an
        exit code of 1 when using Win32 Python, as that's what seems to happen.

2010-11-08  Adam Roben  <aroben@apple.com>

        Roll out r71532

        It broke the build for Cygwin 1.7 installs. Cygwin 1.7's default
        .bashrc unsets %TEMP%, which broke copy-tools.cmd.

        * Scripts/webkitdirs.pm:

2010-11-08  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        run platform/chromium/plugins/nested-plugin-objects.html on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49094

        This tests that objects created by plugins are proplery cleaned up.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testPassTestObject):
        (pluginInvoke):
        * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp:
        (testAllocate):
        (testDeallocate):
        (testGetProperty):
        (testConstruct):

2010-11-08  Adam Roben  <aroben@apple.com>

        Mark Windows builds triggered from Perl as being non-interactive

        This affects whether some of our scripts will show alerts vs. printing
        to the build log.

        Fixes <http://webkit.org/b/49181> Windows build fail mysteriously when
        .vsprops files are updated

        Reviewed by Steve Falkenburg.

        * Scripts/webkitdirs.pm:
        (buildVisualStudioProject): Set WEBKIT_NONINTERACTIVE_BUILD to 1.

2010-11-08  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        Make http locking default in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=48053

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-08  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [NRWT] If the http lock fails we shouldn't do any locking
        https://bugs.webkit.org/show_bug.cgi?id=49164

        If something goes wrong with the locking, the test should keep going.

        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-11-08  Adam Roben  <aroben@apple.com>

        Switch back to using kCGImageAlphaPremultipliedFirst when generating
        pixel dumps on Windows

        I changed this behavior in r71418 thinking that it was required for
        getting plugins to show up in pixel dumps. But it doesn't seem to be
        necessary, and was making it impossible to compare new Windows pixel
        dumps with existing Windows or Mac pixel dumps (because ImageDiff won't
        compare an image with alpha to an image without alpha).

        Fixes <http://webkit.org/b/49172> REGRESION (r71418): Can't compare
        new Windows pixel results to existing Windows or Mac results

        Reviewed by Antti Koivisto.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Replaced kCGImageAlphaNoneSkipFirst
        with kCGImageAlphaPremultipliedFirst.

2010-11-08  Csaba Osztrogonac  <ossy@webkit.org>

        Unreviewed, rolling out r71466.
        http://trac.webkit.org/changeset/71466
        https://bugs.webkit.org/show_bug.cgi?id=48865

        It broke layout tests on GTK bots.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (createWebView):

2010-11-08  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Enable running of Qt API tests on BuildBot
        https://bugs.webkit.org/show_bug.cgi?id=49004

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:

2010-11-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add clean-review-queue command to remove closed bugs from the webkit.org/pending-review
        https://bugs.webkit.org/show_bug.cgi?id=49160

        Bugzilla doesn't automatically remove r? when a bug gets closed.
        This script takes care of that for webkit.org.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/commands/upload.py:

2010-11-07  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed, rolling out r71474.
        http://trac.webkit.org/changeset/71474
        https://bugs.webkit.org/show_bug.cgi?id=48280

        breaks chromium webkit tests
        https://bugs.webkit.org/show_bug.cgi?id=49151

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-11-07  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed, rolling out r71475.
        http://trac.webkit.org/changeset/71475
 
        breaks chromium webkit tests
        https://bugs.webkit.org/show_bug.cgi?id=49151

        * Scripts/webkitpy/common/newstringio.py: Removed.
        * Scripts/webkitpy/common/newstringio_unittest.py: Removed.
        * Scripts/webkitpy/common/system/executive_mock.py: Removed.
        * Scripts/webkitpy/common/system/filesystem_mock.py: Removed.
        * Scripts/webkitpy/layout_tests/port/config_mock.py: Removed.

2010-11-06  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Add files inexplicably not committed in r71474 as part of the
        fix for bug 48280.

        * Scripts/webkitpy/common/newstringio.py: Added.
        * Scripts/webkitpy/common/newstringio_unittest.py: Added.
        * Scripts/webkitpy/common/system/executive_mock.py: Added.
        * Scripts/webkitpy/common/system/filesystem_mock.py: Added.
        * Scripts/webkitpy/layout_tests/port/config_mock.py: Added.

2010-11-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        new-run-webkit-tests: update port/base and port/webkit to use the
        new FileSystem and Config abstractions, pulling more logic out of
        the base Port classes into separate, mockable objects.

        Also create a MockFileSystem object, a MockConfig object, move
        MockExecutive into common/system to be next to executive, and
        update the config object to use a FileSystem.

        https://bugs.webkit.org/show_bug.cgi?id=48280

        * Scripts/webkitpy/common/newstringio.py: Added.
        * Scripts/webkitpy/common/newstringio_unittest.py: Added.
        * Scripts/webkitpy/common/system/executive_mock.py: Added.
        * Scripts/webkitpy/common/system/filesystem_mock.py: Added.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_mock.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-11-06  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build breakage.

        Apparently I uploaded the wrong version of the file to fix 49122
        and neither Eric or I noticed - it was missing a dirname() call.
        Fixing ...

        https://bugs.webkit.org/show_bug.cgi?id=49122

        * Scripts/webkitpy/common/checkout/scm.py:

2010-11-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        webkitpy/tool/* unittests change cwd and don't clean up properly

        https://bugs.webkit.org/show_bug.cgi?id=49122

        * Scripts/webkitpy/common/checkout/scm.py:

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        suspendAnimations/resumeAnimations not present in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=49109

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::suspendAnimations):
        (WTR::LayoutTestController::resumeAnimations):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-11-05  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        cleanup style in TestNetscapePlugIn/PluginObject.cpp
        https://bugs.webkit.org/show_bug.cgi?id=49044

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (getPluginClass):
        (pluginGetProperty):
        (pluginSetProperty):
        (variantToIdentifier):
        (testCallback):
        (getURL):
        (getURLNotify):
        (testInvokeDefault):
        (testGetProperty):
        (testDocumentOpen):
        (testWindowOpen):
        (pluginInvoke):
        (handleCallback):
        (notifyStream):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:

2010-11-05  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        Add QueueStatusServer/__init__.py so others can run the QueueStatusServer tests
        https://bugs.webkit.org/show_bug.cgi?id=49032

        I wrote this file as part of bug 47847, but I forgot to commit it.
        No one else noticed it missing because test-webkitpy knows how
        to recover in the case where it can't import QueueStatusServer
        (which generally occurs due to not having installed the AppEngine SDK).

        * QueueStatusServer/__init__.py: Added.
        * QueueStatusServer/model/workitems_unittest.py:
         - Remove a test which fails.  This was probably landed (by me)
           from my other machine, which since this __init__.py was missing
           I never noticed the failure and landed this invalid test.
           Sadly we can't really test remove_work_item as it depends
           on .key() working.  .key() will throw unless the object
           has already been saved it seems.
           This may be a mis-design in our remove_work_item implementation,
           but for now, just removing the test.

2010-11-04  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style about TestNetscapePlugIn

        Fixes <http://webkit.org/b/49030> check-webkit-style is ignorant of
        TestNetscapePlugIn's coding conventions

        Reviewed by John Sullivan.

        * Scripts/webkitpy/style/checker.py: Lump TestNetscapePlugIn in with
        WebKitAPITest and TestWebKitAPI in having different include order and
        naming conventions than WebCore. Added some comments about why the
        exceptions exist.

2010-11-04  Adam Roben  <aroben@apple.com>

        Add a test that shows that windowed plugins are able to paint

        Somehow we never had a test for this before.

        Fixes <http://webkit.org/b/49029> Should add a test that shows
        windowed plugins can paint

        Reviewed by Jon Honeycutt.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/DrawsGradient.cpp: Added.
        (DrawsGradient::DrawsGradient):
        (DrawsGradient::wndProc): We handle the WM_PAINT and WM_PRINTCLIENT messages.

        (DrawsGradient::onPaint):
        (DrawsGradient::onPrintClient):
        These both just call through to paint.

        (DrawsGradient::paint): Fills our client area with some gradients.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Link
        against Msimg32.lib for ::GradientFill and added DrawsGradient.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Use WM_PRINT instead of
        WM_PRINTCLIENT so that ::DefWindowProc will send
        WM_PRINT/WM_PRINTCLIENT messages to the WebView's child windows.
        Replaced kCGImageAlphaPremultipledFirst with kCGImageAlphaNoneSkipFirst
        because GDI doesn't support alpha and kCGImageBitmapOrder32Little with
        kCGImageBitmapOrder32Host because, who knows, maybe someday Windows
        will run on a big-endian platform.

2010-11-04  Adam Roben  <aroben@apple.com>

        Extract much of NPNInvalidateRectInvalidatesWindow's code into a
        WindowedPluginTest base class

        The base class takes care of subclassing the plugin's window so that a
        custom WNDPROC is called. This will make it easier to write tests that
        need to handle window messages.

        Fixes <http://webkit.org/b/49028> It's hard to write a PluginTest with
        a custom WNDPROC

        Reviewed by Jon Honeycutt.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/NPNInvalidateRectInvalidatesWindow.cpp:
        (NPNInvalidateRectInvalidatesWindow::NPNInvalidateRectInvalidatesWindow):
        (NPNInvalidateRectInvalidatesWindow::NPP_SetWindow):
        (NPNInvalidateRectInvalidatesWindow::wndProc):
        (NPNInvalidateRectInvalidatesWindow::testInvalidateRect):
        Moved code from here to WindowedPluginTest. Changed to use window()
        instead of m_window.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added WindowedPluginTest and added TestNetscapePlugIn/win to the
        include path. Also reordered the include path to make a little more
        sense and simplified the entry that added TestNetscapePlugIn itself to
        the include path.

        * DumpRenderTree/TestNetscapePlugIn/win/WindowedPluginTest.cpp: Added.
        (WindowedPluginTest::WindowedPluginTest):
        (WindowedPluginTest::NPP_SetWindow):
        (WindowedPluginTest::staticWndProc):
        * DumpRenderTree/TestNetscapePlugIn/win/WindowedPluginTest.h: Added.
        (WindowedPluginTest::window):
        Code came from NPNInvalidateRectInvalidatesWindow.

2010-11-04  Adam Roben  <aroben@apple.com>

        Add a plugin test to show that windowed plugins are clipped correctly

        Fixes <http://webkit.org/b/49024> <rdar://problem/8487847> Windowed
        plugins aren't clipped in WebKit2 on Windows

        Reviewed by Jon Honeycutt.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowRegionIsSetToClipRect.cpp: Added.
        (WindowRegionIsSetToClipRect::WindowRegionIsSetToClipRect): Initialize members.
        (WindowRegionIsSetToClipRect::NPP_SetWindow): Check that our window
        region matches the clip rect we know we should have based on
        window-region-is-set-to-clip-rect.html, and check that our window class
        doesn't have the CS_PARENTDC style.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added WindowRegionIsSetToClipRect.

2010-11-05  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Avoid font hinting in the DRT
        https://bugs.webkit.org/show_bug.cgi?id=48548

        Change the settings to avoid font hinting, it was causing
        different results depending on the distribution.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings):
        * DumpRenderTree/gtk/fonts/fonts.conf:

2010-11-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        build-webkit spams system.log by repeatedly checking for PBXProductDirectory in com.apple.Xcode
        https://bugs.webkit.org/show_bug.cgi?id=49051

        This is a speculative fix.  The unit tests cover these methods, however
        I don't know if this will fully stop the system.log spam.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-11-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add basic support for showing bot id on /queue-status/ pages
        https://bugs.webkit.org/show_bug.cgi?id=49037

        This support is really simple.  Eventually we'll want to
        show the bot id in the lock table too, but we don't have
        that information stored in the server yet.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/handlers/queuestatus_unittest.py: Added.
        * QueueStatusServer/templates/includes/singlequeuestatus.html:

2010-11-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        Create a filesystem wrapper that we can use to enforce
        particular conventions and use for mocking and dependency
        injection down the line.

        https://bugs.webkit.org/show_bug.cgi?id=48144

        * Scripts/webkitpy/common/system/filesystem.py: Added.
        * Scripts/webkitpy/common/system/filesystem_unittest.py: Added.

2010-11-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        run_webkit_tests_unittest fails under Python 2.5
        https://bugs.webkit.org/show_bug.cgi?id=49043
        
        Switch from itertools.chain.from_iterable (which was added in 2.6)
        to using itertools.chain directly.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-04  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed fix to webkit-patch rebaseline-server so that it runs under
        Python 2.5 (it needs an import to use the with statement).

        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-11-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests: split out webkit-specific configuration stuff into a new module

        The current NRWT code has webkit-specific configuration code (like
        _script_path, default configuration, etc.) mixed in with
        layout-test-specific stuff in port/base. The configuration code
        should be split out into a separate module for easier mocking,
        testing, and isolation.

        https://bugs.webkit.org/show_bug.cgi?id=48264

        * Scripts/webkitpy/layout_tests/port/config.py: Added.
        * Scripts/webkitpy/layout_tests/port/config_unittest.py: Added.

2010-11-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: initial framework
        https://bugs.webkit.org/show_bug.cgi?id=48892
        
        Adds the basic framework for the rebaseline server (details at 
        http://webkit.org/b/47761). Includes the rebaseline-server webkit-patch
        command, which starts an HTTP server that can serve static files or
        invoke handler methods on a class.

        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html: Added.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css: Added.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js: Added.
        * Scripts/webkitpy/tool/commands/rebaselineserver.py: Added.

2010-11-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests wasn't using DRT by default for
        --platform chromium-gpu

        The default value was set to False instead of None, which meant
        that the platform specific logic wasn't firing to change the
        value to True (b/c we were afraid we'd be overriding the user
        preference).

        https://bugs.webkit.org/show_bug.cgi?id=49038

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-04  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        make platform/chromium/plugins/multiple-plugins.html pass on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49026

        Have the testObject.bar property return the string "bar".  This lets
        us run and pass platform/chromium/plugins/multiple-plugins.html on all
        platforms.

        * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp:
        (testGetProperty):

2010-11-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        NRWT doesn't have good test coverage for --run-chunk, --batch-size, --run-part, etc.
        https://bugs.webkit.org/show_bug.cgi?id=48878
        
        Add get_tests_run so that it's easy to see which tests get run (and with
        what batching) for a given flag combination. Flesh out the various
        test cases that have FIXMEs.
        
        Also fixes an off-by-one error (batch sizes were one larger than 
        expected) and makes --run-part also have wraparound behavior, like
        --run-chunk.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-04  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Dimitri Glazkov.

        Support box-sizing without the vendor prefix
        https://bugs.webkit.org/show_bug.cgi?id=36713

        Based on patch by Peter Beverloo <peter@lvp-media.com>

        * iExploder/htdocs/cssproperties.in: Change -webkit-box-sizing to box-sizing.

2010-11-04  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rollout r71340, because it broke Chromium Windows bot.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-04  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        Make http locking default in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=48053

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-04  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        [NRWT] Clear invalid http locks on Windows platform as well
        https://bugs.webkit.org/show_bug.cgi?id=48515

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-11-02  Adam Roben  <aroben@apple.com>

        Reduce our dependence on coreutils when running Python tests

        This patch introduces versions of the standard echo and cat utilities
        implemented in Python. They are probably missing features of their
        coreutils equivalents, but they can do what's necessary for our Python
        tests. This is useful on Windows, where these utilities typically
        aren't available.

        Fixes <http://webkit.org/b/48883> executive_unittest relies on echo
        and cat utilities from coreutils, which are not present on Windows

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/executive_unittest.py: Changed to use
        our Python-based echo and cat.

        * Scripts/webkitpy/common/system/fileutils.py: Added.
        (make_stdout_binary): On Windows, puts sys.stdout into binary mode so
        that \n won't be translated into \r\n. I couldn't think of a good way
        to test this directly without touching the filesystem, but it is tested
        indirectly by echo_unittest.

        * Scripts/webkitpy/test/cat.py: Added.
        (command_arguments): Returns a list for invoking cat with the given arguments.
        (main): Acts like a simplified version of the coreutils cat utility.

        * Scripts/webkitpy/test/cat_unittest.py: Added.
        (CatTest.assert_cat): Runs cat with the given input and ensures the
        output matches the input.
        (CatTest.test_basic): Performs a simple test of cat.
        (CatTest.test_no_newline): Tests what happens when the input string
        doesn't have a trailing newline.
        (CatTest.test_unicode): Tests passing a unicode string to cat.
        (CatTest.test_as_command): Tests running cat as a separate command.

        * Scripts/webkitpy/test/echo.py: Added.
        (command_arguments): Returns a list for invoking echo with the given arguments.
        (main): Acts like a simplified version of the coreutils echo utility.

        * Scripts/webkitpy/test/echo_unittest.py: Added.
        (EchoTest.test_basic): Performs a simple test of echo.
        (EchoTest.test_no_newline): Tests passing -n to echo to suppress the
        trailing newline.
        (EchoTest.test_unicode): Tests passing unicode and non-unicode strings
        to echo.
        (EchoTest.test_argument_order): Tests what happens when -n is not the
        first argument.
        (EchoTest.test_empty_arguments): Tests what happens when you pass [] to
        echo.main.
        (EchoTest.test_no_arguments): Tests what happens when you call
        echo.main with no arguments.
        (EchoTest.test_as_command): Tests running echo as a separate command.

2010-11-04  Renata Hodovan  <reni@inf.u-szeged.hu>

        Unreviewed: Add myself to the list of Committers.

        * Scripts/webkitpy/common/config/committers.py:

2010-11-04  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Hook into QWebPage::scrollRequested for resizes-to-contents mode

        In RTC mode the QGraphicsWebView item is the size of the contents,
        scrolling works a bit differently  (we need to react to scrollRequested.)

        Normally QGraphicsView will replay the last mouse event when scrolling,
        so to prevent WebKit from getting confused by this we temporarily make
        the QGraphicsView non-interactive.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::setPage):
        (WebViewGraphicsBased::scrollRequested):
        * QtTestBrowser/webview.h:

2010-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Andreas Kling.

        Use OS(MAC_OS_X) rather than PLATFORM(MAC) in TestControllerQt

        PLATFORM(MAC) is not defined for the Qt port, as it refers to
        the Mac-port, not the Mac OS X operating system.

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::isExistingLibrary):

2010-11-04  Leonid Ebril  <leonid.ebril@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Adding iphone user agent string the user agent list for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=48869

        * QtTestBrowser/useragentlist.txt:

2010-11-03  Adam Roben  <aroben@apple.com>

        Always use uppercase drive names in strings returned by abspath_to_uri

        Some versions of cygpath use lowercase drive letters while others use
        uppercase, which makes it hard to test the output of code that uses
        cygpath.

        Fixes <http://webkit.org/b/48914> webkitpy.common.system.path_unittest
        fails with Cygwin 1.5

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/path.py:
        (cygpath): Updated the docstring to indicate that only absolute paths
        should be passed for now (though relative paths will work fine).
        (_Cygpath.convert): Upper-case the first letter of the converted Windows path.

2010-11-03  George Guo  <George.Guo@Nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser : set mmp rule pageddata in Symbian
        https://bugs.webkit.org/show_bug.cgi?id=48767
    
        Paging is needd on Symbian devices to support benchmarks tests like
        dromaeo.com and Celtic Kane that need a lot of memory to run  

        * QtTestBrowser/QtTestBrowser.pro:

2010-11-03  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Chromium: Update resource tracking when moving a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=48363

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::assignIdentifierToRequest):
        Always put resource id in map so we can make assumptions about its
        presence.
        (WebViewHost::removeIdentifierForRequest):
        Added.
        (WebViewHost::didFinishResourceLoad):
        (WebViewHost::didFailResourceLoad):
        Check existence of resource id before removing from map.
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-03  Victor Wang  <victorw@chromium.org>

        Reviewed by Adam Barth.

        [Chromium] update buildbot names in chromium rebaseline tool.

        https://bugs.webkit.org/show_bug.cgi?id=48881

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-11-03  Darin Adler  <darin@apple.com>

        Updated Xcode projects by opening them with Xcode 3.2.4.
        Updated svn:ignore for Xcode projects.

        * MiniBrowser/MiniBrowser.xcodeproj: Added property svn:ignore.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj: Added property svn:ignore.
        * WebKitLauncher/WebKitLauncher.xcodeproj: Modified property svn:ignore.
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj: Updated with Xcode 3.2.4.

2010-11-03  Adam Roben  <aroben@apple.com>

        Stop waiting for messages from the web process after a timeout elapses

        TestController::runUntil now takes a timeout parameter that specifies
        how long to wait for the condition to become true. WebKitTestRunner
        takes a --timeout flag that specifies how long the timeout should be.
        run-webkit-tests passes this flag to WebKitTestRunner so its timeout
        will be similar to run-webkit-tests.

        Fixes <http://webkit.org/b/43047> <rdar://problem/8365833>
        WebKitTestRunner waits forever if the web process crashes

        Reviewed by Darin Adler and Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (top level): Moved the GuardMalloc timeout adjustment here from
        readFromDumpToolWithTimer.
        (openDumpTool): Make WTR use a timeout similar to but slightly shorter
        than the one that was specified on the command line.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController): Initialize our timeout values.
        (WTR::TestController::initialize): Parse the --timeout flag and use it
        to modify our timeout values.
        (WTR::TestController::resetStateToConsistentValues): Changed to use a
        short timeout while waiting for the web process to reset and to return
        a boolean indicating whether we were able to reset the web process.
        Uses a 5-second timeout while waiting for the process to be reset.
        (WTR::TestController::runTest): Changed to return a boolean indicating
        whether we were able to reset the web process (and thus run the test).
        (WTR::TestController::runUntil): Call through to platformRunUntil.

        (WTR::TestController::runTestingServerLoop):
        (WTR::TestController::run):
        Changed to bail if any test can't be run. This will cause the process
        to exit. (Unfortunately this will make run-webkit-tests think we
        crashed; see <http://webkit.org/b/48943>.)

        * WebKitTestRunner/TestController.h: Added platformRunUntil,
        m_longTimeout, and m_shortTimeout.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke): Use a short timeout when waiting for the
        initial response and a long timeout when waiting for the test to
        complete. Check whether runUntil timed out and print an error message
        if so.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformRunUntil): Renamed from runUntil. Pass
        [NSDate distantPast] to -[NSRunLoop runMode:beforeDate:] so that we
        won't block waiting for the run loop. Only loop until the timeout
        elapses.

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::platformRunUntil): Renamed from runUntil. Added a
        FIXME about honoring the timeout.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformRunUntil): Renamed from runUntil. Use
        ::MsgWaitForMultipleObjectsEx to implement the timeout. Changed to use
        ::PeekMessageW so that we don't block waiting for messages to become
        available.

2010-11-03  Adam Roben  <aroben@apple.com>

        Add a plugin test that evaluates JS after removing the plugin element
        from the document

        This test replaces platform/win/plugins/plugin-delayed-destroy.html.
        That test was made to prevent a crash very similar to this one, but
        unfortunately tested only the mechanism that prevented the crash and
        not whether the crash itself was prevented. Since WebKit2 uses a
        different mechanism to prevent the crash, the test was failing even
        though WebKit2 was not vulnerable to the crash. This new test crashes
        if there is no mechanism in place to prevent it and passes in both
        WebKit1 and WebKit2.

        Fixes <http://webkit.org/b/46711> <rdar://problem/8485903>
        platform/win/plugins/plugin-delayed-destroy.html fails in WebKit2

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Added new file.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginDeallocate): Make sure we delete the PluginTest object. This
        prevents a leak and also allows us to test the crash.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::executeScript): Made this into a non-static member
        function.

        (PluginTest::waitUntilDone):
        (PluginTest::notifyDone):
        Updated for changes to executeScript.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added executeScript.

        * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSAfterRemovingPluginElement.cpp: Added.
        (EvaluateJSAfterRemovingPluginElement::EvaluateJSAfterRemovingPluginElement):
        Initialize ourselves and tell the test harness to wait.
        (EvaluateJSAfterRemovingPluginElement::NPP_DestroyStream): Remove our
        plugin element from the document, then execute some JavaScript. If
        WebKit does not have appropriate mechanisms in place, we'll be
        destroyed inside the first call to executeScript and crash on the
        second call.

2010-11-02  Stephen White  <senorblanco@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Fix LayoutTestController UMRs.
        https://bugs.webkit.org/show_bug.cgi?id=48872

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):

2010-11-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION: rebaseline-chromium-webkit-tests uses non-zero tolerance for
        image dup detection
        https://bugs.webkit.org/show_bug.cgi?id=48744

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
         - Make a function for option parsing for ease of test
         - Set 0 to options.tolerance
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
         - Add a test for this change

2010-11-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed: Add myself to the list of Committers.

        * Scripts/webkitpy/common/config/committers.py:

2010-11-02  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextForInjectedBundleTest):

2010-11-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add a way to send startup messages on the context which can be posted when a process launches
        <rdar://problem/8617928>
        https://bugs.webkit.org/show_bug.cgi?id=48838

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (WKBundleInitialize):
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        (TestWebKitAPI::InjectedBundleController::didReceiveMessage):
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/InjectedBundleMain.cpp:
        (WKBundleInitialize):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextForInjectedBundleTest):
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        (WKBundleInitialize):
        Update implementations of WKBundleInitialize to take an initial userData
        argument.  Change TestWebKitAPI to use the new initial userData to initialize
        each test's bundle.

2010-11-02  Benjamin Kalman  <kalman@google.com>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests doesn't strip "LayoutTests/" from prefix, unlike old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=48794

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Strip the "LayoutTests/" prefix from test argument paths.

2010-11-02  Adam Roben  <aroben@apple.com>

        Skip webkitpy.layout_tests.run_webkit_tests_unittest.MainTest on Cygwin
        Python 2.5.x

        It is known to hang on that version of Python. See
        <http://webkit.org/b/48614>.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py: Use
        skip_if to skip MainTest on Cygwin Python 2.5.x.

        * Scripts/webkitpy/test/skip.py: Added.
        (skip_if): If the passed-in condition is false, find all the test_*
        methods of the given class and replace them with a function that just
        logs that we're skipping these tests. This is loosely based on the
        unittest.skip_if decorator added in Python 3.1.
        (_skipped_method): Returns a function that just logs that the tests are
        being skipped. This is used in place of the actual test_* functions.

        * Scripts/webkitpy/test/skip_unittest.py: Added.
        (SkipTest.setUp): Create a logger for ourselves and give it a handler
        that logs to a private stream.
        (SkipTest.tearDown): Reset the logger.
        (SkipTest.create_fixture_class): Returns a class that we use to test
        skip_if. It has a single test_* method, test_foo, that just calls
        through to a callback.
        (SkipTest.foo_callback): Record that test_foo was called.
        (SkipTest.test_skip_if_false): Pass skip_if a False condition and test
        that test_foo does get called.
        (SkipTest.test_skip_if_true): Pass skip_if a True condition and test
        that test_foo does not get called and the appropriate message gets
        logged.

2010-11-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch should tell check-webkit-style which files were changed so
        check-webkit-style doesn't have to stat the whole working copy again
        https://bugs.webkit.org/show_bug.cgi?id=48792

        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:

2010-11-02  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by James Robinson.

        [Chromium/DRT] Make EventSendingController honour leapForward for touch events.
        https://bugs.webkit.org/show_bug.cgi?id=48777

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::sendCurrentTouchEvent):

2010-11-02  Adam Roben  <aroben@apple.com>

        Only track resource identifiers in DRT when dumpResourceLoadCallbacks
        is on

        This reverts Windows to our pre-r71097 behavior. That patch made us
        track all resource identifiers, including the main resource, so the
        main resource's URL started appearing in test output instead of
        "<unknown>". Arguably having the main resource's URL is better, but all
        other platforms print "<unknown>" and we want to match.

        Fixes <http://webkit.org/b/48837> <rdar://problem/8620351> REGRESSION
        (r71097): Many http tests failing on Windows

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::identifierForInitialRequest): Don't add the
        identifier to the URL map if we're not supposed to dump resource load
        callbacks.
        (ResourceLoadDelegate::removeIdentifierForRequest): Always remove the
        identifier from the URL map even if we're already "done". There's no
        point in keeping out-of-date identifiers around.

2010-11-01  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Adam Roben.

        Windows: Update resource tracking when moving a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=48364

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (createWebViewAndOffscreenWindow):
        (main):
        Give each WebView its own ResourceLoadDelegate instance in order to
        make assertions about resource ids on a particular WebView.
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::identifierForInitialRequest):
        Always add id to the map.
        (ResourceLoadDelegate::removeIdentifierForRequest):
        Added.
        (ResourceLoadDelegate::willSendRequest):
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        (ResourceLoadDelegate::didReceiveResponse):
        (ResourceLoadDelegate::didFinishLoadingFromDataSource):
        (ResourceLoadDelegate::didFailLoadingWithError):
        (ResourceLoadDelegate::descriptionSuitableForTestResult):
        Replace static descriptionSuitableForTestResult with static member function to access identifier map.
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        (ResourceLoadDelegate::urlMap):
        Moved within class so that each WebView has its own id map.

2010-11-01  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dimitri Glazkov.

        remove debug code from run_webkit_tests.py
        https://bugs.webkit.org/show_bug.cgi?id=48800

        Remove temporary debug code and make --master-name required
        if --test-results-server is set now that all clients set
        --master-name.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-01  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        add plugin event logging for linux
        https://bugs.webkit.org/show_bug.cgi?id=48779

        This is taken from Chromium's fork of the layout test plugin:
        http://git.chromium.org/gitweb/?p=chromium.git/.git;a=blob;f=webkit/tools/npapi_layout_test_plugin/main.cpp;h=3ebdada2f049b3624756438cff852364f86a2ede;hb=HEAD#l348

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventX11):
        (NPP_HandleEvent):

2010-11-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests: use DRT, child-processes=1 for GPU tests by default
        https://bugs.webkit.org/show_bug.cgi?id=48790

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2010-11-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach check-webkit-style how to accept a list of files to diff on the
        command line
        https://bugs.webkit.org/show_bug.cgi?id=48784

        In a future patch, webkit-patch will use this option to improve
        performance.  I'm landing this in two pieces to avoid causing a version
        skew problem for the style-bot.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/optparser.py:
        * Scripts/webkitpy/style/optparser_unittest.py:
        * Scripts/webkitpy/style_references.py:

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Tear down the related WebProcessProxy when a WebContext is deallocated
        https://bugs.webkit.org/show_bug.cgi?id=48769

        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        We don't support empty URLs anymore, update test to expect a null URL instead.

2010-11-01  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Andreas Kling.

        Fix warning when compiling the chromium port of DumpRenderShell
        with clang.
        https://bugs.webkit.org/show_bug.cgi?id=48414

        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::javaScriptFlagsForLoad):

2010-11-01  Adam Roben  <aroben@apple.com>

        Fix typo from r71022

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2010-11-01  Adam Roben  <aroben@apple.com>

        Trigger the Windows Release WebKit2 tests when a Release build
        finishes, not when a Debug build finishes

        Fixes <http://webkit.org/b/48754> Windows Release WebKit2 tests are
        triggered at the wrong time

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Fixed
        triggerable name and trigger.

2010-11-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed. Adding my IRC nickname to the list of committers.

        * Scripts/webkitpy/common/config/committers.py:

2010-10-31  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] [Gtk] Plug-ins having upper case in mime type are failing to load

        Qt and Gtk are case-sensitive when storing the declared mime-type
        of plugins. Since plugin mime-types are lowercased prior to searching
        for them in the plugin database, ensure they are loaded with the
        mime-type in lower case too.

        Change the test netscape plugin to declare its mimetype in sentence
        case so that the correct behaviour is enforced.

        https://bugs.webkit.org/show_bug.cgi?id=36815

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (NP_GetMIMEDescription):

2010-10-31  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Support nodesFromRect in DRT

        https://bugs.webkit.org/show_bug.cgi?id=48716

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::nodesFromRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-10-30  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] QtTestBrowser: Switching view type moves the embedded inspector
        https://bugs.webkit.org/show_bug.cgi?id=48705

        Reinsert the embedded inspector into the splitter after changing
        between QWebView/QGraphicsWebView.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        (LauncherWindow::initializeView):
        * QtTestBrowser/webinspector.h:
        (WebInspector::WebInspector):

2010-10-28  Antonio Gomes  <agomes@rim.com>

        Reviewed by Ojan Vafai.

        Needs a "LinuxEditingBehavior", perhaps with a better name
        https://bugs.webkit.org/show_bug.cgi?id=36627

        Adding support to Mac's, GTK+'s, Windows' and Chromium's LayoutTestController class to test the newly introduced Unix editing behavior.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setEditingBehavior):

2010-10-29  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser: Add keyboard shortcut to toggle full screen (F11)
        https://bugs.webkit.org/show_bug.cgi?id=48695

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):

2010-10-29  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser: Fix uninitialized read in FpsTimer
        https://bugs.webkit.org/show_bug.cgi?id=48675

        FpsTimer::m_timer was never initialized and passed to QObject::killTimer()
        on startup with in -graphicsbased mode.

        * QtTestBrowser/fpstimer.cpp:
        (FpsTimer::FpsTimer):
        (FpsTimer::numFrames):
        (FpsTimer::stop):
        (FpsTimer::timerEvent):
        * QtTestBrowser/fpstimer.h:

2010-10-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: change TestResults to be serializable

        In preparation for changing new-run-webkit-tests from
        multithreaded to multiprocess, we need to make sure the data
        going between the threads is easily serialized over a socket.

        This change adds serialization/pickling for the TestResults and
        TestFailure objects (using cPickle).

        The TestFailure objects included a "has_wdiff" flag for Text
        results, but the flag wasn't being used, so I've removed it,
        simplifying the state to basically a set of enum objects with
        associated methods.

        https://bugs.webkit.org/show_bug.cgi?id=48616

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py:Added. 
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-10-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: need to provide separate dashboard results for GPU tests
        https://bugs.webkit.org/show_bug.cgi?id=48687

        Modify the steps to upload the JSON files to the dashboards so
        that the GPU tests don't conflict with the regular tests on a
        port. We do this by modifying the --builder-name parameter to
        append " - GPU", which should cause the app to treat the results
        as a completely new builder. This is a little non-obvious, but
        keeps us from having to restructure the app.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-29  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] add debug logging to help diagnose flakiness dashboard issues
        https://bugs.webkit.org/show_bug.cgi?id=48657

        The appengine app thinks it's getting empty files uploaded. Add some logging
        to see if new-run-webkit-tests agrees.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium/DRT] Add master-name flag to new-run-webkit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=48649

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added flag.

2010-10-29  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        Enable popup window in GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=48335

        The GtkLauncher application does not support opening new window when
        a link with "target=_blank" is clicked or similar call to
        window.open(). Instead, GtkLauncher does nothing which breaks
        navigation of some websites.

        * GtkLauncher/main.c:
        (activate_uri_entry_cb):
        (update_title):
        (link_hover_cb):
        (notify_title_cb):
        (notify_load_status_cb):
        (notify_progress_cb):
        (destroy_cb):
        (go_back_cb):
        (go_forward_cb):
        (create_web_view_cb):
        (web_view_ready_cb):
        (close_web_view_cb):
        (create_browser):
        (create_statusbar):
        (create_toolbar):
        (create_window):
        (main):

2010-10-29  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style about WebKit2's idiosyncracies

        Fixes <http://webkit.org/b/48638> Style bot complains about a number
        of WebKit2 conventions

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/style/checker.py: Excluded some rules for various
        WebKit2-related files. Also updated the excluded rules for
        WebKitAPITest to match the current code.

2010-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Roben and David Kilzer.

        Fix and cleanup of build systems
        https://bugs.webkit.org/show_bug.cgi?id=48342

        * Scripts/build-webkit:
         - Remove unnecessary ENABLE_SANDBOX option.
         - Add ENABLE_FULLSCREEN_API option.

2010-10-28  Adam Roben  <aroben@apple.com>

        Switch the Windows WebKit2 bot to the Release configuration

        We only have one machine testing WebKit2 on Windows right now, and
        Debug is just too slow for it to keep up.

        Fixes (hopefully!) <http://webkit.org/b/48615> Windows WebKit2 bot is
        always way behind

        Reviewed by Jon Honeycutt.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2010-10-29  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Added a second parameter to setMockSpeechInputResult for
        the language used in speech input.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        (LayoutTestController::pageSizeAndMarginsInPixels):

2010-10-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] add a result-small.json file for the test dashboard
        https://bugs.webkit.org/show_bug.cgi?id=48547

        Output both a results.json file and a results-small.json file.
        The dashboard will load results-small.json by default so it loads faster.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:
        Added a bunch of sys.path hackery. Unforunately, this uses hardcoded
        paths. That obviously needs to be fixed, but at least this way it
        clearly documents what paths are necessary.

2010-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch upload calls changed_files more often than it should
        https://bugs.webkit.org/show_bug.cgi?id=48567

        Passing changed_files around everywhere isn't a very elegant solution
        but it's the one we have for the moment.  I think keeping an explicit
        cache on Checkout (or making StepState() a real class) is a better
        long-term option.

        Previously bug_id_for_this_commit was calling changed_files and the
        result was never getting cached on the state.  Now we're explicitly
        caching the result on the state and passing that to the bug_id_for_this_commit call.

        I looked into building unit tests for this.  Doing so would require
        using a real Checkout object with a MockSCM and overriding the appropriate
        calls on SCM to count how often we're stating the file system.
        That's a useful set of tests to build for a separate change.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make suggest-reviewers slightly faster
        https://bugs.webkit.org/show_bug.cgi?id=48562

        Add @memoized to one more common call.

        * Scripts/webkitpy/common/checkout/api.py:

2010-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch suggest-reviewers -g 260550a6e30b7bf34f16bdb4a5396cf26264fc1c is still very slow
        https://bugs.webkit.org/show_bug.cgi?id=48536

        This patch makes it about 40 seconds faster, but it still
        takes 1:40.  This will require more refinement.

        The suggested reviewers list appears to be the same.

        I think the next step may be to have it stop the search after
        5 reviewers are found.  We never want to suggest 30 people.

        * Scripts/webkitpy/common/checkout/scm.py:
         - Using --remove-empty to theoretically stop lookups past
           when a file is removed.  I'm not entirely clear that the option
           does what it says it does.  Example:
           git log --pretty=format:%H -5 --remove-empty -- /Projects/WebKit/WebCore/platform/wx/SearchPopupMenuWx.h
           returns only one commit
           vs.
           git log --pretty=format:%H -5 -- /Projects/WebKit/WebCore/platform/wx/SearchPopupMenuWx.h
           which returns 5.  I was not aware that wx files were ever removed from the repository?

2010-10-28  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        [Chromium] Support FileSystem in chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=47643

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::openFileSystem): Added.
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::openFileSystem): Added.

2010-10-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WKURLRefs should be allowed to be null
        <rdar://problem/8575621>
        https://bugs.webkit.org/show_bug.cgi?id=48535

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::didStartProvisionalLoadForFrame):
        (TestWebKitAPI::didCommitLoadForFrame):
        (TestWebKitAPI::didFinishLoadForFrame):
        Test that URLs are null pointers when unset.

2010-10-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adele Peterson.

        AX: multi select group option does not handle setting of AXSelectedChildren correctly
        https://bugs.webkit.org/show_bug.cgi?id=48464

        Add support for querying information about selected children to DRT, including:
           selectedChildAtIndex
           selectedChildrenCount
           setSelectedChild

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (selectedChildAtIndexCallback):
        (setSelectedChildCallback):
        (selectedChildrenCountCallback):
        (AccessibilityUIElement::setSelectedChild):
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::selectedChildAtIndex):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::selectedChildAtIndex):
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::setSelectedChild):

2010-10-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WebKit2 API for window feature getter/setters
        <rdar://problem/8590373>
        https://bugs.webkit.org/show_bug.cgi?id=48496

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):

2010-10-28  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Tony Chang.

        Added support for the DumpRenderTree flags --multiple-loads and --js-flags to the Python test runner.
        https://bugs.webkit.org/show_bug.cgi?id=48236

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-28  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] WebKitWebFrame's load-status is not properly notified to the tests
        https://bugs.webkit.org/show_bug.cgi?id=48048

        DRT now listens to WebKitWebFrame load-status signals for each
        created frame instead of the load-status signal of the
        WebKitWebView that only notifies about changes in the main frame.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewLoadFinished):
        (webFrameLoadStatusNotified):
        (frameCreatedCallback):
        (createWebView):
        (main):

2010-10-28  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] fix textInputController.{selectedRange,markedRange}
        https://bugs.webkit.org/show_bug.cgi?id=48487

        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::markedRange): Return arrays of ints, rather than a string
        (TextInputController::selectedRange): Ditto.

2010-10-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] add a master-name flag to new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=48488

        The test results server now allows adding a master name to
        the uploaded files. This lets us distinguish bots that have
        the same name, but are on different masters.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-28  Adam Roben  <aroben@apple.com>

        Don't append a newline to the test output if the frame has no document
        element in WebKitTestRunner

        Fixes <http://webkit.org/b/48526> Extra trailing newline when running
        plugins/document-open.html in WebKitTestRunner

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::toJS): Added. Turns a UTF-8 C string into a JSStringRef.
        (WTR::hasDocumentElement): Added. Uses the JSC API to figure out
        whether the frame has a document element.
        (WTR::dumpFrameText): Match DRT by bailing (rather than appending an
        empty string and a newline) if the frame has no document element.

2010-10-28  Adam Roben  <aroben@apple.com>

        Skip npn-invalidate-rect-invalidates-window.html on headless XP
        machines

        TestNetscapePlugIn never receives a WM_PAINT message on headless XP
        machines, so this test times out. Fixing the test is covered by
        <http://webkit.org/b/48333>.

        * Scripts/old-run-webkit-tests: Skip
        npn-invalidate-rect-invalidates-window.html on Windows if accelerated
        compositing support is disabled, which likely means we're on a headless
        XP machine.

2010-10-28  Kimmo Kinnunen  <kimmok@iki.fi>

        Adding myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2010-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch suggest-reviewers -g 260550a6e30b7bf34f16bdb4a5396cf26264fc1c is very slow
        https://bugs.webkit.org/show_bug.cgi?id=48500

        This doesn't fix the problem, but it makes things slightly better.
        Each git svn find-rev call takes about .25 seconds on my desktop.
        This patch uses a new memoized class to avoid those calls when possible.

        The real slowness is still git log on some files, like:
        git log --pretty=format:%H -5 -- /Projects/WebKit/WebCore/platform/wx/SearchPopupMenuWx.h
        I'm not yet sure how to make the pathological git logs better.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/memoized.py: Added.
        * Scripts/webkitpy/common/memoized_unittest.py: Added.

2010-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        EWS bots should not use --quiet when running build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=48482

        --quiet is only correct when the sub-process does the error reporting.
        In the case of _can_build() the parent process is reporting the error.
        We'd like the full build log at queues.webkit.org so someone can look
        at the log and understand why the EWS is failing to build trunk.

        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-27  Brian Weinstein  <bweinstein@apple.com>

        More Windows build fixage. Rename a variable that was named string.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::hasPrefix):

2010-10-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Make the test results server store which master the bot is on
        https://bugs.webkit.org/show_bug.cgi?id=48478

        The chromium bots recently changed so that there are multiple slaves with
        the same name on different masters. Up till now, the test results server
        assumed slave names were unique. Adds a master field to the file in order
        to distinguish.

        Also, for files that currently lack a master or testtype, set them appropriately.

        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/index.yaml:
        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/testfile.py:
        * TestResultServer/templates/showfilelist.html:
        * TestResultServer/templates/uploadform.html:

2010-10-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.dumpBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42322
        rdar://problem/8193631

        WebKitTestRunner needs to support layoutTestController.clearBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42333
        rdar://problem/8193643

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        Renamed the product to WebKitTestRunnerInjectedBundle to avoid
        name conflicts in the build directory.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added dumpBackForwardList and clearBackForwardList.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle): Removed initialization of m_mainPage.
        (WTR::InjectedBundle::didCreatePage): Removed unneeded underscore.
        (WTR::InjectedBundle::willDestroyPage): Ditto.
        (WTR::InjectedBundle::didReceiveMessage): Ditto.
        (WTR::InjectedBundle::initialize): Ditto.
        (WTR::InjectedBundle::didCreatePage): Changed code to use m_pages
        instead of m_mainPage and m_otherPages.
        (WTR::InjectedBundle::willDestroyPage): Ditto.
        (WTR::InjectedBundle::page): Ditto.
        (WTR::InjectedBundle::beginTesting): Ditto.
        (WTR::InjectedBundle::done): Ditto.
        (WTR::InjectedBundle::closeOtherPages): Ditto.
        (WTR::InjectedBundle::dumpBackForwardListsForAllPages): Added.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Changed
        page function to longer be inline, and pageCount function
        to use m_pages. Added dumpBackForwardListsForAllPages, and
        removed some underscores. Replaced m_mainPage and m_otherPageas
        with m_pages.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::adoptWK): Added.
        (WTR::hasPrefix): Added.
        (WTR::InjectedBundlePage::reset): Added code to set up
        m_previousTestBackForwardListItem.
        (WTR::InjectedBundlePage::dump): Added code to call
        dumpBackForwardListsForAllPages.
        (WTR::compareByTargetName): Added.
        (WTR::dumpBackForwardListItem): Added.
        (WTR::InjectedBundlePage::dumpBackForwardList): Added.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Added
        dumpBackForwardList and m_previousTestBackForwardListItem.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize
        m_shouldDumpBackForwardListsForAllWindows to false.
        (WTR::LayoutTestController::clearBackForwardList): Added.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Added dumpBackForwardList, clearBackForwardList,
        shouldDumpBackForwardListsForAllWindows, and
        m_shouldDumpBackForwardListsForAllWindows.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Set up
        didReceiveSynchronousMessageFromInjectedBundle.
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        Added.
        * WebKitTestRunner/TestController.h: Ditto.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        Added.
        * WebKitTestRunner/TestInvocation.h: Ditto.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Renamed bundle to WebKitTestRunnerInjectedBundle (see above).
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::initializeInjectedBundlePath): Ditto.

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Marrin.

        Add ENABLE_WEB_AUDIO feature enable flag (initially disabled) to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=48279

        * Scripts/build-webkit:

2010-10-27  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        build-webkit should collect Visual Studio Express logs and display them
        https://bugs.webkit.org/show_bug.cgi?id=39199

        It turns out my previous patch wasn't actually working on the win-ews
        machine.  So I've fixed my mistakes from before.

        * Scripts/build-webkit:
         - Windows VSE builds change the CWD while building.  Why?  Who knows.
        * Scripts/print-vse-failure-logs:
         - windows VSE builds don't use Debug/Release as I expected, so I've
           moved off of --configuration to --top-level and added the /obj
           optimization while I was there.

2010-10-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r70674.
        http://trac.webkit.org/changeset/70674
        https://bugs.webkit.org/show_bug.cgi?id=48053

        Broke Chromium Windows build.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-25  Tony Chang  <tony@chromium.org>

        Reviewed by Anders Carlsson.

        compile TestNetscapePlugIn on chromium linux
        https://bugs.webkit.org/show_bug.cgi?id=48274

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_Initialize): On Linux, plugin funcs are set in initialize.
        (NPP_New): Mark the plugin as windowless.
        (NPP_GetValue): Handle mime type values.
        (NP_GetMIMEDescription):
        (NP_GetValue):
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: define TRUE and FALSE, which are in webkit's npapi.h.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Pull in npapi.h to get TRUE/FALSE (matches webkit's npfunctions.h)

2010-10-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Anders Carlsson.

        Remove contentSizeChanged callbacks as it is no longer
        part of the public UIClient.

        Make WKPageContentsSizeChangedCallback be a private API
        https://bugs.webkit.org/show_bug.cgi?id=48409

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):

2010-10-27  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        Make http locking default in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=48053

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-27  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Fix http lock on Windows platform
        https://bugs.webkit.org/show_bug.cgi?id=48321

        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-10-27  Satish Sampath  <satish@chromium.org>

        Unreviewed, rolling out r70665.
        http://trac.webkit.org/changeset/70665
        https://bugs.webkit.org/show_bug.cgi?id=47089

        Need to address Alexey's review comments.

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-27  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Added a second parameter to setMockSpeechInputResult for
        the language used in speech input.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        (LayoutTestController::pageSizeAndMarginsInPixels):

2010-10-27  Adam Roben  <aroben@apple.com>

        Reset TestNetscapePlugIn's NPP_GetValue pointer when
        NullNPPGetValuePointer finishes running

        Fixes <http://webkit.org/b/48435> REGRESSION (r70655): Many plugins
        tests are failing on Qt

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_Destroy):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Added a do-nothing NPP_Destroy implementation.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NullNPPGetValuePointer.cpp:
        (NullNPPGetValuePointer::NullNPPGetValuePointer): Save the original
        NPP_GetValue pointer in m_originalNPPGetValuePointer so we can restore
        it later.
        (NullNPPGetValuePointer::NPP_Destroy): Added. Restores the original
        NPP_GetValue pointer so it can be used in other tests.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_Destroy):
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_destroy_instance):
        Call through to the PluginTest when NPP_Destroy is called.

2010-10-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2 shouldn't try to send an empty user agent
        https://bugs.webkit.org/show_bug.cgi?id=48397
        
        Add a test that when we set our custom user agent to an empty string, we don't send
        an empty user agent.

        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp: Added.
        (TestWebKitAPI::didRunJavaScript): Make sure that the result of navigator.userAgent isn't empty.
        (TestWebKitAPI::TEST): Set our custom user agent to the empty string, and run navigator.userAgent.
        
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add the new file.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Ditto.

2010-10-27  Adam Roben  <aroben@apple.com>

        Check in file I forgot in r70653

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (NP_Initialize): Save the NPPluginFuncs struct the browser passed to us
        so we can be naughty and modify it later.

2010-10-27  Adam Roben  <aroben@apple.com>

        Test that WebKit doesn't crash if the plugin passes 0 for its
        NPP_GetValue pointer

        Test for <http://webkit.org/b/48433> Crash in
        NetscapePlugin::shouldLoadSrcURL when using Shockwave Director 10.3 in
        WebKit2 on Windows

        Reviewed by Eric Carlson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Added NullNPPGetValuePointer.cpp.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        Set up a place to store the NPPluginFuncs struct the browser passed to us.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NullNPPGetValuePointer.cpp: Added.
        (NullNPPGetValuePointer::NullNPPGetValuePointer): Null out the
        NPP_GetValue pointer we passed to the browser to simulate a plugin that
        doesn't implement NPP_GetValue.
        (NullNPPGetValuePointer::NPP_GetValue): Print an error message. If this
        function is called, it means that WebKit has changed in a way that
        makes this test invalid.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_GetEntryPoints): Save the NPPluginFuncs struct the browser passed
        to us so we can be naughty and modify it later.

2010-10-27  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        Remove references to ancient QGVLauncher and QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=48430

        QtTestBrowser substitutes both and has checks enabled.

        * Scripts/webkitpy/style/checker.py: remove references
        * Scripts/webkitpy/style/checker_unittest.py: ditto

2010-10-27  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        [NRWT] Don't use image hash when it's no need in single test mode.
        https://bugs.webkit.org/show_bug.cgi?id=48326

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:

2010-10-27  David Kilzer  <ddkilzer@apple.com>

        Fix leak of CFMutableDictionaryRef in createXMLStringFromWebArchiveData()

        Reviewed by Adam Roben.

        Follow-up fix for: <https://bugs.webkit.org/show_bug.cgi?id=48278>

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (createXMLStringFromWebArchiveData): Use RetainPtr<> to fix a
        leak introduced in r70613.

2010-10-27  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [NRWT] Add platform specific baseline search paths for Qt port
        https://bugs.webkit.org/show_bug.cgi?id=48428

        * Scripts/webkitpy/layout_tests/port/qt.py:

2010-10-27  Adam Roben  <aroben@apple.com>

        Catch exceptions when checking if we're inside a git working directory

        Fixes <http://webkit.org/b/48420> REGRESSION (r70562): test-webkitpy
        fails on systems without git installed

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials._credentials_from_git): Put the call to
        Git.in_working_directory inside the try/except since it, too, attempts
        to execute git and thus will throw on systems that don't have git
        installed.

2010-10-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by David Kilzer.

        Convert DumpRenderTree webarchive code to CoreFoundation
        https://bugs.webkit.org/show_bug.cgi?id=48278

        CFPropertyListCreateWithData and CFPropertyListCreateData are only available in 10.6+.
        Replace CFPropertyListCreateWithData by a combination of CFReadStreamCreateWithBytesNoCopy and CFPropertyListCreateFromStream.
        Replace CFPropertyListCreateData by CFPropertyListCreateXMLData.

        These changes are wrapped in BUILDING_ON_LEOPARD, as the methods are deprecated on 10.6+.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (createXMLStringFromWebArchiveData):

2010-10-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        Remove the absolute path used to include DumpRenderTreeSupportGtk.h from LayoutTestController.h

        It turns out this is rather unneeded since WebKitTools/GNUMakefile.am has WebKit/gtk/ in its include
        path, and then we can just do #include "WebCoreSupport/DumpRenderTreeSupportGtk.h"

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        Rename WebArchiveDumpSupport.mm to WebArchiveDumpSupport.cpp

        Reviewed by Adam Roben.

        Part 4 of 4: <http://webkit.org/b/48278> Convert DumpRenderTree webarchive code to CoreFoundation

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Updated for file moves and renames.
        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp: Renamed from DumpRenderTree/mac/WebArchiveDumpSupport.mm.
        * DumpRenderTree/cf/WebArchiveDumpSupport.h: Renamed from DumpRenderTree/mac/WebArchiveDumpSupport.h.

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        Convert WebArchiveDumpSupport.mm from NS objects to CF types

        Reviewed by Adam Roben.

        Part 3 of 4: <http://webkit.org/b/48278> Convert DumpRenderTree webarchive code to CoreFoundation

        In order to share WebArchive code between the Mac and Windows
        ports, the code in WebArchiveDumpSupport.mm was converted from
        Cocoa to C++ using CoreFoundation (CF) types.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Renamed serializeWebArchiveToXML() to
        createXMLStringFromWebArchiveData() and added HardAutorelease()
        to prevent leaks.
        * DumpRenderTree/mac/WebArchiveDumpSupport.h:
        (createXMLStringFromWebArchiveData): Renamed from
        serializeWebArchiveToXML().  Changed to use CF types.
        (createCFURLResponseFromResponseData): Renamed from
        unarchiveNSURLResponseFromResponseData().  Changed to use CF
        types for its parameter and return type.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm: Replaced use of
        NS objects with CF types.  It will be renamed to *.cpp in a
        future commit.
        (convertMIMEType): Changed to use case-insensitive string
        comparisons.
        (convertWebResourceDataToString):
        (normalizeHTTPResponseHeaderFields):
        (normalizeWebResourceURL):
        (convertWebResourceResponseToDictionary):
        (compareResourceURLs):
        (createXMLStringFromWebArchiveData):
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm:
        (createCFURLResponseFromResponseData): Renamed from
        unarchiveNSURLResponseFromResponseData().  Changed to use CF
        types for its parameter and return type.

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        Extract use of NSKeyedUnarchiver from WebArchiveDumpSupport.mm

        Reviewed by Adam Roben.

        Part 2 of 4: <http://webkit.org/b/48278> Convert DumpRenderTree webarchive code to CoreFoundation

        There is no equivalent to NSKeyedUnarchiver in CoreFoundation,
        so extract it into a platform-specific source file.

        * DumpRenderTree/mac/WebArchiveDumpSupport.h:
        (unarchiveNSURLResponseFromResponseData): Added declaration.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm:
        (convertWebResourceResponseToDictionary): Extracted code to
        unarchiveNSURLResponseFromResponseData() in
        WebArchiveDumpSupportMac.mm.  Updated logic to return early if
        nil is returned from unarchiveNSURLResponseFromResponseData().
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm:
        (unarchiveNSURLResponseFromResponseData): Added.  Extracted
        code from convertWebResourceResponseToDictionary() in
        WebArchiveDumpSupport.mm.

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        Extract call to -[WebHTMLRepresentation supportedNonImageMIMETypes] from WebArchiveDumpSupport.mm

        Reviewed by Adam Roben.

        Part 1 of 4: <http://webkit.org/b/48278> Convert DumpRenderTree webarchive code to CoreFoundation

        The call to -[WebHTMLRepresentation supportedNonImageMIMETypes]
        is not cross-platform between Mac and Windows, so extract it
        into a platform-specific source file.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added
        WebArchiveDumpSupportMac.mm to the project.
        * DumpRenderTree/mac/WebArchiveDumpSupport.h:
        (supportedNonImageMIMETypes): Added declaration.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm:
        (convertWebResourceDataToString): Replaced call to
        -[WebHTMLRepresentation supportedNonImageMIMETypes] with
        supportedNonImageMIMETypes().
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm: Added.
        (supportedNonImageMIMETypes): Added.  Extracted from
        WebArchiveDumpSupport.mm.

2010-10-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [GTK] Implement DumpRenderTreeSupportGtk (similarly to DumpRenderTreeSupportQt idea)
        https://bugs.webkit.org/show_bug.cgi?id=48199

        Implements support to WebKitTabToLinksPreferenceKey through LayoutTestController::overridePreference.
        The corresponding DumpRenderTreeSupportGtk method is called in the DRT context only.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        (createWebView):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference):

2010-10-26  Ariya Hidayat  <ariya@sencha.com>

        Unreviewed, change the order of my emails for bugzilla autocompletion.

        * Scripts/webkitpy/common/config/committers.py:

2010-10-26  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        build-webkit should collect Visual Studio Express logs and display them
        https://bugs.webkit.org/show_bug.cgi?id=39199

        * Scripts/build-webkit:
        * Scripts/print-vse-failure-logs: Added.
        * Scripts/webkitdirs.pm:

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48224> build-webkit: add support for --meter-tag switch

        Reviewed by Csaba Osztrogonác.

        * Scripts/build-webkit: Added support for --meter-tag switch.
        It should have been added with r60820.

2010-10-26  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Dumitru Daniliuc.

        check-webkit-style fails on operator+=, operator-=, ... methods
        https://bugs.webkit.org/show_bug.cgi?id=48258

        * Scripts/webkitpy/style/checkers/cpp.py: Added exceptions
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added unit-tests

2010-10-26  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        remove DEFER support from new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=48387

        DEFER was needed when we were trying to ship Chrome beta.
        Now it's just extra complication.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2010-10-26  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Adding import with_statement to fix python 2.5.

        Teach webkit-patch how to read credentials from the environment
        https://bugs.webkit.org/show_bug.cgi?id=48275

        * Scripts/webkitpy/common/net/credentials_unittest.py:
         - import with_statement to fix python 2.5.

2010-10-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=48375
        <rdar://problem/8392724> Need delegate calls in PageLoaderClient to indicate if we have
        loaded insecure content

        Updated for WebKit2 changes.

        * MiniBrowser/mac/BrowserWindowController.m:
        (didDisplayInsecureContentForFrame):
        (didRunInsecureContentForFrame):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didDisplayInsecureContentForFrame):
        (WTR::InjectedBundlePage::didRunInsecureContentForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-10-26  Adam Roben  <aroben@apple.com>

        Clear up confusion between "3D rendering" and "accelerated compositing"

        WebKit has no software-based 3D rendering implementation, so 3D
        rendering can only be enabled when accelerated compositing is. But DRT
        was falsely reporting that 3D rendering was available on machines that
        don't support accelerated compositing, leading to much confusion.

        Reviewed by Darin Adler.

        Fixes <http://webkit.org/b/48370> REGRESSION (r70540): Many
        transforms/3d tests are failing on the XP bots

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): When ENABLE(3D_RENDERING) is turned on, only report that 3D
        rendering is available when acclerated compositing is also available.

        * Scripts/old-run-webkit-tests: Skip tests that use the
        -webkit-transform-3d media query when 3D rendering is disabled,
        rather than when accelerated compositing is disabled.

2010-10-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        Remove rietveld code now that it's unused
        https://bugs.webkit.org/show_bug.cgi?id=48359

        Was cool that we added this support, but now that it's
        not used it makes little sense to keep it around.
        We can always restore this code from SVN if we need it.

        * Scripts/webkitpy/common/config/__init__.py:
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/common/net/rietveld.py: Removed.
        * Scripts/webkitpy/common/net/rietveld_unittest.py: Removed.
        * Scripts/webkitpy/thirdparty/__init__.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/postcodereview.py: Removed.

2010-10-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        pageDidScroll callback should be on the UI process client rather than (or in addition to) the web process client
        https://bugs.webkit.org/show_bug.cgi?id=48366
        <rdar://problem/8595202>

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):

2010-10-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        Teach webkit-patch how to read credentials from the environment
        https://bugs.webkit.org/show_bug.cgi?id=48275

        This makes it possible for svn users to have their bugzilla credentials
        stored in their environment instead of typing them every time.

        We need this for making it easy to run the win-ews bot (which currently
        uses svn instead of git).

        * Scripts/webkitpy/common/net/credentials.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:

2010-10-26  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        Input Method inserts conversion candidates unexpectedly
        https://bugs.webkit.org/show_bug.cgi?id=46868

        Adds setComposition() to TextInputController to make DRT emulate
        an input method behavior.

        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::TextInputController):
        (TextInputController::setComposition): Added.
        * DumpRenderTree/chromium/TextInputController.h:

2010-10-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Support layoutTestController.layerTreeAsText in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42145
        
        Implement layerTreeAsText() in WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::layerTreeAsText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-10-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch rollout produces incorrect patch when using svn move
        https://bugs.webkit.org/show_bug.cgi?id=48244

        We need to flush our caches when we modify the working copy.

        * Scripts/webkitpy/tool/steps/revertrevision.py:

2010-10-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue flaky test message can list the same author more than once
        https://bugs.webkit.org/show_bug.cgi?id=48268

        tonikitoo reported to me over IRC this morning that he's seen
        the commit-queue report flaky tests with author lists like:
        "adam, adam and adam", suggesting we're not uniquing authors
        before writing the message.

        I fixed the uniquing and added a bunch more unit testing.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-26  Adam Roben  <aroben@apple.com>

        Pull in the FeatureDefines*.vsprops files when building DRT

        This ensures that various ENABLE() macros will get set correctly.
        (Prior to r70320 we were picking up the ENABLE(3D_RENDERING) flag
        through wtf/Platform.h.)

        Fixes <http://webkit.org/b/48343> REGRESSION (r70320): DumpRenderTree
        says 3D_RENDERING is disabled even when it is enabled

        Reviewed by Ada Chan.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Added
        FeaturesDefines*.vsprops to all configurations.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Touched to force a rebuild.

2010-10-26  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added options --multiple-loads and --js-flags to chromium DumpRenderTree. The option --multiple-loads=X
        is used to have DumpRenderTree load each test it runs X times. To be able to have more fine-grained control
        of how the JavaScript engine behaves for each load the flag --js-flags can specify a list of flag-sets like this

          --js-flags="--xxx,--noxxx --yyy,--noyyy"

        First load will run with --xxx, the second with --yyy and the third without any (the 'no' prefix is handled by
        V8 to turn off the flag).

        The changes to the Python test runner will be in a separate change.


        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest):
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::runFileTest):
        (TestShell::testFinished):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::loadCount):
        (TestShell::setLoadCount):
        (TestShell::javaScriptFlagsForLoad):
        (TestShell::setJavaScriptFlags):
        (TestShell::setDumpWhenFinished):

2010-10-26  Adam Roben  <aroben@apple.com>

        Skip more tests that depend on accelerated compositing when accelerated
        compositing is disabled

        Fixes <http://webkit.org/b/48329> Some tests fail when accelerated
        compositing is disabled

        Reviewed by John Sullivan.

        * Scripts/old-run-webkit-tests: Added more tests to skip when
        accelerated compositing is disable. The tests all have output that
        changes depending on whether accelerated compositing is enabled.

2010-10-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch should clean up svn locks when passed --force-clean
        https://bugs.webkit.org/show_bug.cgi?id=48269

        * Scripts/webkitpy/common/checkout/scm.py:

2010-10-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a pageDidScroll BundleUIClient callback
        https://bugs.webkit.org/show_bug.cgi?id=48260
        <rdar://problem/8531159>

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2010-10-25  Johnny Ding  <jnd@chromium.org>

        Reviewed by Tony Chang.

        Dump the gesture status of frame in frame load callbacks in DumpRenderTree
        by adding a new method dumpUserGestureInFrameLoadCallbacks.
        Now only dump the gesture status in "DidStartProvisionalLoad" callback.
        https://bugs.webkit.org/show_bug.cgi?id=47849

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpUserGestureInFrameLoadCallbacksCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpUserGestureInFrameLoadCallbacks):
        (LayoutTestController::setDumpUserGestureInFrameLoadCallbacks):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpUserGestureInFrameLoadCallbacks):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldDumpUserGestureInFrameLoadCallbacks):
        (LayoutTestController::setShouldDumpUserGestureInFrameLoadCallbacks):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::shouldDumpUserGestureInFrameLoadCallbacks):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didStartProvisionalLoad):
        (WebViewHost::printFrameUserGestureStatus):
        * DumpRenderTree/chromium/WebViewHost.h:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[WebFrame _drt_printFrameUserGestureStatus]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpUserGestureInFrameLoadCallbacks):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70442.
        http://trac.webkit.org/changeset/70442
        https://bugs.webkit.org/show_bug.cgi?id=48248

        http locking doesn't work on Windows (Requested by Ossy on
        #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-25  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        Make http locking default in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=48053

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-25  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48185> build-webkit: add support for --progress-tag switch
        (Re-landing r70413 after Qt minimal buildfix: r70440.)

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/build-webkit: Added support for --progress-tag switch.
        It should have been added with r57051.

2010-10-24  Adam Barth  <abarth@webkit.org>

        Reviewed by David Kilzer.

        webkit-patch upload fails when the patch removes a file
        https://bugs.webkit.org/show_bug.cgi?id=48187

        We need to use "--" to separate file names from the rest of the
        command.

        * Scripts/webkitpy/common/checkout/scm.py:

2010-10-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70413.
        http://trac.webkit.org/changeset/70413
        https://bugs.webkit.org/show_bug.cgi?id=48210

        It broke Qt minimal build (Requested by Ossy on #webkit).

        * Scripts/build-webkit:

2010-10-24  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][QtTestBrowser] Toggle use of QGraphicsView messes up the menu
        https://bugs.webkit.org/show_bug.cgi?id=48141

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        (LauncherWindow::initializeView):
        (LauncherWindow::toggleWebView):

2010-10-24  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        Fix Perl uninitialized warnings in VCSUtils::svnStatus()
        and VCSUtils::removeEOL().
        https://bugs.webkit.org/show_bug.cgi?id=48196

        VCSUtils::svnStatus() concatenates the output of svn status with
        a new line character and svn status may return no output (say for
        a file that has not been added, deleted, or modified). We should
        only concatenate the output of svn status if there is some.

        Also, VCSUtils::removeEOL() should ensure that its argument
        is initialized before performing a string substitution.

        * Scripts/VCSUtils.pm:
          - Modified removeEOL() to return "" if its argument is undefined.
          - Exported removeEOL() so that it can be tested. 
        * Scripts/webkitperl/VCSUtils_unittest/removeEOL.pl: Added.

2010-10-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48185> build-webkit: add support for --progress-tag switch

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/build-webkit: Added support for --progress-tag switch.
        It should have been added with r57051.

2010-10-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48184> build-webkit: reformat support variables for better maintainability

        Reviewed by Daniel Bates.

        * Scripts/build-webkit: Alphabetized the @features array based
        on the name of the feature.  Reformatted the list of support
        variables so that they match the order of @features, and so that
        each has its own line.  This makes it easy to add new variables
        in the correct order.

2010-10-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS never removes invalid patch ids
        https://bugs.webkit.org/show_bug.cgi?id=48173

        This is just sticking another finger in the dam.
        However this adds more unit testing which will help
        us make sure we're always releasing patches once we
        redesign the release_patch API and call these from
        a more central place.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
         - Added the ability to request invalid patches.
           Log a warning message to make sure we don't ever have
           tests use invalid patch fetches by mistake.

2010-10-23  Dan Bernstein  <mitz@apple.com>

        Build fix. Add stub implementations for required NSDraggingInfo methods.

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo draggingFormation]):
        (-[DumpRenderTreeDraggingInfo setDraggingFormation:]):
        (-[DumpRenderTreeDraggingInfo animatesToDestination]):
        (-[DumpRenderTreeDraggingInfo setAnimatesToDestination:]):
        (-[DumpRenderTreeDraggingInfo numberOfValidItemsForDrop]):
        (-[DumpRenderTreeDraggingInfo setNumberOfValidItemsForDrop:]):
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):

2010-10-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48186> Remove unneeded WebHTMLRepresentationInternal.h header

        Reviewed by Sam Weinig.

        The only method defined in WebHTMLRepresentationInternal.h is
        also defined in WebHTMLRepresentation.h, so use that instead.

        * DumpRenderTree/mac/InternalHeaders/WebKit/WebHTMLRepresentationInternal.h: Removed.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm: Switched to use
        WebHTMLRepresentation.h.

2010-10-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70367.
        http://trac.webkit.org/changeset/70367
        https://bugs.webkit.org/show_bug.cgi?id=48176

        It made 8-10 tests crash on Qt bot (Requested by Ossy on
        #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (setCustomPolicyDelegateCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setCustomPolicyDelegate):
        * DumpRenderTree/mac/PolicyDelegate.h:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        (-[PolicyDelegate setPermissive:]):
        (-[PolicyDelegate setControllerToNotifyDone:]):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setCustomPolicyDelegate):

2010-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS never releases patches which fail to apply
        https://bugs.webkit.org/show_bug.cgi?id=48171

        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2010-10-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Make the EWS queues restart themselves more often.
        This matches the commit-queue.

        * EWSTools/start-queue.sh:

2010-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should not pass --quiet to subcommands now that the parent command does the reporting
        https://bugs.webkit.org/show_bug.cgi?id=48165

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-22  Mario Sanchez Prada  <msanchez@igalia.com>

        Adding myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2010-10-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Barth and Darin Adler.

        Using the decidePolicyForMIMEType delegate message in an asynchronous manner does not work
        https://bugs.webkit.org/show_bug.cgi?id=48014
        <rdar://problem/8202716>
        
        * DumpRenderTree/LayoutTestController.cpp:
        (setCustomPolicyDelegateCallback):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setCustomPolicyDelegate):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

        * DumpRenderTree/mac/PolicyDelegate.h:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]):
        If _callIgnoreInDecidePolicyForMIMETypeAfterOneSecond is true, call [listener ignore] after one second.

        (-[PolicyDelegate setCallIgnoreInDecidePolicyForMIMETypeAfterOneSecond:]):
        Update _callIgnoreInDecidePolicyForMIMETypeAfterOneSecond.
        
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

2010-10-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Rename the InjectedBundle for TestWebKitAPI to InjectedBundleTestWebKitAPI.bundle

        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::createInjectedBundlePath):

2010-10-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        test-webkitpy fails when passed -v (or any other option)

        Fix port/base_unittest to pass an explicit list of arguments
        rather than accidentally picking up sys.argv.

        https://bugs.webkit.org/show_bug.cgi?id=48071

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2010-10-22  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix. Update the createNewPage callback to account for the new
        arguments.

        * MiniBrowser/win/BrowserView.cpp:
        (createNewPage):

2010-10-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs to pass the current event modifier flags when requesting a new window
        https://bugs.webkit.org/show_bug.cgi?id=48140

        * MiniBrowser/mac/BrowserWindowController.m:
        (createNewPage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        Update for new signature for the WKPageCreateNewPageCallback.

2010-10-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just adding a test case.

        The style-queue was not recognizing new patches.  It turns
        out I had fixed this in an earlier change, but just not
        deployed to queues.webkit.org.  As part of investigating why it
        was broken, I wrote a test for my previous change which I'm now landing.

        * QueueStatusServer/model/queues_unittest.py:

2010-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS does not need to process obsolete patches
        https://bugs.webkit.org/show_bug.cgi?id=48093

        This was an easy change, but to test it I had to pipe
        real Attachment objects into the queue testing system.
        Doing so revealed a whole bunch of bugs in our unit tests,
        which I fixed as part of this patch.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
         - This is the actual code change.  This will not reduce the
           backlog in the EWS queues much, but it will make rejections
           much quicker for obsolete patches or closed bugs.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
         - Test my new code.
         - Used a real attachment object and got rid of MockPatch
         - Shared code between the mac-ews and cr-mac-ews tests.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Can't use MockPatch anymore.
         - Removing MockPatch found more bugs here!
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
         - MockBugzilla should not be a "Mock" object.  Right now tool.bugs()
           is allowed, but wrong.  Making it not a Mock will make tool.bugs() correctly fail.

2010-10-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70301.
        http://trac.webkit.org/changeset/70301
        https://bugs.webkit.org/show_bug.cgi?id=48126

        "Lang attribute layout tests failing" (Requested by satish on
        #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-22  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Added a second parameter to setMockSpeechInputResult for
        the language used in speech input.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-21  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Win][DRT] should have LayoutTestController.hasSpellingMarker()
        https://bugs.webkit.org/show_bug.cgi?id=47885

        - Implemented LayoutTestController.hasSpellingMarker(),
        - Added fake spellcheck implementation.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/win/EditingDelegate.cpp:
        (indexOfFirstWordCharacter):
        (wordLength):
        (EditingDelegate::checkSpellingOfString):
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::hasSpellingMarker):

2010-10-21  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed. Re-enable test that was mistakenly disabled by r67974.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2010-10-21  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed fix for rebaseline-chromium-webkit-tests.

        Port.diff_image no longer has a tolerance parameter. Also, use
        get_option('tolerance') which is safer if the options object doesn't
        define a tolerance attribute (it doesn't for the one used in
        rebaseline_chromium_webkit_tests).

        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-10-21  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        Add support for --tolerance in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=47959
        
        Add support for the --tolerance flag in NRWT. The Port.diff_image
        signature shouldn't need a tolerance parameter (it's not set per test),
        just have ports that use it (currently only WebKitPort) read it from 
        the options object.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add --suggest-reviewers option to upload to auto-suggest reviewers for your patch
        https://bugs.webkit.org/show_bug.cgi?id=48088

        This is a first-pass.  Works, but we'll eventually
        turn this on by default, refine the suggestion algorithm
        and possibly move it to a different place in the upload step order.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-10-21  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Segfault while testing accessibility/iframe-bastardization.html
        https://bugs.webkit.org/show_bug.cgi?id=30123

        Check m_element before actually using it to get the parent.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::parentElement): Add an extra check to
        make sure m_element points to a valid value before actually using
        it to get the parent. Also, assert ATK_IS_OBJECT(m_element).

2010-10-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Crash evaluating JavaScript string that throws an exception
        https://bugs.webkit.org/show_bug.cgi?id=48092
        <rdar://problem/8487657>

        Add a test that evaluates a JavaScript string that throws an exception and check that 
        the callback is called.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp: Added.
        (TestWebKitAPI::didRunJavaScript):
        (TestWebKitAPI::WebKit2_EvaluateJavaScript):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2010-10-21  Adam Roben  <aroben@apple.com>

        Test that the plugin's HWND is invalidated when NPN_InvalidateRect is
        called

        Test for <http://webkit.org/b/48086> <rdar://problem/8482944>
        Silverlight doesn't repaint in WebKit2

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_InvalidateRect): Added. Calls through to the browser.
        (executeScript): Added. Asks the browser to evaluate the script.

        (PluginTest::waitUntilDone):
        (PluginTest::notifyDone):
        Added. Calls through to layoutTestController.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added
        * NPN_InvalidateRect and waitUntilDone/notifyDone.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/NPNInvalidateRectInvalidatesWindow.cpp: Added.
        (TemporaryWindowMover::moveSucceeded):
        (TemporaryWindowMover::TemporaryWindowMover):
        (TemporaryWindowMover::~TemporaryWindowMover):
        This class moves a window on-screen and shows it, then moves it back and hides it.

        (NPNInvalidateRectInvalidatesWindow::NPNInvalidateRectInvalidatesWindow):
        Initialize our members.
        (NPNInvalidateRectInvalidatesWindow::~NPNInvalidateRectInvalidatesWindow):
        Delete our window mover if it hasn't been deleted already.
        (NPNInvalidateRectInvalidatesWindow::NPP_SetWindow): Subclass the
        plugin HWND and move the test harness window on screen.
        (NPNInvalidateRectInvalidatesWindow::wndProc): Call through to onPaint
        when we get a WM_PAINT message.
        (NPNInvalidateRectInvalidatesWindow::onPaint): Do the test and tell
        LayoutTestController we're done.
        (NPNInvalidateRectInvalidatesWindow::testInvalidateRect): Validate
        ourselves, invalidate our lower-right quadrant via NPN_InvalidateRect,
        then check that our HWND's invalid region is the rect that we
        invalidated.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * Added NPNInvalidateRectInvalidatesWindow.

2010-10-21  Daniel Bates  <dbates@rim.com>

        Add Git-support to do-file-rename
        https://bugs.webkit.org/show_bug.cgi?id=48015

        Fix tools. Export function scmMoveOrRenameFile so that it can be called from
        do-file-rename and do-webcore-rename. I inadvertently left this out of the patch.

        * Scripts/VCSUtils.pm:

2010-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        mac-ews is not properly releasing patches
        https://bugs.webkit.org/show_bug.cgi?id=48076

        mac-ews overrides process_work_item, so it was not calling
        release_work_item like the default process_work_item would.
        To fix this I made all the status-reporting methods just
        release the patch.  I expect we'll iterate on this design further.

        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-18  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] mathml flaky tests after adding SystemFonts to the theme
        https://bugs.webkit.org/show_bug.cgi?id=47727

        The Fontconfig setup in the GTK+ now specifically checks for and
        loads the STIX fonts for MathML tests.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Add hooks for loading the STIX fonts specifically.

2010-10-20  Adam Roben  <aroben@apple.com>

        Test that the UI client gets notified when WKView receives a WM_CLOSE
        message

        Test for <http://webkit.org/b/48044> <rdar://problem/8488446> Pressing
        Ctrl+W when viewing a full-page PDF destroys the WKView but doesn't
        close its parent window

        Reviewed by Jon Honeycutt.

        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp: Added.
        (TestWebKitAPI::close): Record that this function was called.
        (TestWebKitAPI::WebKit2_WMCloseCallsUIClientClose): Create a WKView,
        send it a WM_CLOSE message, and test that the UI client's close
        callback got called. Note that this will hang if the bug is
        reintroduced; <http://webkit.org/b/48043> covers making TestWebKitAPI
        able to handle hangs.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added the new test.

2010-10-20  Adam Roben  <aroben@apple.com>

        Make prepare-ChangeLog much faster when using git

        This change also seems to make it detect renames better in some cases.

        Fixes <http://webkit.org/b/48040> prepare-ChangeLog is slow when using
        git

        Reviewed by David Kilzer.

        * Scripts/prepare-ChangeLog:
        (statusCommand):
        (createPatchCommand):
        Use "-M -C" instead of "-C -C -M" to tell git-diff to detect renames
        and copies. The two "-C"s were making it read many more files than were
        necessary.

2010-10-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Null frame passed when running alert from UserScript run at document start
        <rdar://problem/8573809>
        https://bugs.webkit.org/show_bug.cgi?id=48036

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::didReceiveMessage):
        (TestWebKitAPI::InjectedBundleController::initializeTestNamed):
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/InjectedBundleTest.h:
        (TestWebKitAPI::InjectedBundleTest::initialize):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp: Added.
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp: Added.
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::DocumentStartUserScriptAlertCrashTest):
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::initialize):
        Add test for invoking an alert during a UserScript run at document start.

2010-10-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Adam Roben.

        TestNetscapePlugIn: Actually call NPP_SetWindow on Unix

        We were just returning NPERR_NO_ERROR previously.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_set_window):

2010-10-21  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48051> Move macros from DumpRenderTreeMac.h to config.h

        Reviewed by Adam Roben.

        * DumpRenderTree/config.h: Moved macros to here...
        * DumpRenderTree/mac/DumpRenderTreeMac.h: ...from here.
        Addresses a FIXME comment from r28419.

2010-10-21  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48047> Fix warnings found by check-Xcode-source-file-types

        Reviewed by Adam Roben.

        Fixes the following warnings:

            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'PixelDumpSupport.cpp'.
            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'LayoutTestController.cpp'.
            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'WorkQueue.cpp'.
            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'cg/PixelDumpSupportCG.cpp'.
            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'GCController.cpp'.
            5 issues found for WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Removed explicit file type for *.cpp files above to make them
        match other C++ source files.  This exposed the fact that
        DumpRenderTreeMac.h was not safe to include in C++ source, which
        caused PixelDumpSupport.cpp and PixelDumpSupportCG.cpp to fail
        to build.
        * DumpRenderTree/PixelDumpSupport.cpp: Adjusted header order.
        * DumpRenderTree/mac/DumpRenderTreeMac.h: Made safe to include
        in C++ source files.  Included CoreFoundation/CoreFoundation.h
        to make sure all CF types were defined.  Removed CFStringRef
        typedef.

2010-10-21  Adam Roben  <aroben@apple.com>

        Attempt to fix plugins/pass-different-npp-struct.html on GTK.

        See <http://webkit.org/b/47690>.

        * GNUmakefile.am: Added PassDifferentNPPStruct.cpp.

2010-10-21  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [NRWT] Set ImageDiff path on Qt port
        https://bugs.webkit.org/show_bug.cgi?id=48052

        * Scripts/webkitpy/layout_tests/port/qt.py:

2010-10-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't CC authors of flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=48038

        Some authors found this too annoying.  We'll look for another way to
        close the flaky test loop.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should run run-webkit-tests with --no-new-test-results
        https://bugs.webkit.org/show_bug.cgi?id=47998

        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2010-10-21  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        [NRWT] Get child process number from an environment variable
        https://bugs.webkit.org/show_bug.cgi?id=47981

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-20  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/47754> New script to verify explicit source file types in Xcode project files

        Reviewed by Darin Adler.

        The script parses an Xcode project file and makes sure the file
        extension matches the explicit file type set for all source
        files.  Note that the majority of source files will have their
        type set by Xcode, so the script doesn't check them since there
        is no need to second-guess Xcode.

        * Scripts/check-Xcode-source-file-types: Added.  Code borrowed
        heavily from sort-Xcode-project-file.

2010-10-20  Adam Roben  <aroben@apple.com>
        
        Windows build fix

        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp: Added missing #include.

2010-10-20  Adam Roben  <aroben@apple.com>

        Qt test fix

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Added
        PassDifferentNPPStruct.cpp.

2010-10-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add ability to test injected bundle API using TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=48027

        * TestWebKitAPI/InjectedBundleController.cpp: Added.
        * TestWebKitAPI/InjectedBundleController.h: Added.
        Shared main object for bundle functionality.

        * TestWebKitAPI/InjectedBundleMain.cpp: Added.
        Bundle entry point.

        * TestWebKitAPI/InjectedBundleTest.h: Added.
        Base class for which the bundle portion of a test derives from. 

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/PlatformUtilities.cpp: Added.
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::createURLForResource):
        (TestWebKitAPI::Util::URLForNonExistentResource):
        Add helper to create a context with the shared injected bundle,
        and send the initial message to set up the test.

        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig: Added.
        * TestWebKitAPI/InjectedBundle-Info.plist: Added.
        Add mac configuration files.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add the new files.

        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp: Added.
        Add a simple initial bundle test.

2010-10-20  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fixing /release-patch url used by the EWS bots.

        EWS should test patches with r+
        https://bugs.webkit.org/show_bug.cgi?id=35460

        * Scripts/webkitpy/common/net/statusserver.py:
         - I changed the URL during development, and 404s are
         intentionally silenced during release_patch.

2010-10-14  Adam Roben  <aroben@apple.com>

        Test that passing a different NPP struct back to the browser doesn't
        cause an assertion failure

        Test for <http://webkit.org/b/47690> <rdar://problem/8553020>
        Assertion failure in NetscapePlugin::fromNPP when using Shockwave in
        WebKit2

        Reviewed by John Sullivan.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PassDifferentNPPStruct.cpp: Copied from WebKitTools/DumpRenderTree/TestNetscapePlugIn/Tests/win/GetValueNetscapeWindow.cpp.
        (PassDifferentNPPStruct::PassDifferentNPPStruct): Initialize our
        members.
        (PassDifferentNPPStruct::NPP_SetWindow): Pass a different NPP to the
        browser than the one it gave us in NPP_New and see if it works.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added PassDifferentNPPStruct.

2010-10-19  Adam Roben  <aroben@apple.com>

        Gently nudge old-run-webkit-tests toward working with Win32 Perl

        This makes old-run-webkit-tests able to build DRT and find all the
        tests to run. It even invokes DRT and passes it the list of tests. But
        DRT ends up hung blocking on I/O.

        Fixes <http://webkit.org/b/47961> Get old-run-webkit-tests mostly
        working with Win32 Perl

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
          - Use File::Spec instead of manually concatenating paths
          - Use dirname instead of manually stripping off the base name
          - Use isCygwin/isWindows/isAppleWinWebKit more judiciously
          - Explicitly invoke Perl when running Perl scripts
          - Quote paths when using them in regular expressions to allow them
            to include characters that have special meanings in regular
            expressions

        * Scripts/run-webkit-tests: Use File::Spec instead of manually
        concatenating paths.

        * Scripts/webkitdirs.pm:
          - Remove the unused $windowsTmpPath variable
          - Use isCygwin/isWindows/isAppleWinWebKit more judiciously
          - Only pass paths to cygpath when using Cygwin Perl
          - Only use pdevenv when using Cygwin Perl, for now

2010-10-20  Daniel Bates  <dbates@rim.com>

        Reviewed by Martin Robinson.

        Add Git-support to do-file-rename
        https://bugs.webkit.org/show_bug.cgi?id=48015

        Also, abstracts the SCM move/rename functionality in do-file-rename and
        do-webcore-rename into a common function VCSUtils::scmMoveOrRenameFile().

        Currently, do-file-rename is hard coded to assume the SCM is Subversion.
        Instead, we should abstract the rename logic to be SCM-independent. This
        will allow us to add Git support as well move such functionality into
        our SCM library VCSUtils, where it can be shared by do-webcore-rename.

        * Scripts/VCSUtils.pm:
          - Added function scmMoveOrRenameFile.
        * Scripts/do-file-rename: Modified to call VCSUtils::scmMoveOrRenameFile().
        * Scripts/do-webcore-rename: Ditto.

2010-10-20  Adam Roben  <aroben@apple.com>

        Fix old-run-webkit-tests when there's a space in the path to DRT

        Reviewed by Jon Honeycutt.

        * Scripts/old-run-webkit-tests: Quote the path to DRT before executing
        it.

2010-10-20  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Regression in chromium_gpu_unittests after r70175
        https://bugs.webkit.org/show_bug.cgi?id=48008

        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2010-10-20  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        chromium_gpu port of new-run-webkit-tests must do Linux -> Win expectations fallback
        https://bugs.webkit.org/show_bug.cgi?id=48005

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2010-10-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch doesn't get along with git rm
        https://bugs.webkit.org/show_bug.cgi?id=47940

        Turns out we need to pass "--" to tell git this is a path.

        * Scripts/webkitpy/common/checkout/scm.py:

2010-10-20  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Fix layoutTestController.getJsObjectCount

        Qt Bridge doesn't know size_t so pass result as unsigned int.

        Unskip fast/dom/gc-10.html

        https://bugs.webkit.org/show_bug.cgi?id=47931

        * DumpRenderTree/qt/GCControllerQt.cpp:
        (GCController::getJSObjectCount):
        * DumpRenderTree/qt/GCControllerQt.h:

2010-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70149.
        http://trac.webkit.org/changeset/70149
        https://bugs.webkit.org/show_bug.cgi?id=47989

        "Build breaks in mac and win" (Requested by satish on
        #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-20  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Added a second parameter to setMockSpeechInputResult for
        the language used in speech input.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-19  Adam Roben  <aroben@apple.com>

        Teach update-webkit-support-libs about the new versioning of
        WebKitSupportLibrary

        Fixes <http://webkit.org/b/47915> update-webkit-support-libs should
        check version numbers instead of modification times

        Reviewed by Sam Weinig.

        * Scripts/update-webkit-support-libs: Fetch the expected version
        number from developer.apple.com, then compare with the version number
        of the extracted library and of the zipped library to see if anything
        needs to be done. Removed code that tracked the modified timestamp of
        the library, as it is no longer needed.

2010-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS should test patches with r+
        https://bugs.webkit.org/show_bug.cgi?id=35460

        * QueueStatusServer/handlers/submittoews.py:
        * QueueStatusServer/model/queues.py:
        * Scripts/webkitpy/tool/bot/patchcollection.py: Removed.
        * Scripts/webkitpy/tool/bot/patchcollection_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/queues.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach feeder-queue how to feed the EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=47943

        queues.webkit.org already knew how to accept EWS submissions
        via /submit-to-ews.  This teaches the feeder queue how to post
        to that page with any new r? patches it sees.

        * QueueStatusServer/model/activeworkitems_unitest.py: Added.
         - More unit testing is always a good thing.
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/tool/bot/feeders.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Unreviewed, just fixing test-webkitpy.  I'm really on a roll today.

        commit-queue gets stuck when release-patch returns 404
        https://bugs.webkit.org/show_bug.cgi?id=47935

        Fix test-webkitpy and unittest NetworkTransaction.

        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        commit-queue gets stuck when release-patch returns 404
        https://bugs.webkit.org/show_bug.cgi?id=47935

        Turns out ClientForm gets upset if passed an int() instead of a string type.
        Yay for untestable code.

        * Scripts/webkitpy/common/net/statusserver.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Will get Adam's commentary after his meeting
        for now this gets the commit-cluster back running.

        commit-queue gets stuck when release-patch returns 404
        https://bugs.webkit.org/show_bug.cgi?id=47935

        I taught NetworkTransaction the basics of 404 handling.
        We'll want to go back and teach it how to handle urllib2 404's too
        and then deploy it to the places that want it.

        * QueueStatusServer/handlers/releasepatch.py:
        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/common/net/statusserver.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fixing typos in my previous commit.

        Make patch release explicit and not a magic part of "retry" status
        https://bugs.webkit.org/show_bug.cgi?id=47909

        All of these typos again due to our inability to unit
        test much of this code.  I added one unit test where
        possible.  activeworkitems_unittest.py will be in a separate patch.

        * QueueStatusServer/handlers/releasepatch.py:
        * QueueStatusServer/main.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/model/workitems.py:
        * QueueStatusServer/model/workitems_unittest.py:
        * QueueStatusServer/templates/releasepatch.html:
        * Scripts/webkitpy/common/net/statusserver.py:

2010-10-19  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Use webkit's TestNetscapePlugIn in DRT mac
        https://bugs.webkit.org/show_bug.cgi?id=47850

        * DumpRenderTree/chromium/TestNetscapePlugIn/Info.plist: Added. Forked
            because we're going to name our plugin WebKitTestNetscapePlugIn
            temporarily until the chromium forked plugin goes away.

2010-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make patch release explicit and not a magic part of "retry" status
        https://bugs.webkit.org/show_bug.cgi?id=47909

        This moves us another step closer to running r+ patches on the EWS bots.
        Currently all bots just spam /update-work-items with their list of current
        work items.  queues.webkit.org uses that data for display.  As part of making
        the EWS run r+ patches, we're moving the official list of patches-to-process
        into the server, and feeding them out to bots one at a time.  We need to be
        able to remove patches from the queues one at a time instead of just spamming
        /update-work-items with a new complete list.  That's what this patch adds.

        * QueueStatusServer/handlers/nextpatch.py:
        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/handlers/releasepatch.py: Added.
        * QueueStatusServer/handlers/statusbubble_unittest.py:
         - Fix a typo causing test failure.  This was not caught by the bots
           because they don't have AppEngineLauncher installed and thus don't run
           the QueueStatusServer tests.
        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/templates/releasepatch.html: Added.
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        cr-mac bubble has caused status bubbles to wrap
        https://bugs.webkit.org/show_bug.cgi?id=47928

        We now have too many EWSes to fit in the bugs.webkit.org
        status-bubble iframe when more than a couple EWS builds are pending.
        To fix this I've reduced the space taken up by queue position,
        and also moved cr-mac to the end of the list (since it's going to be
        triple-digits for a while).

        * QueueStatusServer/model/queues.py:
        * QueueStatusServer/templates/statusbubble.html:

2010-10-19  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        chromium_gpu port of new-run-webkit-tests must search chromium-gpu directory for expectations
        https://bugs.webkit.org/show_bug.cgi?id=47874

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2010-10-19  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] DumpRenderTree shouldn't put '.' in include path
        https://bugs.webkit.org/show_bug.cgi?id=47877

        Fix include paths.

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        * DumpRenderTree/chromium/CppVariant.cpp:
        * DumpRenderTree/chromium/CppVariant.h:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/EventSender.cpp:
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        * DumpRenderTree/chromium/NotificationPresenter.h:
        * DumpRenderTree/chromium/PlainTextController.cpp:
        * DumpRenderTree/chromium/Task.cpp:
        * DumpRenderTree/chromium/TestNavigationController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/TestWebWorker.h:
        * DumpRenderTree/chromium/TextInputController.cpp:
        * DumpRenderTree/chromium/WebPreferences.cpp:
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
        * DumpRenderTree/chromium/WebThemeEngineDRT.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2010-10-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Need to include WKErrorRef in the WKPageDidFail... functions
        https://bugs.webkit.org/show_bug.cgi?id=47871

        Update tools for new parameter in failure callbacks.

        * MiniBrowser/mac/BrowserWindowController.m:
        (didFailProvisionalLoadWithErrorForFrame):
        (didFailLoadWithErrorForFrame):
        (-[BrowserWindowController updateProvisionalURLForFrame:]):
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-10-19  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] WebKit2 MacOS build fix
        https://bugs.webkit.org/show_bug.cgi?id=47897

        Qt WebKit2 MacOS build fix.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/TestControllerQt.cpp:

2010-10-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch stats the filesystem too many times
        https://bugs.webkit.org/show_bug.cgi?id=47883

        This patch attempts to cache the list of changed files more agressively
        and to use that list to compute the diff instead of stating the file
        system again.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2010-10-19  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/47741> Make sort-Xcode-project-file a little more friendly

        Reviewed by Darin Adler.

        * Scripts/sort-Xcode-project-file:
        - Don't print an error message about missing arguments when
          -h|--help is used.
        - Allow Xcode project files to be specified as Project.xcodeproj
          instead of Project.xcodeproj/project.pbxproj.

2010-10-18  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser: Prevent calling load() directly from loadFinished() in robot mode.
        https://bugs.webkit.org/show_bug.cgi?id=47809

        Connecting a call to load from the loadFinished signal can cause
        re-entrance crashes in WebCore. This patch uses a timer to do so,
        also giving some time to subsequent frames to finish loading.

        * QtTestBrowser/urlloader.cpp:
        (UrlLoader::UrlLoader):
        (UrlLoader::loadNext):
        (UrlLoader::checkIfFinished):
        (UrlLoader::frameLoadStarted):
        (UrlLoader::frameLoadFinished):
        * QtTestBrowser/urlloader.h:

2010-10-19  Sergio Villar Senín  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] http/history tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=36173

        Clear the history each time a test is run. Return the actual
        history item count when calling
        LayoutTestController::webHistoryItemCount

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::webHistoryItemCount):

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add Chromium Mac EWS to the list of queues at queues.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=47878

        * QueueStatusServer/model/queues.py:

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queues.webkit.org/next_patch is always 404
        https://bugs.webkit.org/show_bug.cgi?id=47881

        With the addition of the Queue class, I changed most of the
        code to lookup WorkItems using get_or_insert with a key_name
        instead of WorkItems.all().filter(queue_name=).
        Because the new get_or_insert code uses an explicit key_name
        (which is obviously different from the previously autogenerated
        ones), there were new WorkItem records created for each queue.
        However, some parts of the code still use WorkItems.all().filter,
        thus some parts were getting the new record and some parts the old record.

        The same basic bug was occurring with ActiveWorkItems, because I
        changed the key_name for that class as well.

        To fix this I've moved more of the code over to using Queue.*work_items.
        I've also enabled the datastore_admin (new in GAE 1.3.8) so that
        we can go delete the old WorkItems records.
        I also changed remote_api to use the new builtin: syntax (also added in GAE 1.3.8).

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/handlers/recentstatus.py:
        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/handlers/updateworkitems.py:

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Correct a bunch of typos in QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=47880

        These are all due to our complete lack of unit testing in QueueStatusServer.
        I added a couple unit tests to cover a few of these fixes, but most of these
        are still only caught by actually running the application.

        * QueueStatusServer/handlers/nextpatch.py:
        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/handlers/statusbubble_unittest.py: Added.
        * QueueStatusServer/handlers/updateworkitems.py:
        * QueueStatusServer/model/attachment.py:
        * QueueStatusServer/model/queuepropertymixin.py:
        * QueueStatusServer/model/queuepropertymixin_unittest.py:
        * QueueStatusServer/model/workitems.py:
        * QueueStatusServer/model/workitems_unittest.py: Added.

2010-10-18  Adam Barth  <abarth@webkit.org>

        Disable this test because it's failing on the bots and the authors
        aren't around to fix it.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CC authors of flaky tests when the commit-queue hits a flaky test
        https://bugs.webkit.org/show_bug.cgi?id=47872

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to run a chromium-mac-ews builder
        https://bugs.webkit.org/show_bug.cgi?id=47876

        Since we can't run Mac OS X in a VM, we need to only run committer patches.
        There was a multiple inheritance problem which was holding this patch back,
        but I decided to just ignore the problem and go with a functional hack for now.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2010-10-18  Kenneth Russell  <kbr@google.com>

        Reviewed by Tony Chang.

        Regression in run_webkit_tests_unittest from r70017
        https://bugs.webkit.org/show_bug.cgi?id=47875

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement webkit-patch suggest-reviewers
        https://bugs.webkit.org/show_bug.cgi?id=47866

        * Scripts/webkitpy/common/checkout/api.py:
            - The main logic.  We look at the last five changes to each
              modified (non-ChangeLog) file and collect up the reviewers of
              those changes as well as the authors of those changes who are
              reviewers.
        * Scripts/webkitpy/common/checkout/api_unittest.py:
            - Test the logic with some fun mocks.
        * Scripts/webkitpy/common/checkout/scm.py:
            - Fix a bug when you have local git commits.
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
            - Test that the bug is fixed.
        * Scripts/webkitpy/tool/commands/queries.py:
            - Add the query.

2010-10-18  Kenneth Russell  <kbr@google.com>

        Reviewed by Eric Seidel.

        new-run-webkit-tests produces corrupt PNG baselines on Windows
        https://bugs.webkit.org/show_bug.cgi?id=47867

        * Scripts/webkitpy/layout_tests/port/base.py:

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to submit patches to the EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=47869

        * QueueStatusServer/handlers/nextpatch.py:
         - Move more logic into Queue, so that it can be shared with SubmitToEWS.
        * QueueStatusServer/handlers/queuestatus.py:
         - Fix two typos from a previous commit.
        * QueueStatusServer/handlers/submittoews.py: Added.
        * QueueStatusServer/handlers/updatestatus.py:
         - Use the new is_retry_request method to share this (hacky) code with SubmitToEWS
        * QueueStatusServer/main.py:
         - Add /submit-to-ews
        * QueueStatusServer/model/queuepropertymixin.py:
         - Fix circular imports caused by adding Queue.work_items()
        * QueueStatusServer/model/queues.py:
         - Add work_items() and active_work_items()
        * QueueStatusServer/model/queuestatus.py:
        * QueueStatusServer/model/workitems.py:
         - Add transaction-safe add/remove methods.
        * QueueStatusServer/templates/submittoews.html: Added.

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Deploy Queue class in more places throughout QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=47855

        I also caught two typos from the previous change.  Unfortunately
        I don't yet know how to unittest request handlers yet.

        * QueueStatusServer/handlers/dashboard.py:
        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/handlers/updateworkitems.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/model/attachment.py:
        * QueueStatusServer/model/queuepropertymixin.py: Added.
        * QueueStatusServer/model/queuepropertymixin_unittest.py: Added.
        * QueueStatusServer/model/queuestatus.py:
        * QueueStatusServer/model/workitems.py:

2010-10-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        scm.py should be able tell us what revisions made changes to a given file
        https://bugs.webkit.org/show_bug.cgi?id=47863

        Look again, your SCM.py can now log files.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-10-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        new-run-webkit-tests: clean up the options-parsing code in the port
        classes.
        
        This change modifies the Port interface to have a get_option() and
        set_option_default() method for accessing the options argument
        passed to the constructor. If the constructor is not passed an
        options argument, we default to a MockOptions() argument from
        mocktool, which has the same semantics we want.

        Note that there is a disadvantage to port.get_option('foo') over
        port._options.foo, which is that you lose some of the checking
        for whether 'foo' is set (typos result in the default value, not
        an exception being raised. This is desired in this case, since the
        Port class is not allowed to assume that options does have any
        particular values set, and so this change ensures that all of
        the subclasses are following the same, intended, logic.

        Arguably this is the wrong semantics to have, and the Port
        classes should be able to assume a default set of
        attributes/arguments, but that change will need to wait for a
        different CL where we can modify new-run-webkit-tests to pull a
        list of arguments from the port factory routines.

        Also, add unit tests for webkitpy.tool.mocktool.MockOptions .

        https://bugs.webkit.org/show_bug.cgi?id=47510

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/mocktool_unittest.py: Added.

2010-10-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Re-submit a revised version of r69638 - enabling new-run-webkit-tests
        under cygwin. The initial version had a bug in base:uri_to_test_name
        that was causing tests to fail. This version corrects that bug, but
        also makes the code safer by calling cygpath more reliably, and
        leaving a long-running cygpath process open.

        This patch also corrects a couple of minor bugs in http_lock_unittest,
        chromium_unittest, and dedpulicate_tests_unittest that showed up
        while testing this.

        https://bugs.webkit.org/show_bug.cgi?id=47220

        * Scripts/webkitpy/common/system/path.py:
        * Scripts/webkitpy/common/system/path_unittest.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add Queue class and add minimal unittesting of QueueStatusServer code
        https://bugs.webkit.org/show_bug.cgi?id=47847

        * QueueStatusServer/handlers/dashboard.py:
        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/handlers/recentstatus.py:
        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/handlers/updateworkitems.py:
        * QueueStatusServer/model/attachment.py:
        * QueueStatusServer/model/queues.py:
        * QueueStatusServer/model/queues_unittest.py: Added.
        * QueueStatusServer/model/svnrevision.py:
        * Scripts/test-webkitpy:
        * Scripts/webkitpy/test/main.py:

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventCarbon):

2010-10-18  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Eric Seidel.

        Switch to using the new Carbon NPAPI event declarations, and remove
        the old ones.

        https://bugs.webkit.org/show_bug.cgi?id=40784

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventCarbon):

2010-10-18  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style should treat the GObject binding directory like other GTK directories.
        https://bugs.webkit.org/show_bug.cgi?id=47796

        * Scripts/webkitpy/style/checker.py: Added the GObject binding directory
        with the other gtk directories (and fixed typo).

2010-10-18  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

        check-webkit-style needs to ignore underscores in opcode names and vm_throw
        https://bugs.webkit.org/show_bug.cgi?id=47789

        * Scripts/webkitpy/style/checker.py: Added the exception for the assembler directory.
        * Scripts/webkitpy/style/checkers/cpp.py: Added special cased names.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added unit tests for the special cases.

2010-10-18  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        TextInputController.hasSpellingMarkers() should be owned by LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=47659
        
        Moved hasSpellingMarkers() from TextInputController to
        LayoutTestController.  Currently the implementation is available
        only for Mac and for Chromium.

        * DumpRenderTree/LayoutTestController.cpp:
        (hasSpellingMarkerCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::TextInputController):
        (TextInputController::makeAttributedString):
        * DumpRenderTree/chromium/TextInputController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/mac/TextInputController.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::hasSpellingMarker):

2010-10-18  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        commit-queue's flaky test notice is very Pythony
        https://bugs.webkit.org/show_bug.cgi?id=47790

        This patch make the list of tests delimted by \n instead of just
        converting the array to a string.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-14  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson and Xan Lopez.

        [Gtk]: DRT does not support frame flattening testing
        https://bugs.webkit.org/show_bug.cgi?id=38650

        Implement DRT's support for toggling on/off frame flattening
        support.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setFrameFlatteningEnabled):

2010-10-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        mocktool.MockOptions is inheriting from Mock, which has the side
        effect of defaulting any attribute to another MockObject. So,
        MockOptions().foo would always evaluate to true. This was
        covering over bugs in the unit tests, and is probably the wrong
        default behavior for anything attempting to mock out the options
        argument returned from optparse.parse_args().

        This patch changes the default behavior. The new MockOptions()
        class takes an optional list of keyword parameters to set; this
        patch doesn't use that feature but the fix for bug 47510 will.

        Also, this patch just fills in the default values necessary to
        get all of the tests to pass; I didn't stare at each test by
        hand to determine the "right" values. We can either fix that in
        subsequent patches or let me know if we want to do that now (and
        give me some guidance on what those values might want to be).

        https://bugs.webkit.org/show_bug.cgi?id=47709

        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:

2010-10-15  Simon Fraser  <simon.fraser@apple.com>

        Fix the build; need to add new slot to PageUIClient callbacks.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):

2010-10-15  Simon Fraser  <simon.fraser@apple.com>

        Add Matt Delaney to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2010-10-15  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] compile TestNetscapePlugIn on Chromium mac
        https://bugs.webkit.org/show_bug.cgi?id=47633

        * DumpRenderTree/DumpRenderTree.gypi: files to compile
        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Use ifdef because gcc was complaining
        (NP_GetEntryPoints):
        (NPP_New):
        (NPP_Destroy):
        (NPP_HandleEvent):
        (NPP_GetValue):
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: Added.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Added.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h: Added.

2010-10-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        build-webkit: Should die when make fails when build a CMake project
        https://bugs.webkit.org/show_bug.cgi?id=47726

        * Scripts/webkitdirs.pm: If make fails, die immediately.

2010-10-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69809.
        http://trac.webkit.org/changeset/69809
        https://bugs.webkit.org/show_bug.cgi?id=47725

        Broke chromium mac compile (Requested by japhet on #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_GetEntryPoints):
        (NPP_New):
        (NPP_Destroy):
        (NPP_HandleEvent):
        (NPP_GetValue):
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h: Removed.

2010-10-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Adam Barth.

        test-webkitpy fails on Linux
        https://bugs.webkit.org/show_bug.cgi?id=47713

        The old code failed on Linux because the MacPort tries to read
        something out of platform that doesn't make sense on Linux.

        * Scripts/webkitpy/tool/mocktool.py:

2010-10-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WTR is sloooow
        https://bugs.webkit.org/show_bug.cgi?id=47695

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        Change the timer interval of RunUntilConditionLoop from
        50 milliseconds to 1 to avoid wasting time after the 
        test had been finished.

2010-10-14  Eric Seidel  <eric@webkit.org>

        Unreviewed, just fixing an exception seen on the commit-queue.

        I should have unit tested this function before.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should not fail patches due to flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=47647

        This patch makes it so that the *same* flaky test has to fail
        twice in a row to have a false negative from a flaky test.

        If different flaky tests fail (or if a test fails and then passes
        in a second run) then we will warn in the bug that we encountered
        a flaky test.

        This patch grew to include moving port off of steps onto tool
        (which Adam wrote and then I integrated), as well as removing the
        use of tool from CommitQueueTask.

        * Scripts/webkitpy/common/config/ports.py:
         - Added a layout_test_results_path method.  This covers old-run-webkit-tests
           but doesn't cover NRWT.  This is probably not the long term solution, but
           putting this knowledge on port makes more sense than in LayoutTestResults.
        * Scripts/webkitpy/common/net/buildbot.py:
         - LayoutTestResults shouldn't know how to fetch from the network, make
           the Build code do that instead.
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
         - Code style fix.
        * Scripts/webkitpy/common/net/layouttestresults.py:
         - Remove code for reading from the network.
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
         - Test the new entrypoint.
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
         - Make the delegate interface explicit.
         - Remove the _tool member, since using the delegate for
           everything is cleaner.
         - Teach the testing logic how to deal with flaky tests.
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
         - Update to match the CommitQueueTask changes.
        * Scripts/webkitpy/tool/commands/queues.py:
         - Use the new CommitQueueTaskDelegate interface.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Fix the SecondThoughtsCommitQueue test which was broken.
         - Add a new test to make sure the flaky test reporting works.
        * Scripts/webkitpy/tool/main.py:
         - Store the port on the tool object.
        * Scripts/webkitpy/tool/mocktool.py:
         - Add a port() accessor to MockTool
        * Scripts/webkitpy/tool/steps/abstractstep.py:
         - Move port() off of Step and onto Tool.
        * Scripts/webkitpy/tool/steps/build.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
         - Two tests with the same name!  only the latter was being run.
        * Scripts/webkitpy/tool/steps/update.py:

2010-10-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests will now handle missing Ruby installs (or
        missing PrettyPatch scripts) more cleanly - previously this
        would be detected when we actually tried to create the diff, and
        the error message was obscure. Now we'll log a warning up front
        and otherwise be silent.

        This change also refactors some global variables to be class or
        instance variables to be slightly more testable and more
        modular. There are no cases where we create lots of port objects
        and can't afford to test for configurations repeatedly, so
        there's no performance concern here.

        https://bugs.webkit.org/show_bug.cgi?id=47466

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-10-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Form controls do not respect GTK+ font size
        https://bugs.webkit.org/show_bug.cgi?id=47134

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings): Initialize the font control size when running
        DumpRenderTree to a standard value.

2010-10-14  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] compile TestNetscapePlugIn on Chromium mac
        https://bugs.webkit.org/show_bug.cgi?id=47633

        * DumpRenderTree/DumpRenderTree.gypi: files to compile
        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Use ifdef because gcc was complaining
        (NP_GetEntryPoints):
        (NPP_New):
        (NPP_Destroy):
        (NPP_HandleEvent):
        (NPP_GetValue):
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: Added.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Added.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h: Added.

2010-10-14  Victor Wang  <victorw@chromium.org>

        Reviewed by Nate Chapin.

        [Chromium] Fix rebaseline_chromium_webkit_tests to use 0 tolerance image diff.

        https://bugs.webkit.org/show_bug.cgi?id=47686

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-10-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        test-webkitpy spews Delegate terminated queue messages
        https://bugs.webkit.org/show_bug.cgi?id=47678

        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:

2010-10-14  Adam Roben  <aroben@apple.com>

        Test that pressing the Alt key generates a WM_SYSCOMMAND message

        Test for <http://webkit.org/b/47671> <rdar://problem/8435594> Pressing
        the Alt key when MiniBrowser's WKView is focused doesn't send focus to
        the menu bar

        Reviewed by Steve Falkenburg.

        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops: Added
        TestWebKitAPI/win to the include path so that WindowMessageObserver
        can be found.

        * TestWebKitAPI/PlatformWebView.h: Added simulateAltKeyPress and
        Windows-specific members.
        (TestWebKitAPI::PlatformWebView::setParentWindowMessageObserver):
        Added this simple setter.

        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp: Added.
        (TestWebKitAPI::WMSysCommandObserver::WMSysCommandObserver):
        Initialize our lone data member.
        (TestWebKitAPI::WMSysCommandObserver::windowDidReceiveWMSysCommand):
        Simple getter.
        (TestWebKitAPI::WMSysCommandObserver::windowReceivedMessage): Record
        when a WM_SYSCOMMAND message is received.
        (TestWebKitAPI::didNotHandleKeyEventCallback): Record when a
        WM_SYSKEYUP message is not handled.
        (TestWebKitAPI::WebKit2_AltKeyGeneratesWMSysCommand): Simulate
        pressing the Alt key and check that a WM_SYSCOMMAND message got sent
        to the WKView's parent window.

        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::registerWindowClass): Made this a
        member function so it could access PlatformWebView::wndProc. Use
        PlatformWebView::wndProc as the WNDPROC.
        (TestWebKitAPI::PlatformWebView::PlatformWebView): Initialize our new
        data member and pass the this pointer to CreateWindowEx so we can
        store it on the HWND.
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress): Moved some
        constants from here to the top of the file.
        (TestWebKitAPI::PlatformWebView::simulateAltKeyPress): Added. Sends
        the same messages that Notepad receives when you press the Alt key.
        (TestWebKitAPI::PlatformWebView::wndProc): Added.
          - When WM_CREATE is received, we set the PlatformWebView instance
            pointer as a property on the HWND so we can access it later.
          - For other messages, we try to get the PlatformWebView instance
            pointer from the HWND property.
          - When WM_NCDESTROY is received (which is the last message we will
            receive), we remove the PlatformWebView instance property.
          - Pass messages to the parent window's message observer, if there is
            one.
          - Pass all messages through to ::DefWindowProcW.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added WindowMessageObserver
        and AltKeyGeneratesWMSysCommand.

        * TestWebKitAPI/win/WindowMessageObserver.h: Added. This class can be
        used to observe messages sent to one or more windows.

2010-10-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Holger Freyther.

        [GTK] REGRESSION: FreeType backend does not respect XSettings font settings after r68558
        https://bugs.webkit.org/show_bug.cgi?id=47033

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings): Added this method which initializes XSettings
        font settings to consistent values before running a test. For the one test
        in which we need subpixel aliasing turned on, do that.
        (initializeFonts): Accepts a testURL parameter now and delegates to initializeGtkFontSettings.
        (runTest): Pass the testURL to initializeFonts.

2010-10-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        ChromiumXVFBPort.run_webkit_tests_command has infinite recursion
        https://bugs.webkit.org/show_bug.cgi?id=47655

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:

2010-10-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        beat diff_parser with the ugly stick
        https://bugs.webkit.org/show_bug.cgi?id=47626

        * Scripts/webkitpy/common/checkout/diff_parser.py:
        * Scripts/webkitpy/style/patchreader.py:
        * Scripts/webkitpy/style/patchreader_unittest.py:

2010-10-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Break LayoutTestResults out into its own file
        https://bugs.webkit.org/show_bug.cgi?id=47637

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/layouttestresults.py: Added.
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py: Added.

2010-10-13  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Chromium port can't run JavaScriptCore tests
        https://bugs.webkit.org/show_bug.cgi?id=47654

        This lets webkit-patch build-and-test work on Chromium.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/steps/runtests.py:

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make --port a global option and pass the port information to the commit-queue subprocess
        https://bugs.webkit.org/show_bug.cgi?id=47650

        This patch paves the way to run the commit-queue on a non-Mac port.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/update.py:

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Introduce the ChromiumXVFBPort for running commit-queue on EC2
        https://bugs.webkit.org/show_bug.cgi?id=47653

        I'm not entirely sure this is the best way to do this, but we need to
        run the tests under XVFB on EC2 because the EC2 instances don't have a
        real monitor hooked up.  This patch adds a ChromiumXVFBPort that runs
        that way.  The idea is that XVFB is like a platform for the Chromium
        port, but we don't have a real notion of platform separate from port.

        * Scripts/webkitpy/common/config/ports.py:

2010-10-13  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add HTTP caching support
        https://bugs.webkit.org/show_bug.cgi?id=44261

        Add include paths for the new soup HTTP cache code.

        * GNUmakefile.am: Add paths for the new soup HTTP cache code.

2010-10-13  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] QtTestBrowser shows two Url input fields
        https://bugs.webkit.org/show_bug.cgi?id=47613

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::MainWindow):
        (MainWindow::buildUI):

2010-10-13  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Tony Chang.

        [gdb] Add pretty-print supports for UString, Identifier and JSString
        https://bugs.webkit.org/show_bug.cgi?id=47601

        * gdb/webkit.py:

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add list of Ubuntu packages needed by the EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=47628

        I've been copy/pasting this list between bots, but it's better to have
        this checked in.

        * EWSTools/ubuntu-ews-packages: Added.

2010-10-13  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Csaba Osztrogonác.

        [EFL] Adds a build slave.
        https://bugs.webkit.org/show_bug.cgi?id=47290

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add an
        entry for a release build of the EFL port.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add platform
        flag to build the EFL port.

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Csaba Osztrogonác.

        webkit-patch build shouldn't need --build to actually build!
        https://bugs.webkit.org/show_bug.cgi?id=47438

        Yeah, requiring --build for the build command is really dumb.  We did
        this originally because the build step is usually optional in other
        commands.  We don't have a good way of reversing the default for an
        option in one command.  This approach is slightly hacky since --build
        still shows up as an option on the help page, but at least it makes
        progress.  Passing --build is harmless, so the EWS bots shouldn't
        explode because of this change.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69638.
        http://trac.webkit.org/changeset/69638
        https://bugs.webkit.org/show_bug.cgi?id=47595

        "Broke win and chromium-win bots" (Requested by dglazkov on
        #webkit).

        * Scripts/webkitpy/common/system/path.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-13  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        First step towards client-based Geolocation in Chromium. Build
        fixes for CLIENT_BASED_GEOLOCATION preprocessor feature define.
        https://bugs.webkit.org/show_bug.cgi?id=47586

        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2010-10-13  Adam Roben  <aroben@apple.com>

        Test that pressing the spacebar in a text field does not scroll the
        document

        Test for <http://webkit.org/b/47544> <rdar://problem/8540645>
        REGRESSION: Pressing spacebar in a text field in WebKit2 does not
        insert a space, scrolls the page instead

        Reviewed by Sam Weinig.

        * TestWebKitAPI/PlatformUtilities.h: Added isKeyDown.

        * TestWebKitAPI/PlatformWebView.h: Added simulateSpacebarKeyPress.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:
        Added new files.

        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp: Added.
        (TestWebKitAPI::JavaScriptCallbackContext::JavaScriptCallbackContext):
        We use this to track what the result of calling into JavaScript was.
        (TestWebKitAPI::didFinishLoadForFrame): Records when the page
        finishes loading.
        (TestWebKitAPI::didNotHandleKeyEventCallback): Records when a key down
        event is not handled.
        (TestWebKitAPI::javaScriptCallback): Records that JavaScript finished
        executing and whether the result matched our expectation.
        (TestWebKitAPI::wk): Turns a UTF-8 C string into a WKStringRef.
        (TestWebKitAPI::runJSTest): Calls into JS, waits for the call to
        complete, and returns whether we got back the expected result.
        (TestWebKitAPI::WebKit2_SpacebarScrolling): Tests that pressing
        spacebar inside a text field does not scroll the document and that
        pressing it outside the text field does scroll the document.

        * TestWebKitAPI/Tests/WebKit2/spacebar-scrolling.html: Added.

        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::isKeyDown): Checks the event's type.

        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress): Copied
        code from DRT's EventSendingController.

        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::isKeyDown): Checks the message's type.

        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress): Send the
        same messages that get sent when you press spacebar in Notepad.

2010-10-13  Adam Roben  <aroben@apple.com>

        Fix a couple of issues with the TestWebKitAPI build

        * TestWebKitAPI/Configurations/TestWebKitAPICFLite.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPICoreFoundation.vsprops:
        Fixed a typo.

        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj: Use common.vsprops
        to set our output and intermediate directories so that we don't spew
        files into the source tree.

2010-10-13  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        WTR should accept relative paths
        https://bugs.webkit.org/show_bug.cgi?id=47486

        * WebKitTestRunner/StringFunctions.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::createWKURL): Moved from StringFunctions.h since it is
        used only here. Extend relative paths to absolute.

2010-10-12  Adam Roben  <aroben@apple.com>

        Make TestWebKitAPI work on Windows

        Fixes <http://webkit.org/b/47552> <rdar://problem/8541708>.

        Reviewed by Sam Weinig.

        * Scripts/build-api-tests: Build TestWebKitAPI.sln on Windows.

        * Scripts/run-api-tests: Fix the PATH so that TestWebKitAPI can be
        run on Windows.
        (runTest): Added code to run TestWebKitAPI.exe on Windows and to die
        on unsupported platforms.
        (populateTests): Added code to run TestWebKitAPI.exe on Windows and to
        die on other platforms. Extracted some formerly-Mac-specific code to
        be cross-platform and made it handle any style of line-endings.

        * TestWebKitAPI/Configurations/TestWebKitAPICFLite.vsprops: Added.
        Links against CFLite.

        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops: Added.
        Contains most properties for the project.

        * TestWebKitAPI/Configurations/TestWebKitAPICoreFoundation.vsprops:
        Added. Links against CoreFoundation.

        * TestWebKitAPI/TestWebKitAPIPrefix.h: Added a Windows-specific
        section and moved the cross-platform section after the
        platform-specific parts.

        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp: Added.
        (TestWebKitAPI::Util::run): Runs a normal message pump until we're
        done.
        (TestWebKitAPI::Util::cf): Turns a UTF-8 C string into a CFString.
        (TestWebKitAPI::Util::createURLForResource): Uses CFBundle to get the
        resource path.
        (TestWebKitAPI::Util::URLForNonExistentResource): Creates a bogus
        WKURL.

        * TestWebKitAPI/win/PlatformWebViewWin.cpp: Added.
        (TestWebKitAPI::registerWindowClass):
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::page):
        This was mostly copied from WebKitTestRunner's PlatformWebView.

        * TestWebKitAPI/win/TestWebKitAPI.sln: Added. Builds both
        TestWebKitAPI and TestWebKitAPIGeneratd. This is used by the
        build-api-tests script.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added. Builds
        TestWebKitAPI.exe.

        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj: Added. Just calls
        through to copy-resources.cmd.

        * TestWebKitAPI/win/copy-resources.cmd: Added. Copies resources into
        or deletes resources from TestWebKitAPI.resources.

        * TestWebKitAPI/win/main.cpp: Added.
        (main): Calls through to TestsController.

2010-10-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Support viewport configuration and add new arguments for WebKit EFL
        https://bugs.webkit.org/show_bug.cgi?id=47084

        Opera spec regarding to viewport meta tag was adjusted to WebCore. So, EFL port
        needs to be modified according to the changes.

        * EWebLauncher/main.c:
        (on_viewport_changed):

2010-10-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        This patch enables new-run-webkit-tests (in particular the
        chromium-win port) to run under Cygwin as well as Win32. Mostly
        this just required some conversions from cygwin paths to Win32
        paths when we spawn off Win32 binaries like test_shell.

        https://bugs.webkit.org/show_bug.cgi?id=47220

        * Scripts/webkitpy/common/system/path.py:
        - Expose the cygpath() function for path conversion

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        - shift filename->uri conversion in the TestInfo objects to the
          dump_render_tree thread

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        - use cygpath()

2010-10-12  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed. Add Yuta Kitamura (yutak) to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        When a provisional load fails, the provisional URL returned
        from WKFrameCopyProvisionalURL should be empty
        <rdar://problem/8540878>
        https://bugs.webkit.org/show_bug.cgi?id=47546

        Add test.

        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):

2010-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start fleshing out find page overlays
        https://bugs.webkit.org/show_bug.cgi?id=47559

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController find:]):
        Pass kWKFindOptionsShowOverlay to WKPageFindString.

2010-10-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] editing/input/emacs-ctrl-o.html

        ctrl-o is bound to a sequence of commands on Mac, namely:
        insertParagraphSeparator then moveLeft. In the DRT, we just interpret
        ctrl-o in EventSenderQt as '\n', i.e. insertParagraphSeparator. As a
        result we only issue one command, so don't generate the change in caret
        position that results in the extra editing delegate messages.

        So for the sake of not managing suspicious-looking differences, just
        make DRT issue the appropriate edit commands to pass the test.

        https://bugs.webkit.org/show_bug.cgi?id=47548

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::keyDown):

2010-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a simple Find UI to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=47553

        * MiniBrowser/mac/BrowserWindow.xib:
        Add Find panel.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController performFindPanelAction:]):
        Show the find panel.

        (-[BrowserWindowController find:]):
        Tell the WKPageRef to find the given string.

2010-10-12  Tony Chang  <tony@chromium.org>

        Unreviewed, fixing DRT compile on Windows after r69586.

        * DumpRenderTree/chromium/WebThemeEngineDRT.h:

2010-10-12  Tony Chang  <tony@chromium.org>

        Unreviewed, trying to fix NRWT on Windows.

        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WTR] Checking the path of the injected bundle is bogus
        https://bugs.webkit.org/show_bug.cgi?id=47541

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::isExistingLibrary): Added (static helper).
        Extend the path with the appropriate suffix(es) on the
        platform and check that the file exists.
        (WTR::TestController::initializeInjectedBundlePath):
        There were two bugs with the path checking:
            - the condition should have been inverted
            - QLibrary::fileName does not give back the filename
              with the library suffix so we cannot check
              that existance of the file this way.

2010-10-12  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        Implement http locking in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=47072

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_lock.py: Added.
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit WebKit2 build.

        * MiniBrowser/mac/BrowserWindowController.m:
        (getWindowFrame): Use NSRect rather than CGRect since that's what -frame returns.
        (setWindowFrame): Use NSMakeRect rather than CGRectMake since that's what -setFrame:display: expects.

2010-10-11  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        change the order of mrobinson's email addresses so bugs.webkit.org suggests the right one
        https://bugs.webkit.org/show_bug.cgi?id=47513

        bugs.webkit.org suggests mrobinson@igalia.com as an autocomplete,
        which doesn't actually work.

        * Scripts/webkitpy/common/config/committers.py:

2010-10-11  Prasad Tammana  <prasadt@chromium.org>

        Reviewed by Dmitry Titov.

        Added support for showModalDialog on chromium port.

        Implement showModalDialog for Layout tests for chromium port
        https://bugs.webkit.org/show_bug.cgi?id=46759

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::closeWidgetSoon): Quit current message loop if in a modal loop.
        (WebViewHost::runModal):  Start a nested message loop and remember that.
        (WebViewHost::WebViewHost):  Initialize m_inModalLoop.
        * DumpRenderTree/chromium/WebViewHost.h:  Add m_inModalLoop.

2010-10-11  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Cleanup font selection code for the Freetype backend
        https://bugs.webkit.org/show_bug.cgi?id=47503

        Update DRT to set values for the cursive and fantasy font families, so
        that we can generate consistent results for tests that use these families.
        Add some missing information to fonts.conf.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Always set the fantasy and cursive font
        family names.
        * DumpRenderTree/gtk/fonts/fonts.conf: Add aliases for cursive and fantasy fonts
        to our default serif font. Eventually we may want to import or require some "real"
        fonts, but this should at least ensure consistent rendering during test runs. Also
        add aliases for some other commonly used fonts in tests (Arial and Lucida Grande).
        Finally, add a missing oblique specification for DejaVu Serif, which was resulting
        in some incorrect baselines for the synthetic oblique test.

2010-10-11  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix sheriffbot not to crash when there are failing tests.  It turns out
        Python sets don't support the + operator.  We need to use union
        instead.  There's a more elegant way to do this in Python 2.6, but we
        need this code to work in 2.5.

        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/failuremap_unittest.py:

2010-10-10  Robert Hogan  <robert@webkit.org>

        Unreviewed, fix failing test from r69468.

        [Qt] Put all DRT-created pages in a page group

        Fix on r69468.

        Because we don't delete closed pages immediately in DRT we need
        to remove them from the page group explicitly instead.

        Fixes failure of fast/events/popup-blocked-from-fake-user-gesture.html

        https://bugs.webkit.org/show_bug.cgi?id=47469

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::windowCloseRequested):

2010-10-10  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Adam Barth.

        commit-queue: Add EFL-EWS status bubble to Bugzilla, now that the
        EFL-EWS bot is up and running.
        https://bugs.webkit.org/show_bug.cgi?id=47277

        * QueueStatusServer/handlers/statusbubble.py:

2010-10-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Put all DRT-created pages in a page group

        https://bugs.webkit.org/show_bug.cgi?id=47469

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::createWindow):

2010-10-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        WKFrameGetFrameLoadState() returns kWKFrameLoadStateCommitted after the load has been stopped
        <rdar://problem/8173667>
        https://bugs.webkit.org/show_bug.cgi?id=47461

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/Test.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp: Added.
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::URLForNonExistentResource):
        Adds a test for the frame load state after a failed provisional load. I wanted to test
        the frame load state after a committed load failed, but I don't believe that is possible
        to do without hooking up the http server to serve a long loading page.

2010-10-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add WebKit2 version of runBeforeUnloadConfirmPanelWithMessage
        <rdar://problem/8447690>
        https://bugs.webkit.org/show_bug.cgi?id=47459

        * MiniBrowser/mac/BrowserWindowController.m:
        (runBeforeUnloadConfirmPanel):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):

2010-10-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Need implementation of ChromeClient windowRect related functions.
        <rdar://problem/8469476>
        https://bugs.webkit.org/show_bug.cgi?id=47386

        * MiniBrowser/mac/BrowserWindowController.m:
        (getWindowFrame):
        (setWindowFrame):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):

2010-10-08  Adam Barth  <abarth@webkit.org>

        Unreviewed (Eric is on vacation in this change is trivial).

        Add a "clean" command to webkit-patch to clean the working directory
        https://bugs.webkit.org/show_bug.cgi?id=47436

        This command is useful when using SVN because "svn revert" leaves
        unversioned files behind.

        * Scripts/webkitpy/tool/commands/download.py:

2010-10-08  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Add missing limits.h include since the Qt version currently
        ran on the bot does need that.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2010-10-08  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Turn on building WTR
        https://bugs.webkit.org/show_bug.cgi?id=47349

        * Scripts/webkitdirs.pm:

2010-10-08  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] TestController needs its platform dependent methods
        https://bugs.webkit.org/show_bug.cgi?id=47413

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::initializeInjectedBundlePath):
        If the WTR_INJECTEDBUNDLE_PATH environmental variable is
        set then use that otherwise use the path where the bundle
        lives in a normal trunk build.
        (WTR::TestController::initializeTestPluginDirectory):
        Set the bundle's value. It is not used currently.
        (WTR::TestController::platformInitializeContext):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2010-10-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        WTR: Prevent sending the Done message twice on test timeout.
        https://bugs.webkit.org/show_bug.cgi?id=47410

        When InjectedBundle::done() calls stopLoading, this may trigger
        InjectedBundlePage::didFailLoadWithErrorForFrame which calls
        InjectedBundle::done() itself later in the stack.
        This would output the timeout failure message twice and confuse
        the run-webkit-tests script.

        This patch adds a third state, Stopping, which prevents WebCore
        errors to trigger done() when testing is over.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

2010-10-08  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add an activateFonts() implementation similar to DRT's initializeFonts().
        Original code by Simon Hausmann.
        https://bugs.webkit.org/show_bug.cgi?id=47402

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp: Added.
        (WTR::activateFonts):

2010-10-08  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Add support for Qt's WebKitTestRunner to old-run-webkit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=47401

        * Scripts/build-webkittestrunner:
        * Scripts/old-run-webkit-tests:

2010-10-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WTR first compile: fix compile issues.
        https://bugs.webkit.org/show_bug.cgi?id=47343

        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestInvocation.cpp:

2010-10-07  Antonio Gomes  <agomes@rim.com>

        Reviewed by Simon Fraser.

        [Mac] [DRT] implement setSpatialNavigationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=47291

        Implemented LayoutTestController::setSpatialNavigationEnabled for Mac's DRT
        so it can track regression on the existing implementation and future improvements
        we are making.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setSpatialNavigationEnabled):

2010-10-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        rebaseline-chromium-webkit-tests relied on the filename_to_uri()
        hook in the Port infrastructure to generate URIs for the files
        in its summary HTML report; however, that method is supposed to only
        be used for test files (and should really be renamed), so this would
        crash.

        This change adds a new "path" module to the system package with a
        routine called abspath_to_uri() that handles converting paths to
        file: URIs independently of anything in the layout_tests package,
        and changes the code to use this. At some point in the near future
        the layout_tests/port/* code should use this as well.

        This change also deletes a bunch of unused code and fixes some
        comments in rebaseline_chromium_webkit_tests.py.

        https://bugs.webkit.org/show_bug.cgi?id=47319

        * Scripts/webkitpy/common/system/path.py: Added.
        * Scripts/webkitpy/common/system/path_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2010-10-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] The FreeType backend does not respect the FC_EMBOLDEN property
        https://bugs.webkit.org/show_bug.cgi?id=46216

        Fix my latest commit, as it contained some bad changes from a merge gone wrong.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Also initialize the DevaVu Sans font.

2010-10-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Minor naming cleanup in WebDragData, part 2
        https://bugs.webkit.org/show_bug.cgi?id=47227

        Update DRT to use the renamed methods.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (addDRTFakeFileToDataObject):

2010-10-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a WKPageFindClient, hook up WKPageCountStringMatches
        https://bugs.webkit.org/show_bug.cgi?id=47373

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Remove hard coded paths.

        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        Fix expected result.

        * TestWebKitAPI/Tests/WebKit2/Find.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didCountStringMatches):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/find.html: Added.
        Add test for WKPageCountStringMatches.

2010-09-21  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] The FreeType backend does not respect the FC_EMBOLDEN property
        https://bugs.webkit.org/show_bug.cgi?id=46216

        * DumpRenderTree/gtk/fonts/fonts.conf: Add a setting which enables FC_EMBOLDEN
        for DejaVu Serif when there is no bold version available. This is necessary to
        properly test the property in layout tests.

2010-10-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>, Andras Becsi  <abecsi@webkit.org>, Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WTR's InjectedBundle build files.
        https://bugs.webkit.org/show_bug.cgi?id=47333

        * Scripts/webkitdirs.pm:
        * WebKitTestRunner/DerivedSources.pro: Added.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Added.
        * WebKitTestRunner/WebKitTestRunner.pro: Added.
        * WebKitTestRunner/qt/DerivedSources.pro: Removed.
        Content merged in ../DerivedSources.pro

2010-10-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69315.
        http://trac.webkit.org/changeset/69315
        https://bugs.webkit.org/show_bug.cgi?id=47363

        Forgot to add the new files (Requested by kbalazs on #webkit).

        * Scripts/webkitdirs.pm:
        * WebKitTestRunner/qt/DerivedSources.pro: Added.

2010-10-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Change API tester to ask the executable for the list of all
        tests instead of relying on the directory structure.
        https://bugs.webkit.org/show_bug.cgi?id=47359

        * Scripts/run-test-webkit-api: Added.
        * Scripts/webkitdirs.pm:
        Add additional script to just launch the api tester with the correct settings.

        * Scripts/run-api-tests:
        Change to use the new --dump-tests options to build the list of tests and change
        output to reflect a (suite, testcase) tuple for each test. Also adds some color.

        * TestWebKitAPI/Test.h:
        (TestWebKitAPI::Test::Register::Register):
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp:
        (TestWebKitAPI::TEST):
        Give each test a suite name in addition to the test name.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::dumpTestNames):
        (TestWebKitAPI::TestsController::runTestNamed):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        (main):
        Add option to print all registered tests.

2010-10-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>, Andras Becsi  <abecsi@webkit.org>, Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WTR's InjectedBundle build files.
        https://bugs.webkit.org/show_bug.cgi?id=47333

        * Scripts/webkitdirs.pm:
        * WebKitTestRunner/DerivedSources.pro: Added.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Added.
        * WebKitTestRunner/WebKitTestRunner.pro: Added.
        * WebKitTestRunner/qt/DerivedSources.pro: Removed.
        Content merged in ../DerivedSources.pro

2010-10-07  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed. Do a renaming that was recommended by the reviewer
        (Kenneth) but I forgot to do before landing (http://trac.webkit.org/changeset/69253)

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::RunUntilConditionLoop::start):
        (WTR::RunUntilConditionLoop::RunUntilConditionLoop):
        (WTR::TestController::runUntil):

2010-10-07  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Watchdog timer implementation for WTR
        https://bugs.webkit.org/show_bug.cgi?id=47337

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Factor out
        the definition of the timer type to a typedef.
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp: Added.
        Timer implementation with QTimer and a helper QObject class.
        (WTR::WatchdogTimerHelper::instance):
        (WTR::WatchdogTimerHelper::timerFired):
        (WTR::WatchdogTimerHelper::WatchdogTimerHelper):
        (WTR::LayoutTestController::platformInitialize):
        (WTR::LayoutTestController::invalidateWaitToDumpWatchdogTimer):
        (WTR::LayoutTestController::initializeWaitToDumpWatchdogTimerIfNeeded):

2010-10-07  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed buildfix for 69297 again

        * WebKitTestRunner/TestController.cpp:
        (WTR::blankURL):

2010-10-07  Balazs Kelemen  <Balazs Kelemen>

        Unreviewed trivial build fix for r69297

        * WebKitTestRunner/TestController.cpp:
        (WTR::blankURL):

2010-10-07  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner should be portable
        https://bugs.webkit.org/show_bug.cgi?id=45393

        Use only the WebKit API for working with urls.
        * WebKitTestRunner/StringFunctions.h:
        (WTR::createWKURL):
        * WebKitTestRunner/TestController.cpp:
        (WTR::blankURL):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didFinishLoadForFrame):

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Use gtk_widget_draw() instead of gtk_widget_get_snapshot() in PixelDumpSupportGtk when building with gtk3
        https://bugs.webkit.org/show_bug.cgi?id=47332

        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        (createBitmapContextFromWebView):

2010-10-06  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Remove unused accessibility functions from webkit.
        https://bugs.webkit.org/attachment.cgi?bugid=46707

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-10-06  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Adam Roben.

        Fix the sunspider-compare-results to actually use the passed in value for $root.

        * Scripts/sunspider-compare-results:

2010-10-06  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Runloop implementation for WTR
        https://bugs.webkit.org/show_bug.cgi?id=47280

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        Implemented TestController::runUntil by a timerEvent
        and a QEventLoop. We step into the event loop from runUntil.
        While we are waiting in the loop a timerEvent is periodically
        checking the value of the condition. Once the condition has
        becoming true the timerEvent wakes us up.
        (WTR::RunUntilLoop::start):
        (WTR::RunUntilLoop::RunUntilLoop):
        (WTR::RunUntilLoop::run):
        (WTR::RunUntilLoop::timerEvent):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::runUntil):
        * WebKitTestRunner/qt/main.cpp:
        Start the main event loop first and creating the TestController later.
        (Launcher::Launcher):
        (Launcher::~Launcher):
        (Launcher::launch): Creating the TestController.
        (main): Setting up a timer for calling Launcher::launch from
        the main event loop.

2010-10-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Kenneth Russell.

        new-run-webkit-tests: fix typo in chromium-gpu that was trying to
        enable 'accelerated-composting' instead of 'accelerated-compositing'.

        https://bugs.webkit.org/show_bug.cgi?id=47312

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2010-10-06  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] PlatformWebView implementation for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=47276

        The implementation follows the way how
        we use the API in MiniBrowser.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::wkView):
        (WTR::WebView::~WebView):
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2010-10-06  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WebKitTestRunner's build files
        https://bugs.webkit.org/show_bug.cgi?id=44155

        Parts was taken by Zoltan Horvath's patch.

        * Scripts/generate-forwarding-headers.pl: Moved from WebKit2.
        * Scripts/webkitdirs.pm: Make the generated files needed by WTR.
        * WebKitTestRunner/PlatformWebView.h: Addeed typedefs for
        PlatformWKView and PlatformWindow (void* for now).
        Buildfix the case when __APPLE__ is not defined.
        * WebKitTestRunner/qt/DerivedSources.pro: Added.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp: Added.
        Empty stub implementation.
        (WTR::registerWindowClass):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        * WebKitTestRunner/qt/TestControllerQt.cpp: Added.
        Empty stub implementation.
        (WTR::registerWindowClass):
        (WTR::TestController::runUntil):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::initializeInjectedBundlePath):
        (WTR::TestController::initializeTestPluginDirectory):
        (WTR::TestController::platformInitializeContext):
        * WebKitTestRunner/qt/WebKitTestRunner.pro: Added.
        * WebKitTestRunner/qt/main.cpp: Added.
        (main):

2010-10-06  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r69202.
        http://trac.webkit.org/changeset/69202
        https://bugs.webkit.org/show_bug.cgi?id=46937

        Broke compile of test_shell

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (addDRTFakeFileToDataObject):

2010-10-06  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Minor naming cleanup in WebDragData, part 2
        https://bugs.webkit.org/show_bug.cgi?id=46937

        Update DRT to use the renamed methods.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (addDRTFakeFileToDataObject):

2010-10-06  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/47270> Move WebArchive serialization code into its own file

        Reviewed by Adam Roben.

        This is the first step in making webarchive tests work on
        Windows.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added
        new files to the project.
        * DumpRenderTree/mac/DumpRenderTree.mm: Removed code that moved
        to WebArchiveDumpSupport.mm.
        * DumpRenderTree/mac/WebArchiveDumpSupport.h: Added.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm: Copied from WebKitTools/DumpRenderTree/mac/DumpRenderTree.mm.
        (serializeWebArchiveToXML):

2010-10-05  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        Add infrastructure to towards detecting change log diffs that aren't at the top of the ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=46058

        Make VCSUtils::fixChangeLogPatch() return a reference to a hash
        structure so as to support returning additional information
        about a change log diff.

        Currently, VCSUtils::fixChangeLogPatch() returns a string that
        represents the change log diff. Towards supporting the return
        of additional information, such as whether the change log diff
        inserts an entry at the top of the ChangeLog file, we need to
        make VCSUtils::fixChangeLogPatch() return a reference to hash
        structure.

        * Scripts/VCSUtils.pm:
          - Modified fixChangeLogPatch() to return a reference to a
            hash structure.
          - Added documentation to fixChangeLogPatch().
          - Modified call site in mergeChangeLogs() as necessary.
        * Scripts/svn-apply:
          - Modified call site in patch() as necessary.
        * Scripts/svn-create-patch:
          - Modified call site in generateDiff() as necessary.
        * Scripts/svn-unapply:
          - Modified call site in patch() as necessary.
        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl:
          - Modified the unit tests as necessary.

2010-10-05  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        fix the link to the expected image on windows
        https://bugs.webkit.org/show_bug.cgi?id=47228

        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py: On
            windows, the file must be opened in binary mode when writing
            binary data.

2010-10-05  Adam Barth  <abarth@webkit.org>

        Update expected result of unittest to match Tony's change below.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-10-05  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai (over the shoulder).

        Paper over errors in image_diff so we don't crash the whole test run.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-10-05  Tony Chang  <tony@chromium.org>

        Unreviewed, make shutil.rmtree more resiliant to errors
        since windows was raising WindowsError: The process cannot access the file because it
        is being used by another process.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-10-05  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] fix image diffing in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=47128

        * Scripts/webkitpy/layout_tests/port/chromium.py: Stop using
            NamedTemporaryFile since it doesn't work on Windows.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-10-05  Kenneth Russell  <kbr@google.com>

        Reviewed by Tony Chang.

        [chromium] Implement layerTreeAsText in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=47216

        Plumbed Frame::layerTreeAsText through Chromium's WebKit API to
        make it callable from DumpRenderTree.

        No new tests; verified with existing compositor layout tests.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/chromium/LayoutTestController.h:

2010-10-05  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * DumpRenderTree/win/ImageDiff.vcproj: Use WinCairo debug
        property sheet so proper libraries are linked.

2010-10-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix url conversion in QWebHistory

        Converting from KURL to WFT::String to QUrl does not
        permit proper percent encoding later.

        https://bugs.webkit.org/show_bug.cgi?id=47048

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::dumpHistoryItem):

2010-10-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r68966?): All dumpAsText test fail on WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=47188
        <rdar://problem/8514104>

        When constructing the std::string, use the real string length instead of the maximum buffer size.

        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::toSTD):
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toSTD):

2010-10-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add MIMEType accessor to WKFrame
        <rdar://problem/8347683>
        https://bugs.webkit.org/show_bug.cgi?id=47138

        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::toSTD):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp: Added.
        (TestWebKitAPI::didStartProvisionalLoadForFrame):
        (TestWebKitAPI::didCommitLoadForFrame):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp: Added.
        (TestWebKitAPI::didStartProvisionalLoadForFrame):
        (TestWebKitAPI::didCommitLoadForFrame):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/basic-1.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/icon.png: Added.
        * TestWebKitAPI/Tests/WebKit2/simple.html: Added.
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::createURLForResource):

2010-10-05  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        [NRWT] Rename current_dir to current_group because it's not a directory
        https://bugs.webkit.org/show_bug.cgi?id=47169

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        r69065 broke test-webkitpy by trying to create a '/tmp-X' directory,
        which can't always be done. This test uses tempfile.mkdtemp(), which
        should be safe.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Add missing "from __future__ import with_statement" that was
        breaking test-webkitpy on the Leopard bots (broke in r69040).

        * Scripts/webkitpy/layout_tests/port/google_chrome.py:

2010-10-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69066.
        http://trac.webkit.org/changeset/69066
        https://bugs.webkit.org/show_bug.cgi?id=47163

        Made NRWT reliability worse. (Requested by tkent on #webkit).

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-10-04  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Reverse the http tests to alphabetical order.
        https://bugs.webkit.org/show_bug.cgi?id=47075

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-04  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix timeout on http/tests/navigation/post-goback2.html and postredirect-goback2.html

        We need to queue back and forward navigations in the DRT from the
        LayoutTestController so that maybeDump() knows about them.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):

2010-10-04  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] fix image diffing in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=47128

        * Scripts/webkitpy/layout_tests/port/chromium.py: Flush data to the
              temp file and check the image_diff error code more carefully
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        aroben's change in r68792 actually broke new-run-webkit-tests when
        running the DRT code path. His change was intended to fix the
        way we were converting windows paths to URIs when running under
        Cygwin (the paths were getting one too many "/" on the front).
        However, the change ended up breaking the chromium_win port, which
        had slightly different logic.

        This patch removes the port-specific code and adds tests to make
        sure we're getting the behavior we expect. The Port object no longer
        exposes a get_absolute_path() method that can be used outside of
        of converting test filenames, because it's unreliable otherwise
        (we don't have the right context to know which conversion is intended).

        https://bugs.webkit.org/show_bug.cgi?id=47140

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Handle crash introduced in r69040 if we are not running in a
        Chromium checkout.

        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Add a way for us to have test expectations that are specific to the
        official builds of Google Chrome (as opposed to Chromium). This change
        looks for an additional "test_expectations_chrome.txt" file in
        Chromium's repository (webkit/tools/layout_tests), and uses the
        concatenation of that file and the regular test_expectations.txt
        file for test overrides.

        https://bugs.webkit.org/show_bug.cgi?id=46854

        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:

2010-10-04  Simon Fraser  <simon.fraser@apple.com>

        Color tests in the list based on existing pass/fail result.
        
        Fix the summary data to account for htmlOnly and nonHTML tests.

        * CSSTestSuiteHarness/harness/harness.css:
        (#test-list > option.pass):
        (#test-list > option.fail):
        (#test-list > option.skipped):
        * CSSTestSuiteHarness/harness/harness.js:
        (Test):
        (Test.prototype.statusForFormat):
        (TestSuite.prototype.fillTestList):
        (TestSuite.prototype.updateTestList):
        (TestSuite.prototype.recordResult):
        (TestSuite.prototype.markTestCompleted):
        (TestSuite.prototype.countTestsWithFlag):
        (TestSuite.prototype.queryDatabaseForSummary.this.db.transaction):
        (TestSuite.prototype.queryDatabaseForSummary):

2010-10-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: doAXRangeForLine does not work
        https://bugs.webkit.org/show_bug.cgi?id=47101

        DRT support to handle NSAccessibilityRangeForLineParameterizedAttribute.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (rangeForLineCallback):
        (AccessibilityUIElement::rangeForLine):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::rangeForLine):

2010-10-04  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-10-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to set the CacheModel in Webkit2
        https://bugs.webkit.org/show_bug.cgi?id=47066

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]): Opt minibrowser into
        a PrimaryWebBrowser cache model.

2010-10-03  Simon Fraser  <simon.fraser@apple.com>

        Make sure to enter all tests when creating the database
        for the first time.
        
        When migrating to a new version of the suite, be sure to
        sync up the database and testinfo.data by removing old
        tests, and inserting new ones.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.openDatabase.creation):
        (TestSuite.prototype.databaseCreated):
        (TestSuite.prototype.populateDatabaseFromTestInfoData):
        (TestSuite.prototype.insertTest):

2010-10-03  Simon Fraser  <simon.fraser@apple.com>

        More work on treating HTML4 and XHTML1 independently; when 
        changing the format, rebuild the test list, and update the 
        numbers in the chapter popup.

        * CSSTestSuiteHarness/harness/harness.js:
        (Test):
        (Test.prototype.runForFormat):
        (Test.prototype.completedForFormat):
        (ChapterSection):
        (ChapterSection.prototype.countTests):
        (Chapter):
        (Chapter.prototype.description):
        (Chapter.prototype.countTests):
        (Chapter.prototype.testCount):
        (Chapter.prototype.untestedCount):
        (TestSuite.prototype.buildChapters):
        (TestSuite.prototype.loadCurrentTest):
        (TestSuite.prototype.updateProgressLabel):
        (TestSuite.prototype.processFlags):
        (TestSuite.prototype.formatChanged):

2010-10-03  Simon Fraser  <simon.fraser@apple.com>

        Update test suite version 20101001.
        
        Handle database migration, and delete tests from the db that are
        not present in testinfo.data.
        
        Load about:blank into the test frame before the test url, to make
        missing tests more obvious.
        
        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.loadTest):
        (TestSuite.prototype.openDatabase.creation):
        (TestSuite.prototype.openDatabase.migration1_0To1_1):
        (TestSuite.prototype.openDatabase.if.return):
        (TestSuite.prototype.databaseReady):
        (TestSuite.prototype.populateDatabaseFromTestInfoData):
        (TestSuite.prototype.syncDatabaseWithTestInfoData.this.db.transaction):
        (TestSuite.prototype.syncDatabaseWithTestInfoData):

2010-10-02  Simon Fraser  <simon.fraser@apple.com>

        Add the ability to jump to a specific test.

        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.goToTestByName):
        (TestSuite.prototype.switchToFormat):

2010-10-02  Simon Fraser  <simon.fraser@apple.com>

        For a ref test, load the ref in the same format (HTML4 vs XHTML1)
        as the test.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.loadRef):

2010-10-02  Simon Fraser  <simon.fraser@apple.com>

        Update the UI to reflect the fact that each test needs to be tested
        in both HTML4 and XHTML1 format.
        
        * CSSTestSuiteHarness/harness/harness.js:
        (Test):
        (Chapter.prototype.description):
        (Chapter.prototype.untestedCount):
        (TestSuite.prototype.fillChapterPopup):
        (TestSuite.prototype.updateChapterPopup):
        (TestSuite.prototype.fillTestList):
        (TestSuite.prototype.updateTestList):
        (TestSuite.prototype.goToNextIncompleteTest):
        (TestSuite.prototype.firstIncompleteTestIndex):
        (TestSuite.prototype.recordResult):
        (TestSuite.prototype.formatChanged):
        (TestSuite.prototype.markTestCompleted):
        (TestSuite.prototype.resetTestStatus):

2010-10-01  Simon Fraser  <simon.fraser@apple.com>

        Add the ability to remove results for re-testing, and
        to import results.

        * CSSTestSuiteHarness/harness/harness.css:
        (.custom button):
        (#overlay):
        (#overlay.visible):
        (.overlay-contents):
        (.overlay-contents textarea):
        (.overlay-contents .buttons):
        (.overlay-contents .note):
        (.overlay-contents .buttons button):
        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.importResults):
        (TestSuite.prototype.clearResults):
        (TestSuite.prototype.markTestCompleted):
        (TestSuite.prototype.resetTestStatus):
        (TestSuite.prototype.storeTestResult):
        (TestSuite.prototype.importTestResults):
        (TestSuite.prototype.clearTestResults):

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Deploy the new WKString functions to remove most uses of CF from
        the WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWK):
        (WTR::toJS):
        (WTR::toSTD):
        (WTR::operator<<):
        (WTR::copyURLString):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didFinishLoadForFrame):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2010-10-01  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed TestResultsServer change.

        Add files introduced by http://crrev.com/61273 to the list of dashboard 
        files to update.

        * TestResultServer/handlers/dashboardhandler.py:

2010-10-01  Brian Weinstein  <bweinstein@apple.com>

        Build Fix for Windows.

        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Don't copy ForwardingHeaders from
            WebKitTestRunner/ForwardingHeaders, instead, add $(WebKitOutputDir)/include/WebCore/
            ForwardingHeaders to the include path.

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add SPI to convert a WKStringRef to a JSStringRef and vice-versa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp: Added.
        (TestWebKitAPI::TEST):

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add additional WKString API
        https://bugs.webkit.org/show_bug.cgi?id=46958

        Add basic WKStringRef tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp: Added.

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add makefile for TestWebKitAPI and call it from the base makefile.

        * Makefile:
        * TestWebKitAPI/Makefile: Added.

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Remove unnecessary ForwardingHeaders from test runners.
        https://bugs.webkit.org/show_bug.cgi?id=47010

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/ForwardingHeaders: Removed.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/ForwardingHeaders: Removed.

2010-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebSocket tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=46956

        Update these tools to understand how to run the WebSocket tests off the
        Apache server.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-01  Adam Roben  <aroben@apple.com>

        Encode Executive command arguments using UTF-8 on Cygwin

        Cygwin's Python's os.execv doesn't support unicode command arguments.
        Cygwin's execv expects arguments to be encoded using the current code
        page. But code pages are limited in what characters they can handle,
        and our tests include characters that the English code page can't
        handle.  So for now we'll just encode everything in UTF-8 on Cygwin,
        which can handle all characters but might confuse some commands, for
        expediency's sake. I'm sure we'll run into cases where UTF-8 isn't
        good enough, but we can deal with that when the problem arises.

        Reviewed by Adam Barth.

        Fixes <http://webkit.org/b/46892> <rdar://problem/8496639>
        webkitpy.common.system.executive_unittest.ExecutiveTest.test_run_command_with_unicode
        fails on Windows

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._run_command_with_teed_output):
        (Executive.run_command):
        On Cygwin, encode arguments using UTF-8.

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add simple API tester for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=46953

        This adds a very simple testing infrastructure for testing APIs exposed
        through the WebKit project. It consists of two parts: 1) a project that
        builds the all the tests 2) a script that searches the tests directory and
        calls the tester once for each test.

        This adds the infrastructure and two tests:
        - Tests/WTF/Vector1.cpp - A proof of concept test of WTF data-structures.
        - Tests/WebKit2/BasicTest1.cpp - A proof of concept test of WebKit2 API.

        This currently only works on the mac, but is designed to be easily ported 
        to any platform.

        * Scripts/run-api-tests: Added.
        * Scripts/build-api-tests: Added.
        Scripts to build/run the tests.

        * TestWebKitAPI: Added.
        * TestWebKitAPI/Configurations: Added.
        * TestWebKitAPI/Configurations/Base.xcconfig: Added.
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig: Added.
        * TestWebKitAPI/ForwardingHeaders: Added.
        * TestWebKitAPI/ForwardingHeaders/wtf: Added.
        * TestWebKitAPI/PlatformUtilities.h: Added.
        * TestWebKitAPI/PlatformWebView.h: Added.
        (TestWebKitAPI::PlatformWebView::platformView):
        * TestWebKitAPI/StringFunctions.h: Added.
        * TestWebKitAPI/Test.h: Added.
        (TestWebKitAPI::Test::~Test):
        (TestWebKitAPI::Test::name):
        (TestWebKitAPI::Test::Register::Register):
        (TestWebKitAPI::Test::Register::create):
        (TestWebKitAPI::Test::Test):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added.
        * TestWebKitAPI/TestWebKitAPIPrefix.h: Added.
        * TestWebKitAPI/TestsController.cpp: Added.
        (TestWebKitAPI::TestsController::shared):
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::runTestNamed):
        (TestWebKitAPI::TestsController::testFailed):
        (TestWebKitAPI::TestsController::registerCreateTestFunction):
        * TestWebKitAPI/TestsController.h: Added.
        * TestWebKitAPI/mac: Added.
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm: Added.
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::createURLForResource):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm: Added.
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::page):
        (TestWebKitAPI::PlatformWebView::focus):
        * TestWebKitAPI/mac/main.mm: Added.
        Infrastructure.

        * TestWebKitAPI/Tests: Added.
        * TestWebKitAPI/Tests/WTF: Added.
        * TestWebKitAPI/Tests/WTF/Vector1.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2: Added.
        * TestWebKitAPI/Tests/WebKit2/BasicTest1.cpp: Added.
        (TestWebKitAPI::State::State):
        * TestWebKitAPI/Tests/WebKit2/basic-1.html: Added.
        Proof of concept tests.

2010-10-01  Adam Roben  <aroben@apple.com>

        Don't assume AccessibleObjectFromEvent succeeds

        Fixes <http://webkit.org/b/44136> <rdar://problem/8321684> Crash in
        DumpRenderTree!notificationListenerProc when running
        plugins/access-after-page-destroyed.html

        Reviewed by Sam Weinig.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (notificationListenerProc): Check both the return value of
        AccessibleObjectFromEvent and the object it returns, as MSDN
        recommends.

2010-10-01  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Put the http and websocket tests first in the test list.
        https://bugs.webkit.org/show_bug.cgi?id=46453

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-01  Fady Samuel  <fsamuel@chromium.org>

        Unreviewed, adding myself to the committer list.

        * Scripts/webkitpy/common/config/committers.py:

2010-10-01  Adam Roben  <aroben@apple.com>

        Test NPN_GetValue(NPNVnetscapeWindow)

        Test for <http://webkit.org/b/46726> <rdar://problem/8486319>
        Right-clicking on windowless Flash plugin in WebKit2 makes a context
        menu appear in the bottom-right corner of the screen

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_GetValue): Added. Calls through to the browser.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added NPN_GetValue.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/GetValueNetscapeWindow.cpp: Added.
        (GetValueNetscapeWindow::GetValueNetscapeWindow): Initialize members.
        (GetValueNetscapeWindow::NPP_SetWindow): Test that
        NPN_GetValue(NPNVnetscapeWindow) returns a valid HWND and that it
        isn't our HWND.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added GetValueNetscapeWindow.

2010-10-01  Andreas Kling  <andreas.kling@nokia.com>

        Unreviewed, adding my webkit.org identity to reviewer list.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The WebSocket server should flush its logs
        https://bugs.webkit.org/show_bug.cgi?id=46946

        The WebSocket server logs are truncated because the driver just
        terminates the child.  It should run Python without buffering so we can
        see the end of the log.

        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2010-09-30  Simon Fraser  <simon.fraser@apple.com>

        Add a button to jump to the next untested test.
        
        * CSSTestSuiteHarness/harness/harness.css:
        (.test-type):
        (.name > button):
        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:
        (Chapter.prototype.description):
        (Chapter.prototype.untestedCount):
        (TestSuite.prototype.testInfoDataLoaded):
        (TestSuite.prototype.fillChapterPopup):
        (TestSuite.prototype.updateChapterPopup):
        (TestSuite.prototype.buildTestListForChapter):
        (TestSuite.prototype.goToNextIncompleteTest):
        (TestSuite.prototype.firstIncompleteTestIndex):
        (TestSuite.prototype.testCompletionStateChanged):

2010-09-29  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKit2 on Windows should use Windows fonts for the various standard
        font families
        https://bugs.webkit.org/show_bug.cgi?id=43499
        <rdar://problem/8272758>

        Reviewed by Adam Roben.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Use the Mac fonts for running tests. This matches DRT behavior.

2010-09-30  Adam Barth  <abarth@webkit.org>

        Third attempt.  We need a better integration test environment.

        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/failuremap_unittest.py:

2010-09-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Support for PlainTextController

        Unskip editing/text-iterator/basic-iteration.html

        https://bugs.webkit.org/show_bug.cgi?id=38805

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/PlainTextControllerQt.cpp: Added.
        (PlainTextController::PlainTextController):
        (PlainTextController::plainText):
        * DumpRenderTree/qt/PlainTextControllerQt.h: Added.

2010-09-30  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Second attempt to fix sheriffbot.

        * Scripts/webkitpy/common/net/buildbot.py:

2010-09-30  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        This patch should stop the sheriffbot from throwing an exception.

        * Scripts/webkitpy/common/net/buildbot.py:

2010-09-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        The same bots shouldn't run both Windows Debug Tests and Windows Release Tests.
        https://bugs.webkit.org/show_bug.cgi?id=46926

        * BuildSlaveSupport/build.webkit.org-config/config.json: Have two bots running Windows 
            Release Tests, and two bots running Windows Debug Tests, instead of four running both.

2010-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch find-flaky-tests should print results URLs
        https://bugs.webkit.org/show_bug.cgi?id=46917

        Printing out the results URL makes find-flaky-tests more actionable
        because you can see what happens when a test fails.  The output from
        the script is still pretty noisy, but it seems useful.

        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-30  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make 2D accelerated canvas rendering build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=46007
        
        Added ACCELERATED_2D_CANVAS to build-webkit

        * Scripts/build-webkit:

2010-09-29  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        [chromium] Add accelerated compositing support to DumpRenderTree and test_shell
        https://bugs.webkit.org/show_bug.cgi?id=46849

        Added offscreen code path for WebGraphicsContext3DDefaultImpl which
        works with the compositor integration in both DumpRenderTree and
        test_shell, since both pass a non-null WebCanvas* to WebViewImpl::paint
        and thereby trigger the compositor's readback code path. Added support
        for --enable-accelerated-compositing to DumpRenderTree.

        Tested in both test_shell and DumpRenderTree on Linux, the latter by
        modifying a compositing layout test, dumping the pixels and verifying
        that they matched the output when the compositor was active.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAcceleratedCompositingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::scheduleComposite):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-09-30  Adam Roben  <aroben@apple.com>

        Ensure that QueueEngine cleans up its log files when its delegate
        tells it to stop processing work

        Reviewed by Adam Barth.

        Fixes <http://webkit.org/b/46891> <rdar://problem/8496638> Many tests
        in webkitpy.tool.bot.queueengine_unittest.QueueEngineTest crash on
        Windows

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.run): Stop ourselves normally (including cleaning up log
        files) when the delegate tells us to stop processing work.

        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (LoggingDelegate.__init__): Moved code here from
        RaisingDelegate.__init__.
        (LoggingDelegate.expeced_callbacks): Added the stop_work_queue
        callback.
        (LoggingDelegate.stop_work_queue): Moved here from RaisingDelegate.
        (RaisingDelegate.__init__): Removed code that LoggingDelegate takes
        care of for us now.
        (QueueEngineTest.test_trivial): Make sure we got the expected stop
        message.
        (QueueEngineTest.test_not_safe_to_proceed): Changed to explicitly
        remove the callbacks that are related to processing a single work
        item, rather than removing all callbacks after a certain point, as
        there are now more callbacks we expect to receive at the end.

2010-09-30  Adam Roben  <aroben@apple.com>

        Fix path -> URL conversion on Cygwin

        Reviewed by Adam Barth.

        Fixes <http://webkit.org/b/46890> <rdar://problem/8496637> Many tests
        in webkitpy.layout_tests.run_webkit_tests_unittest assert on Windows

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.filename_to_uri): Treat Cygwin like other UNIX-y platforms by
        assuming paths already have a leading slash.

2010-09-30  Adam Roben  <aroben@apple.com>

        Teach WindowGeometryInitializedBeforeSetWindow that NPP_SetWindow can
        be called more than once

        The NPP_SetWindow call made when the plugin is torn down was confusing
        us, and was causing us to spew an error into the next test.

        Fixes <http://webkit.org/b/46900> <rdar://problem/8496888> REGRESSION
        (r68520): plugins/access-after-page-destroyed.html failing on Windows

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowGeometryInitializedBeforeSetWindow.cpp:
        (WindowGeometryInitializedBeforeSetWindow::WindowGeometryInitializedBeforeSetWindow):
        Initialize member.
        (WindowGeometryInitializedBeforeSetWindow::NPP_SetWindow): Bail if
        this isn't the first time this is called.

2010-09-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch upload warns that I'm using Xcode when I'm not
        https://bugs.webkit.org/show_bug.cgi?id=46869

        String.find returns -1 when not found, so switched to "in".

        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/common/system/user_unittest.py:

2010-09-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch failure-reason dies if non-trunk commits are in the blame range
        https://bugs.webkit.org/show_bug.cgi?id=46866

        I also made failure-reason use RegressionWindow in a cleaner way.

        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch find-flaky-tests
        https://bugs.webkit.org/show_bug.cgi?id=46876

        This command helps us find flaky tests so we can squash them.

        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-29  Simon Fraser  <simon.fraser@apple.com>

        Fix export to use '?' instead of 'null' for
        tests with no results.
        
        * CSSTestSuiteHarness/harness/harness.js:

2010-09-29  Simon Fraser  <simon.fraser@apple.com>

        Add a warning when a test requires special steps.
        Add a Print Preview button for 'paged' tests that
        brings up the print dialog, allowing the user to 
        judge paged media tests.

        * CSSTestSuiteHarness/harness/harness.css:
        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.loadTest):
        (TestSuite.prototype.processFlags):

2010-09-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove revisions_casuing_failures
        https://bugs.webkit.org/show_bug.cgi?id=46872

        This function exists only to be unit tested.

        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/failuremap_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        SheriffBot should post the list of failing tests to bugs
        https://bugs.webkit.org/show_bug.cgi?id=46871

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/regressionwindow.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-29  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson, Eric Seidel, and Mark Rowe.

        [WinCairo] Adds a build slave.
        https://bugs.webkit.org/show_bug.cgi?id=46360

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add
        entries for a debug build of the WinCairo port.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add
        platform flag to configuration for wincairo (like gtk, chromium, etc.)
        * Scripts/build-webkit: Change 'cairo-win32' labeling to 'wincairo'
        * Scripts/webkitdirs.pm: Change 'cairo-win32' labeling to 'wincairo'

2010-09-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move more SheriffBot smarts into FailureMap
        https://bugs.webkit.org/show_bug.cgi?id=46703

        This patch pushes the FailureMap model object further into the
        SheriffBot machine.  In addition, it moves a couple operations on this
        object from SheriffBot itself to the model.

        Eventually, FailureMap will be the canonical context object for
        SheriffBot operations.  FailureMap represents a map of the current
        failures on the bots that might require remediation.

        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/regressionwindow.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-29  Tony Chang  <tony@chromium.org>

        Reviewed by James Robinson.

        [chromium] enable -Werror for DRT and webkit_unit_tests on Linux
        https://bugs.webkit.org/show_bug.cgi?id=46829

        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::DRTDevToolsClient):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):
        (WebViewHost::WebViewHost):

2010-09-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: implement CSS3 Speech "speak"
        https://bugs.webkit.org/show_bug.cgi?id=46827

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (speakCallback):
        (AccessibilityUIElement::speak):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::speak):

2010-09-29  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Record bot ID when updating queue status
        https://bugs.webkit.org/show_bug.cgi?id=46764
        
        Since we now have multiple bots handling patches from the commit queue,
        we need to differentiate status updates from them, so that we can group
        the queue status page in a less confusing way.

        * QueueStatusServer/handlers/updatestatus.py: Accept bot_id as input
        * QueueStatusServer/model/queuestatus.py: Add bot_id property
        * QueueStatusServer/templates/updatestatus.html: Add bot_id input
        * Scripts/webkitpy/common/net/bugzilla_unittest.py: Extract MockBrowser
        * Scripts/webkitpy/common/net/statusserver.py: Add bot_id
        * Scripts/webkitpy/common/net/statusserver_unittest.py: Added.
        * Scripts/webkitpy/tool/main.py: Add --bot-id
        * Scripts/webkitpy/tool/mocktool.py: Add MockBrowser

2010-09-29  Simon Fraser  <simon.fraser@apple.com>

        No review.
        
        References always refert to a file in .xht format, even
        for HTML tests, so fix their loading.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.loadRef):

2010-09-28  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=41292
        Add a new parameter to the test plugin to allow specifying a script 
        and a mouse/keyboard event. The specified script will be evaluated
        in the browser when the specified event is received by the plugin.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (handleEventCarbon):
        (handleEventCocoa):

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        Fix export by adding missing argument.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.showResultsForAllTests):

2010-09-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add missing import.

        * wx/packaging/build-win-installer.py:

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        No review
        
        Show which tests have been run by dimming them out in the test list.
        
        Adjust some element sizes.
        
        * CSSTestSuiteHarness/harness/harness.css:
        (#test-list > option.untested):
        (#test-list > option.completed):
        (#output):
        (.output-options):
        * CSSTestSuiteHarness/harness/harness.js:
        (Test):
        (TestSuite.prototype.fillTestList):
        (TestSuite.prototype.updateTestList):
        (TestSuite.prototype.setSelectedChapter):
        (TestSuite.prototype.recordResult):
        (TestSuite.prototype.markTestCompleted):
        (TestSuite.prototype.testCompletionStateChanged):
        (TestSuite.prototype.loadTestStatus):

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        No review.
        
        Implement export of various queries on the test database, sharing
        code with that which displays results inline.

        * CSSTestSuiteHarness/harness/harness.js:
        ():
        (TestSuite.prototype.exportResultsCompletion.var):
        (TestSuite.prototype.exportResultsCompletion):
        (TestSuite.prototype.showResultsForCompletedTests):
        (TestSuite.prototype.exportResultsForCompletedTests):
        (TestSuite.prototype.showResultsForAllTests):
        (TestSuite.prototype.exportResultsForAllTests):
        (TestSuite.prototype.exportResultsForTestsNotRun):
        (TestSuite.prototype.exportResultsForTestsWithStatus):
        (TestSuite.prototype.exportResultsForTestsWithMismatchedResults):

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Work around uncertainty about the order of database
        transactions when creating the database, so that we don't
        try to query the table before it has been created.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite):
        (TestSuite.prototype.databaseCreated):
        (TestSuite.prototype.storeTestResult):
        (TestSuite.prototype.populateDatabaseFromTestInfoData):
        (TestSuite.prototype.queryDatabaseForTestsWithStatus):
        (TestSuite.prototype.queryDatabaseForTestsWithMixedStatus):
        (TestSuite.prototype.queryDatabaseForCompletedTests):
        (TestSuite.prototype.queryDatabaseForTestsNotRun):

2010-09-28  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        add python keyring support to webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=41269

        * Scripts/webkitpy/common/net/credentials.py: Add the ability to read passwords using
            the python keyring module
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/system/user.py: Allow confirm() to default to no and add testing params.
        * Scripts/webkitpy/common/system/user_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Cairo] FreeType fonts should obey FontConfig hinting/anti-aliasing settings
        https://bugs.webkit.org/show_bug.cgi?id=46740

        * DumpRenderTree/gtk/fonts/fonts.conf: Add specialized variants of common
        fonts which can be used to fully test FontConfig rendering settings.

2010-09-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [gtk] Fedora has a different path for the liberation fonts
        https://bugs.webkit.org/show_bug.cgi?id=46709

        When searching for DRT fonts, also look in the path where those fonts
        are commonly found on Fedora systems.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Include logic for looking for Fedora-style font paths.

2010-09-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Andreas Kling.

        run-webkit-tests needs an updated list of directories with webgl tests
        https://bugs.webkit.org/show_bug.cgi?id=46747

        Update the list of directories containing WebGL tests and a unit test
        which depends on this list.

        * Scripts/old-run-webkit-tests: Update the list of directories.
        * Scripts/webkitpy/layout_tests/port/webkit.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Update the expected result.

2010-09-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Introduce FailureMap to summaries the failures status of all the bots
        https://bugs.webkit.org/show_bug.cgi?id=46700

        This patch gives the SheriffBot a handle on the list of failing tests.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/failuremap.py: Added.
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-28  Adam Roben  <aroben@apple.com>

        Update for the addition of WKPageUIClient::didNotHandleKeyEvent

        Fixes <http://webkit.org/b/46660> <rdar://problem/8483465> Need API to
        tell a WebKit2 client application that a key event was not handled

        Reviewed by Kenneth Rohde Christiansen and Sam Weinig.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        Unreviewed.

        Update the CSSTestSuiteHarness to not scrape the XHTML chapter files
        for the test order, but instead use information from testinfo.data.
        
        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:

2010-09-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, don't try to get the svn revision from the git repo when packaging,
        it causes the process to hang on the gitorious repo.

        * wx/packaging/build-mac-installer.py:
        * wx/packaging/build-win-installer.py:

2010-09-28  Adam Roben  <aroben@apple.com>

        Test that a plugin's HWND is sized/positioned before NPP_SetWindow is
        called

        Reviewed by Anders Carlsson.

        Test for <http://webkit.org/b/46716> <rdar://problem/8482014>
        Full-page Adobe Reader does not paint until window is resized

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_SetWindow): Added. Just returns NPERR_NO_ERROR at
        this level.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Declared
        NPP_SetWindow.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowGeometryInitializedBeforeSetWindow.cpp: Added.
        (WindowGeometryInitializedBeforeSetWindow::NPP_SetWindow): Checks that
        the plugin's HWND has a non-zero size and that its size/position
        matches that specified in the NPWindow.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_SetWindow): Call through to the PluginTest.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added WindowGeometryInitializedBeforeSetWindow.cpp, and let VS reorder
        the files as it saw fit.

2010-09-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Remove support for Qt 4.5
        https://bugs.webkit.org/show_bug.cgi?id=46718

        Remove the code for versions of Qt prior to 4.6.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::addTouchPoint):
        (EventSender::updateTouchPoint):
        (EventSender::setTouchModifier):
        (EventSender::touchStart):
        (EventSender::touchMove):
        (EventSender::touchEnd):
        (EventSender::clearTouchPoints):
        (EventSender::releaseTouchPoint):
        (EventSender::sendTouchEvent):
        * DumpRenderTree/qt/EventSenderQt.h:
        * DumpRenderTree/qt/TextInputControllerQt.cpp:
        (TextInputController::setMarkedText):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::sendTouchEvent):
        (LauncherWindow::eventFilter):
        (LauncherWindow::applyZoom):
        (LauncherWindow::setTouchMocking):
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/utils.cpp:
        (urlFromUserInput):
        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::animatedFlip):
        (WebViewGraphicsBased::animatedYFlip):
        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::setYRotation):

2010-09-28  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Andreas Kling.

        Fix DRT compilation on WinCE. Introduce a WCECOMPAT variable
        which should point to wcecompat installation. Needs wcecompat
        library from http://github.com/mauricek/wcecompat .

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2010-09-28  Daniel Bates  <dbates@rim.com>

        Rollout changeset 68493 <http://trac.webkit.org/changeset/68493>
        <https://bugs.webkit.org/show_bug.cgi?id=39136>

        Rollout changeset 68493 because it broke Sheriffbot's rollout feature.
        In particular, this change caused Sheriffbot to raise an exception when
        trying to parse the bug id on a bug page. We need to look into this
        some more.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/steps/closebug.py:
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:

2010-09-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move RegressionWindow further up the dependency chain
        https://bugs.webkit.org/show_bug.cgi?id=46698

        Baby steps towards pushing this information into bug posts.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/regressionwindow.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-27  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        sheriffbot can't roll out security patches
        https://bugs.webkit.org/show_bug.cgi?id=39136

        Make SheriffBot determine if it's authorized to view a bug
        whose change it wants to rollout before it tries to rollout
        the change.

        Moreover, make both webkit-patch and Sheriffbot provide human-
        readable error messages when they are not authorized to view
        a bug and when a bug number is invalid.

        Currently, Sheriffbot does not parse Bugzilla bugs for
        <bug error="...">, which indicates an error when retrieving
        a bug. In particular, error="NotPermitted" if a person (or bot)
        is not authorized to view a bug. For such error="NotPermitted" bugs,
        Sheriffbot raises an exception when parsing the bug report and
        this exception does not explicitly indicate Sheriffbot's lack
        of authorization. Instead, Sheriffbot should explicitly check
        for the presence <bug error="..."> before operating on a bug
        and error with a human-readable message if it's not permitted
        to view it.

        * Scripts/webkitpy/common/net/bugzilla.py: Added BugzillaError class.
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
          - Added unit test test_bug_parsing_for_bugzilla_not_permitted_error().
          - Added unit test test_bug_parsing_for_bugzilla_not_found_error().
          - Added unit test test_bug_parsing_for_bugzilla_invalid_bug_id_error().
        * Scripts/webkitpy/tool/bot/sheriff.py: Modified to catch BugzillaError.
        * Scripts/webkitpy/tool/commands/download.py: Ditto.
        * Scripts/webkitpy/tool/commands/queues.py: Ditto.
        * Scripts/webkitpy/tool/commands/upload.py: Ditto.
        * Scripts/webkitpy/tool/steps/closebug.py: Ditto.
        * Scripts/webkitpy/tool/steps/obsoletepatches.py: Ditto.
        * Scripts/webkitpy/tool/steps/preparechangelog.py: Ditto.
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py: Ditto.

2010-09-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Expose more more failure information from Buildbot to SheriffBot
        https://bugs.webkit.org/show_bug.cgi?id=46697

        This patch moves the information about what tests failured closer to
        SheriffBot.  There are still a couple more patches to go before
        SheriffBot can post this information to bugs, but this is a step in
        that direction.  Yay for unit tests, which caught some bugs in earlier
        versions of this patch.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/regressionwindow.py: Added.
        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-27  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fixing 500 error seen in the status server.

        It turns out that a = b = []; b.append(1); then a[0] will be 1!
        This should have been obvious to me, I guess, but it was not what I was expecting.

        * QueueStatusServer/model/activeworkitems.py:

2010-09-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue should reject patches that fail to land
        https://bugs.webkit.org/show_bug.cgi?id=46694

        This can happen, for example, if there's no reviewer.  Without this
        patch, we'll keep retrying the patch.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:

2010-09-27  Simon Fraser  <simon.fraser@apple.com>

        Rubber-stamped by Adele Peterson.

        Add a harness for running the CSS 2.1 test suite.
        
        This harness assumes that you've got a local a copy of the suite
        adjacent to the 'harness' directory.
        
        The harness lets you go through the tests in chapter order,
        denoting pass/fail/skipped for each test.
        
        It uses a client-side database to store the results of testing.

        * CSSTestSuiteHarness/harness/harness.css: Added.
        * CSSTestSuiteHarness/harness/harness.html: Added.
        * CSSTestSuiteHarness/harness/harness.js: Added.

2010-09-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Patch locks should expire if a patch is marked for retry
        https://bugs.webkit.org/show_bug.cgi?id=46682

        This was part Adam's original CommitQueueTask design,
        but support for it was missing from the server.
        I added the support, but triggering lock-release based on this
        special "retry" status feels a bit strange so I added a FIXME.

        I also changed the text in queuestatus.html to say "Lock Acquired"
        since "Last Activity" isn't really true.  We only update the lock
        date when the patch is started, not on every status update.

        I also noticed an exception in next-patch, which I fixed by re-writing
        the unzip logic in activeworkitems.py again.

        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/templates/queuestatus.html:

2010-09-27  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] fix a warning when compiling DRT on 32-bit linux
        https://bugs.webkit.org/show_bug.cgi?id=46641

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter::handleImage):

2010-09-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queue-status should report when the patch was last locked to a queue
        https://bugs.webkit.org/show_bug.cgi?id=46674

        This isn't necessarily the best way to expose this information
        but having this accessible via the web interface is very
        useful until we come up with a nicer way to display this.

        I also cleaned up the code in activeworkitems.py a little
        to use list comprehensions and to have the code work with
        pairs instead of two lists at once.  Eventually I think those
        item/time pairs need to be their own little helper class.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/templates/queuestatus.html:

2010-09-27  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] fix detection of missing fonts on DRT
        https://bugs.webkit.org/show_bug.cgi?id=46651

        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (setupFontconfig):  Only print an error message if lohit isn't found in both locations.

2010-09-27  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        add webkit unit tests to the chromium testers
        https://bugs.webkit.org/show_bug.cgi?id=46669

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/run-chromium-webkit-unit-tests: Fix a bug where we weren't using the right configuration.

2010-09-27  Kwang Yul Seo  <skyul@company100.net>

        Unreviewed.

        Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-27  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        webkitpy.common.system.user_unittest.UserTest.test_prompt_with_list spams the console
        https://bugs.webkit.org/show_bug.cgi?id=46634
        
        Use OutputCapture to prevent console spam (and also check for expected
        output).

        * Scripts/webkitpy/common/system/user_unittest.py:

2010-09-27  Eric Seidel  <eric@webkit.org>

        Reviewed by James Robinson.

        start-commit-queue should abort any rebases in progress
        https://bugs.webkit.org/show_bug.cgi?id=46640

        webkit-patch commit-queue would do this itself, but this just
        helps ensure that the commit-queue script is properly updated
        before we run it (in the case where a previous rebase is in
        progress the git svn rebase would not work before we run the
        commit-queue).

        * EWSTools/start-commit-queue.sh:

2010-09-18  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Clean up the DRT fonts.conf and switch to Liberation
        https://bugs.webkit.org/show_bug.cgi?id=46038

        Switch to Liberation fonts for GTK+ layout tests. This will make our
        test results metric-compatible with many Windows/Chromium results. It
        also simplifies the fonts.conf that we load and prepares the way for
        fixing many font bugs.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Initialize a known list of fonts instead of loading
        every font in the WEBKIT_TESTFONTS directory.
        * DumpRenderTree/gtk/fonts.conf: Removed.
        * DumpRenderTree/gtk/fonts/AHEM____.TTF: Copied from WebKitTools/DumpRenderTree/qt/fonts/AHEM____.TTF.
        * DumpRenderTree/gtk/fonts/fonts.conf: Added.
        * GNUmakefile.am: Modify FONTS_CONF_FILE to be FONTS_CONF_DIR, so that
        we can load both fonts.conf and AHEM____.TTF from this location.
        * Scripts/old-run-webkit-tests: Remove the check for WEBKIT_TESTFONTS, since
        it is no longer used.

2010-09-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-httpd fails if Perl is not installed
        https://bugs.webkit.org/show_bug.cgi?id=46602
        
        Make Port._read_configuration catch all exceptions, since trying to run
        perl (because of _webkit_build_directory) when it's not installed throws
        a WindowsError or OSError, not an IOError (this became an issue after 
        r68268, since ChromiumPort ends up calling Port.default_configuration in
        its constructor, which means that we're ending up on this codepath in
        non-NRWT cases too, e.g. for the Chromium NaCl tests, which use
        new-run-webkit-httpd).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2010-09-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add setting API to set a local storage database path.
        https://bugs.webkit.org/show_bug.cgi?id=45446

        Add a setting API to set local storage database path.

        * EWebLauncher/main.c:
        (on_key_down):
        (browserCreate):
        (main):

2010-09-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move shared WebKit2 API (used by both bundle and main API) to WebKit2/Shared/API
        https://bugs.webkit.org/show_bug.cgi?id=46587

        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

2010-09-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Kenneth Rohde Christiansen.

        DRT/Mac nodesFromRect support

        [Mac][DRT] Implement LayoutTestController::nodesFromRect
        https://bugs.webkit.org/show_bug.cgi?id=46580

        Implements LayoutTestController::nodesFromRect for Mac DRT, and
        adding stubs for GTK+ and Windows.

        * DumpRenderTree/LayoutTestController.cpp:
        (nodesFromRectCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::LayoutTestController::nodesFromRect):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::nodesFromRect):

2010-09-25  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=46555
        Fix typo in prepare-ChangeLog's help output.

        * Scripts/prepare-ChangeLog:

2010-09-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Implement WebKit2 callback equivalent to -[WebUIDelegate mouseDidMoveOverElement:modifierFlags:]
        <rdar://problem/8359279>
        https://bugs.webkit.org/show_bug.cgi?id=46546

        * MiniBrowser/mac/BrowserWindowController.m:
        (mouseDidMoveOverElement):
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (mouseDidMoveOverElement):
        (BrowserView::create):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):

2010-09-24  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Allow rebaselines for webkit-patch rebaseline to be chosen
        https://bugs.webkit.org/show_bug.cgi?id=46407
        
        Instead of always rebaselining all failing tests, allow a subset to be
        chosen.

        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2010-09-24  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        [chromium] Implement TextInputController::firstRectForCharacterRange
        https://bugs.webkit.org/show_bug.cgi?id=38100

        Implemented TextInputController::firstRectForCharacterRange for chromium platform.
        No new tests are added since we need to implement the same feature in chromium side
        in order to enable any tests that uses this function.

        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::firstRectForCharacterRange): Added.

2010-09-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue reports land failures as "PASS"
        https://bugs.webkit.org/show_bug.cgi?id=46530

        We were ignoring the return value of land instead of passing it back to
        CommitQueue.  Of course, this was the one case I forgot to test!

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:

2010-09-24  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Eric Seidel.

        new-run-webkit-tests prints out nothing when build-dumprendertree fails
        https://bugs.webkit.org/show_bug.cgi?id=37563

        Print error message when build-dumprendertree fails.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-09-24  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        NRWT doesn't respect config set with set-webkit-configuration
        https://bugs.webkit.org/show_bug.cgi?id=46278
        
        Use Port.default_configuration() instead of hardcoding Release in
        ChromiumPort configuration initialization, so that we still inherit the
        configuration set by set-webkit-configuration.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-09-24  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] Fix the code to check file existence.
        https://bugs.webkit.org/show_bug.cgi?id=46465

        * QtTestBrowser/main.cpp:
        (main):

2010-09-23  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r68232.
        http://trac.webkit.org/changeset/68232

        Broken NRWT on the canary bots.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-09-23  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        r68008 broke new-run-webkit-tests in that the chromium ports no
        longer respect set-webkit-configuration. The correct fix for this
        is being pursued in bug 46278 (along with a bunch of unit tests),
        but in the meantime I'm reverting the particular lines that broke
        things. This was tested by hand.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-09-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 API: Need way to know when a frame is removed from the hierarchy
        <rdar://problem/8414062>
        https://bugs.webkit.org/show_bug.cgi?id=46432

        * MiniBrowser/mac/BrowserWindowController.m:
        (didRemoveFrameFromHierarchy):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-09-23  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] implement layoutTestController.sampleSVGAnimationForElementAtTime
        https://bugs.webkit.org/show_bug.cgi?id=46426

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        * DumpRenderTree/chromium/LayoutTestController.h:

2010-09-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Nate Chapin.

        [GTK] r68199 introduced two test failures
        https://bugs.webkit.org/show_bug.cgi?id=46424

        Fix a regression handling preference overrides that are attached to boolean properties.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): g_strcasecmp returns 0 when strings match
        so we must check for that when converting a string to a boolean.

2010-09-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        Fix a condition check in ServerProcess, which becomes relevant when reading binary data.
        https://bugs.webkit.org/show_bug.cgi?id=46406

        This breaks when the method is called with specified size of data (image data), and the
        buffer hasn't yet reached this size.

        * Scripts/webkitpy/layout_tests/port/server_process.py: Changed to check for values of
          index larger than 0.

2010-09-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Nate Chapin.

        [GTK] Some tests from r68174 fail on the GTK+ bots
        https://bugs.webkit.org/show_bug.cgi?id=46396

        Simplify LayoutTestController::overridePreference to make it easier for
        people unfamiliar with the code to keep the list of preferences up to date.
        Add the conversion for enable-hyperlink-auditing.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): Use a simple if-else block to determine
        out the property name for overrridePreference. Also simplify the logic for setting
        string properties. Add the conversion for enable-hyperlink-auditing.

2010-09-23  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] add caretBrowsingEnabled to WebSettings and DRT
        https://bugs.webkit.org/show_bug.cgi?id=46388

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2010-09-23  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Allow DRT to toggle hyperlink auditing (i.e., <a ping>).
        https://bugs.webkit.org/show_bug.cgi?id=30458

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2010-09-21  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Implement --enable-accelerated-2d-canvas flag in DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=46208

        This flag allows the layout tests to be run with or without accelerated
        2D canvas rendering.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        Declare the new flag string, and check for it on startup.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        Add a boolean for the new flag, in order to preserve its value over
        preferences reset.
        (TestShell::resetWebSettings):
        Set the new flag to the stored value on reset.
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAccelerated2dCanvasEnabled):
        Add an accessor for the new flag.
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        Initialize the new flag to false.
        (WebPreferences::applyTo):
        Copy the flag's value to the WebSettings.
        * DumpRenderTree/chromium/WebPreferences.h:
        Add the new flag.

2010-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Refactor QtWebKitPlatformPlugin interface

        Make it easier to keep source-compability for the
        QtWebKitPlatformPlugin interface, and run qmake
        on the example (but not build) for convenience. 

        https://bugs.webkit.org/show_bug.cgi?id=46345

        * Scripts/webkitdirs.pm:

2010-09-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Tweak some status messages that Eric thought were confusing
        https://bugs.webkit.org/show_bug.cgi?id=46342

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix comm-queue typo
        https://bugs.webkit.org/show_bug.cgi?id=46339

        We were missing a "self".  The real problem is that we didn't have an
        integration test for the failure case.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue should log more detailed messages to the QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=46333

        When I created CommitQueueTask, I removed most of the previous logging.
        This patch adds back more detailed logging so folks can see their patch
        progress through the queue.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-22  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] User style layout tests don't pass on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=46069

        Fix a typo in LayoutTestController::addUserStyleSheet that was causing a
        crash the Chromium DRT. Pass InjectInExistingDocuments to mimic DRT
        behavior from other ports.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addUserStyleSheet):

2010-09-22  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        [WinCairo] Part 2: Update WebKitTestRunner and DumpRenderTree Build.
        https://bugs.webkit.org/show_bug.cgi?id=46303.

        * MiniBrowser/Configurations/MiniBrowserCFLite.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops: Moved
        CoreFoundation-specific stuff to new MiniBrowserCoreFoundation
        property sheet.
        * MiniBrowser/Configurations/MiniBrowserCoreFoundation.vsprops: Added.
        * MiniBrowser/MiniBrowser.vcproj: Updated configuration to use
        appropriate property sheet for the build types.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Updated the
        configuration to use appropriate property sheet for CoreFoundation
        and CFLite-style builds.

2010-09-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Optimize commit-queue performance for green trees
        https://bugs.webkit.org/show_bug.cgi?id=46254

        This patch redesigns the controller logic for the commit-queue.  In the
        new design, the controller exercises much finer-grained control over
        the landing process.  In particular:

        - Patches that fail to apply now get rejected almost immediately.
        - Patches that fail to build get rejects after two builds (instead of
          three builds and one test run).
        - Patches that run into a flaky test now get accepted after one build
          and two test runs instead of three full build-and-test runs.

        The main cost of these optimizations is that we don't find out the tree
        has a failing test until the very end of the process, but if the tree
        has a busted test, there's not much we can do anyway.  We might as well
        burn commit-queue resources spinning optimisticly.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py: Added.
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-22  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        [WinCairo] Update WebKitTestRunner and DumpRenderTree Build.
        https://bugs.webkit.org/show_bug.cgi?id=46303.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Disable local MD5 sources
        for Cairo build. Copy wtf MD5 header to ForwardingHeaders for the
        WinCairo build.
        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundle.vcproj: Update win new *_Cairo
        build targets that use the new InjectedBundleCFLite.vsprops file.

2010-09-22  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix bustage of rebaseline-chromium-webkit-tests resulting from
        r67974. Really need better unit tests for this tool :(

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-09-22  Adam Roben  <aroben@apple.com>

        Unbreak test-webkitpy

        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests): Add a line that mysteriously got deleted.

2010-09-22  Adam Roben  <aroben@apple.com>

        Make test-webkitpy test WebKit2's scripts

        These scripts can't be in WebKitTools due to limitations of Apple's
        build process. But that doesn't mean we can't test them!

        Fixes <http://webkit.org/b/46297> test-webkitpy should test code in
        WebKit2/Scripts

        Reviewed by Adam Barth.

        * Scripts/test-webkitpy:
        (_clean_packages_with_test): Renamed from _clean_webkitpy_with_test.
        Now takes an external_package_paths parameter and cleans both webkitpy
        and any external packages.
        (init): Added an external_package_paths parameter which we pass along
        to _clean_packages_with_test.
        (top level): Add WebKit2/Scripts/webkit2 as our only external package
        and pass it along to init and Tester.run_tests.

        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests): Added an optional external_package_paths
        parameter. We modify sys.path so that the external packages can be
        imported, and search for unittest files inside all external packages
        in addition to inside webkitpy.

2010-09-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: r68063 broke linux python tests

        Add a missing "from __future__ import with_statement" to this
        new file; the perils of testing only on the Mac and by review :(

        https://bugs.webkit.org/show_bug.cgi?id=46293

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2010-09-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Add a 'chromium-gpu' set of ports that will test the accelerated
        GPU paths. This patch adds:

        - support for the '--accelerated-compositing' and
          'accelerated-2d-canvas' flags to new-run-webkit-tests (and the
          'no-' flags)
        - adds a new set of Ports that will look under
          platform/chromium-gpu-$OS/ for baselines before looking in the
          regular chromium search path
        - adds a new test_expectations.txt file in platform/chromium-gpu
          that skips all but the tests we actually want to run with
          acceleration.

        This patch will allow us to run both with and without acceleration
        and to change the defaults for both the regular and -gpu options
        as the code evolves.

        We plan to add both --chromium-$OS and --chromium-gpu-$OS runs to
        each test bot.

        https://bugs.webkit.org/show_bug.cgi?id=46225

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-09-22  Jamey Hicks  <jamey.hicks@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Web Inspector: Remote Web Inspector support for QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=43988

        Runs a web debug server on port specified by QtTestBrowser
        argument -remote-inspector-port. Property
        _q_webInspectorServerPort of the QWebPage instance will be set
        according to the argument. All pages with that property set will
        be remotely inspectable.

        URL for remote inspection of first QWebPage is
            http://localhost:9222/webkit/inspector/inspector.html?page=1
        where 1 is the number of the QWebPage instance.

        The base URL yields an index page with links to the individual inspectors:
            http://localhost:9222/

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2010-09-22  Adam Roben  <aroben@apple.com>

        Fix webkit-patch failure-reason now that build.webkit.org has been
        updated

        Fixes <http://webkit.org/b/46273> webkit-patch failure-reason crashes
        every time

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/net/buildbot.py:
        (BuildBot._file_cell_text): Added. Travels down the firstChild chain
        looking for an element that contains text, then returns it.
        (BuildBot._parse_twisted_file_row): Use _file_cell_text to get the
        text out of the cells. This way it doesn't matter whether the cells
        have <b> children (as for cells in directory rows) or not (as for
        cells in file rows)
        (BuildBot._parse_twisted_directory_listing): Look for rows that have
        the "directory" or "file" class, rather than rows with any class,
        since header rows now have a class attribute.

        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        (BuildBotTest._example_directory_listing): Updated to more closely
        match the markup that build.webkit.org is producing now.

2010-09-21  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        new-run-webkit-tests: fix bug introduced in r68008 where if you
        specify --chromium and no --platform, and you're running on
        windows, you use the 'chromium-win' port by default instead of the
        version-specific port. This breaks the buildbots.

        It will be good for this refactoring to settle down so I can
        rewrite the logic for default ports and the unit tests to be
        clearer (and the testing more comprehensive).

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2010-09-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        Modify the Port interface to take only a series of keyword arguments
        in the constructor, and modify Port/factory.get() to accomodate that,
        and to accept user=XXX as an argument so we can pass
        webkitpy.common.system.user.User objects in.

        Then, modify new-run-webkit-tests and rebaseline-chromium-webkit-tests
        to use the common routine in webkitpy.common.system.user.open_url()
        to display HTML files.

        There was a routine in the Port interface to do the same thing,
        but I see no need for a port-specific hook for this, since it is
        something that will always be executed by the host environment
        and displaying web pages has nothing to do with running layout tests.

        Note that new-run-webkit-tests used to use test_shell to display
        the page; this is potentially useful so that you can actually click
        from a result to the broken page; however, since DumpRenderTree
        doesn't support this functionality, it will be going away eventually.

        https://bugs.webkit.org/show_bug.cgi?id=46128

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-09-21  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Get fresh theme when running EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=46210

        If user tried to run EWebLauncher outside of the build tree, it would
        not find the theme and fallback to the installed one. However, since
        EWebLauncher is not installed, we always want to take the theme from
        the just compiled source code. If user had never installed WebKit's
        EFL port it could even receive a segv since no theme would be found.

        Now EWebLauncher does not fallback to the installed theme and CMake
        gives as DATA_DIR the directory of the theme it has just built.

        * CMakeListsEfl.txt: Pass the build directory as DATA_DIR to
        EWebLauncher.
        * EWebLauncher/main.c: Use only the theme from build director. Do not
        fallback to others as this could hide real bugs.
        (quit):
        (browserCreate):
        (findThemePath):
        (main):

2010-09-21  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Don't pass the --test-shell arg to the Chromium Mac port of DRT;
        it just confuses it.

        https://bugs.webkit.org/show_bug.cgi?id=46230

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-09-21  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Make a new buildbot for Leopard Debug Test

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2010-09-21  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix breakage of Chromium Mac DRT port caused by r67905.

        https://bugs.webkit.org/show_bug.cgi?id=46230

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-09-21  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Add missing import of 'tempfile'.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-09-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: pull the list of tests from the Port, and
           make it possible to run with no actual test files in the filesystem.

        This set of changes allows us to delete the special
        webkitpy/layout_tests/data directory and test the generic code without
        touching the filesystem (except to write results). This speeds up
        test-webkitpy substantially.

        This also cleans up and removes several code paths in the generic
        code and fixes some minor bugs, notably in the test_expectations
        parsing, which was previously fragile if the tests weren't present.

        We also change the way we diff image results to be able to do so
        in memory, without relying on files. This slows down chromium
        test_shell, which always writes images to files, but should speed
        up DRT and ImageDiff-based implementations slightly.

        Note that pulling the list of tests to run from the Port will allow
        ports to specify what tests to run as an inclusive list; previously
        you could only do this as an exclusive list by using a 
        test_expectations file or Skipped files; nothing actually uses this
        feature yet and it's unclear if it should be used.

        Note that there are no functional changes -- apart from now 
        always printing out the location of the checksum file when we are
        tracing test runs -- and the total number of lines of non-test code
        actually drops by two.

        There is some more cleanup that can be done in the Port/Driver 
        interface and in some handling of filenames, but I'll save that
        for another change.

        https://bugs.webkit.org/show_bug.cgi?id=45801

        * Scripts/webkitpy/layout_tests/data/*: Removed.
            - no longer need special mock layout_tests_directory in the
              repository.
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
            - add code to display missing text files, checksums when tracing
            - update to not look at the filesystem directly.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
            - remove tests_are_present flag
            - update with changes in Port interface - no longer access
              the filesystem directly, although we still use os.path for
              filename manipulation.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/layout_package/test_files.py: Removed.
            - renamed to port/test_files.py
        * Scripts/webkitpy/layout_tests/port/base.py:
            - change diff_image() to expect actual image data, not filenames
            - add expected_checksum(), expected_image(), expected_text() to
              return the content of the files so that we don't need a filesystem
            - add path_exists(), path_isdir() for filesystem-like access.
            - add test_dirs() to keep clobber-test-results from needing to
              actually look at a real layout tests dir
            - add tests() to return the list of tests to run on the port
              (calls port/test_files to do the work).
            - add update_baseline() to be able to save new baselines
            - add uri_to_test_name() from port/dryrun.py so we can easily check
              filename_to_uri()
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/port/chromium.py:
            - change diff_image() to accept image content, not filenames.
              This will be slower for test_shell/image_diff, but faster
              for DRT/ImageDiff.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
            - simplify greatly
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/port/test.py:
            - massive rewrite to use in-script list of tests and expectations
        * Scripts/webkitpy/layout_tests/port/test_files.py:
            - rename from layout_package/test_files.
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:
            - add unit tests
        * Scripts/webkitpy/layout_tests/port/webkit.py:
            - update diff_image() to take image contents, not files. Should
              make things slightly faster.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
            - update with changes to diff_image()
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
            - update with changes to diff_image()
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
            - remove tests_are_present from test_expectations
            - pull the list of tests from port.tests() instead
              of calling test_files.py directly.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
            - update unit tests
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
            - update with changes to 
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
            - update with change in Port interface
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
            - update with change in Port interface
        * Scripts/webkitpy/style/checkers/test_expectations.py:
            - remove the tests_are_present flag

2010-09-21  Anders Carlsson  <andersca@apple.com>

        Disable logging.

        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2010-09-21  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        add a script for running webkit_unit_tests
        https://bugs.webkit.org/show_bug.cgi?id=46014

        * Scripts/run-chromium-webkit-unit-tests: Added.

2010-09-21  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Fix linking problems on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=45844

        * GNUmakefile.am: link the executables with winmm.dll

2010-09-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        feeder-queue svn updates more often than needed
        https://bugs.webkit.org/show_bug.cgi?id=46171

        We don't need to poll SVN every time we feed the feeders.  Rather, we
        can count on the wrapper shell script to auto-update the queue.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Add robot loader timeout and extra time options.
        https://bugs.webkit.org/show_bug.cgi?id=46172

        [-robot-timeout <s>]: Load the next page after s seconds if the current
        page didn't finish loading.
        [-robot-extra-time <s>]: Wait s seconds after the current page finished
        loading before loading the next one. This should allow some time for the
        page's JavaScript to execute.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::applyPrefs):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::robotTimeout):
        (LauncherApplication::robotExtraTime):
        (LauncherApplication::LauncherApplication):
        (LauncherApplication::handleUserOptions):
        (main):
        * QtTestBrowser/urlloader.cpp:
        (UrlLoader::UrlLoader):
        (UrlLoader::loadNext):
        (UrlLoader::loadUrlList):
        * QtTestBrowser/urlloader.h:

2010-09-21  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed.

        Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-20  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] enhanced context menu for media elements
        https://bugs.webkit.org/show_bug.cgi?id=45021

        EventSender::contextClick() now returns an array of js
        objects. Each object has a title property and a click() method.

        * DumpRenderTree/gtk/EventSender.cpp:
        (getMenuItemTitleCallback):
        (setMenuItemTitleCallback):
        (menuItemClickCallback):
        (getMenuItemClass):
        (contextClickCallback):

2010-09-20  Hayato Ito  <hayato@chromium.org>

        Unreviewed.
        Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The tool member variable should be called _tool
        https://bugs.webkit.org/show_bug.cgi?id=46160

        Created by find-and-replace.

        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/openbugs.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/multicommandtool.py:

2010-09-20  Adam Barth  <abarth@webkit.org>

        I ran the tests before landing but ignored the fact that they failed.  :(

        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a feeder queue that polls bugs.webkit.org for the commit-cluster
        https://bugs.webkit.org/show_bug.cgi?id=46141

        The feeder-queue polls bugs.webkit.org every 30 seconds and updates the
        list of work items on the status server.  The individual commit-cluster
        nodes then grab the patches from the server and process them.

        * Scripts/webkitpy/tool/bot/feeders.py: Added.
        * Scripts/webkitpy/tool/bot/feeders_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:

2010-09-20  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Darin Adler.

        build-webkit: Add support for CMake build system
        https://bugs.webkit.org/show_bug.cgi?id=44979

        * Scripts/build-webkit: Add "--efl" command-line option to build the
        EFL port of WebKit.
        * Scripts/webkitdirs.pm: Define buildCMakeProject() and
        buildEflCMakeProject() subroutines.

2010-09-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: refactor command line args getting passed to DRT

        This change cleans up some argument parsing between functions to get
        rid of some overlapping data structures. There should be no functional
        changes in this patch; it is pure refactoring in preparation for
        landing the Chrome GPU port and adding a generic way to pass
        args to DRT/TestShell.

        https://bugs.webkit.org/show_bug.cgi?id=46135

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
          - pass the options argument explicitly to the threads and drivers,
            also consolidate the passing of options to the driver.
          - pass options directly to process_output() to remove a couple
            parameters (minor cleanup).
        * Scripts/webkitpy/layout_tests/port/base.py:
          - pass the options argument to Port.create_driver().
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
          - update Port.create_driver() test
        * Scripts/webkitpy/layout_tests/port/chromium.py:
          - pass the options argument to Port.create_driver(), and clean up
            building of the cmd line for DRT.
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
          - pass the options argument to Port.create_driver()
        * Scripts/webkitpy/layout_tests/port/test.py:
          - pass the options argument to Port.create_driver()
        * Scripts/webkitpy/layout_tests/port/webkit.py:
          - pass the options argument to Port.create_driver(), and clean up
            building of the cmd line for DRT.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
          - consolidate args in _get_dump_render_tree_args and rename to
            _get_test_args(); move all of the command-line args to the
            Port implementations.

2010-09-20  Andrew Wilson  <atwilson@chromium.org>

        Revert change which was accidentally committed along with some expectation changes.

        * Scripts/webkitpy/layout_tests/port/base.py:

2010-09-20  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Add explicit --force-patch flag to webkitpy tools
        https://bugs.webkit.org/show_bug.cgi?id=46103
        
        It wasn't obvious until I read the applypatch.py source code that
        --non-interfactive implies passing --force to patch. Add --force-patch
        as an alias to the flag, so that this behavior is more discoverable.

        * Scripts/webkitpy/tool/steps/applypatch.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-09-20  Eric Seidel  <eric@webkit.org>

        Unreviewed, adding a line which got dropped and is trivially correct (and tested).

        commit-queue can't land patches
        https://bugs.webkit.org/show_bug.cgi?id=46138

        Add a line of code I forgot in my last commit.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:

2010-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The commit-cluster bots still race to lock patch_ids
        https://bugs.webkit.org/show_bug.cgi?id=46130

        It turns out we need to use a transaction object to make the
        read/modify/write lock operation atomic.  From reading the AppEngine
        documentation, I think this patch should do what we want.  It's hard to
        test locally because the test instance isn't distributed in the same
        way the production instance is.

        * QueueStatusServer/handlers/nextpatch.py:
        * QueueStatusServer/model/activeworkitems.py: Added.

2010-09-20  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        REGRESSION (HTML5 Parser): Pages broken due to <tag<tag> parsing changes
        https://bugs.webkit.org/show_bug.cgi?id=40961

        Implement WebKitUsePreHTML5ParserQuirks preference.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Reset WebKitUsePreHTML5ParserQuirks
        to false after a test finishes.

2010-09-20  Adam Roben  <aroben@apple.com>

        Windows build fix

        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops: Put
        $(WebKitOutputDir)\include before $(WebKitLibrariesDir)\include so
        we'll pick up the most recent versions of the headers.

2010-09-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should check commit-queue+ again just before committing
        https://bugs.webkit.org/show_bug.cgi?id=32679

        Added a _revalidate_patch check, right before landing.

        Since _revalidate_patch passes the patch_id from the work item
        back to bugzilla, I had to fix all of the previous queue tests to
        use valid attachment ids (that's the majority of this change).

        In order to validate that the bug was still open, I had to teach
        bugzilla.Bug about open/closed states.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-20  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed.

        Adding myself as a comitter.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Two instances of commit-queue try to process the same patch
        https://bugs.webkit.org/show_bug.cgi?id=46113

        This patch makes next-patch atomic so that the server won't vend the
        same patch twice in the same hour.

        * QueueStatusServer/handlers/nextpatch.py:

2010-09-20  Adam Roben  <aroben@apple.com>

        Make WebKitTestRunner's wait-to-dump watchdog timer work on Windows

        We were previously trying to use a CFRunLoopTimer, but since Windows
        doesn't use CFRunLoop on most threads this doesn't work. Now we use a
        Windows-style timer on Windows.

        I also replaced all uses of "watchdog" with "watchdog timer".

        Fixes <http://webkit.org/b/46101> WebKitTestRunner's wait-to-dump
        watchdog timer doesn't work on Windows

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Updated for rename.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: Removed
        platform-specific functions.
        (WTR::LayoutTestController::LayoutTestController): Added call to
        platformInitialize.
        (WTR::LayoutTestController::waitUntilDone): Changed to call
        initializeWaitToDumpWatchdogTimerIfNeeded instead of doing the work
        right in this function.
        (WTR::LayoutTestController::waitToDumpWatchdogTimerFired): Updated for
        rename.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Added new
        members needed to support the watchdog timer abstraction. Replaced
        some "watchdog"s with "watchdog timer".

        * WebKitTestRunner/InjectedBundle/mac/LayoutTestControllerMac.mm:
        Added.
        (WTR::LayoutTestController::platformInitialize): Does nothing on this
        platform.
        (WTR::LayoutTestController::invalidateWaitToDumpWatchdog): Moved here
        from LayoutTestController.cpp and changed to use an early return.
        (WTR::waitUntilDoneWatchdogTimerFired): Moved here from
        LayoutTestController.cpp.
        (WTR::LayoutTestController::initializeWaitToDumpWatchdogTimerIfNeeded):
        Moved code here from LayoutTestController::waitUntilDone and changed
        to use an early return.

        * WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp:
        Added.
        (WTR::LayoutTestController::platformInitialize): Initialize our
        watchdog timer.
        (WTR::LayoutTestController::invalidateWaitToDumpWatchdog): Added.
        Kills and clears the watchdog timer.
        (WTR::waitToDumpWatchdogTimerFired): Added. Calls through to the
        LayoutTestController member function of the same name.
        (WTR::LayoutTestController::initializeWaitToDumpWatchdogTimerIfNeeded):
        Added. Sets up the timer if it isn't already set.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Added
        LayoutTestControllerMac.mm.

        * WebKitTestRunner/win/InjectedBundle.vcproj: Added
        LayoutTestControllerWin.cpp.

2010-09-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] fast/forms/listbox-selection.html fails
        https://bugs.webkit.org/show_bug.cgi?id=45942

        Use the gdkModifersFromJSValue helper to parse all appropriate modifier
        strings in keyDownCallback.

        * DumpRenderTree/gtk/EventSender.cpp:
        (keyDownCallback): Use the gdkModifersFromJSValue instead of duplicating the 
        modifier parsing logic.

2010-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 decidePolicyForNavigationAction should include mouse button information
        <rdar://problem/8413165>
        https://bugs.webkit.org/show_bug.cgi?id=46060

        * MiniBrowser/mac/BrowserWindowController.m:
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):

2010-09-19  Daniel Bates  <dbates@rim.com>

        Reviewed by Martin Robinson.

        Add unit tests for diffs that delete or modify a change log entry
        or describe changes that are far apart
        https://bugs.webkit.org/show_bug.cgi?id=46046

        Add additional unit tests to test change log diffs that contain
        deletions or changes that are far apart from each other in the
        ChangeLog file.

        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl:
          - Added the following unit tests:
          "fixChangeLogPatch: [no change] In-place change."
          "fixChangeLogPatch: [no change] Remove first entry."
          "fixChangeLogPatch: [no change] Remove entry in the middle."
          "fixChangeLogPatch: [no change] Far apart changes (i.e. more than one chunk)."

2010-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WKBundleRangeRef with WKBundleRangeHandleRef.
        https://bugs.webkit.org/show_bug.cgi?id=46054

        The new one acts like WKBundleNodeHandleRef and allows for getting a
        wrapper in a specific world for the handle.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::propertyValue):
        (WTR::propertyValueDouble):
        (WTR::propertyValueInt):
        (WTR::numericWindowPropertyValue):
        (WTR::toStr):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-09-19  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Fix WebGL test regressions by r67809.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo): Call setExperimentalWebGLEnabled().

2010-09-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        [DRT/Chromium] Fix a WebSettings handling bug
        https://bugs.webkit.org/show_bug.cgi?id=45945

        Before this change, Chromium DRT reset WebSettings for every new
        window. It was wrong.
        If new window is not the first one, we have to apply the same
        settings as the first window.  So, we introduce WebPreference to
        store the current settings, and apply it to new windows. It's same
        as test_shell's behavior.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
          Use WebPreferences instead of WebSettings.
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        (LayoutTestController::setPopupBlockingEnabled):
        (LayoutTestController::disableImageLoading):
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        (LayoutTestController::setXSSAuditorEnabled):
        (LayoutTestController::setAllowUniversalAccessFromFileURLs):
        (LayoutTestController::setAllowFileAccessFromFileURLs):
        (LayoutTestController::overridePreference):
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings): Use WebPreferences.
        (TestShell::runFileTest): ditto.
        (TestShell::createNewWindow): Apply existing WebPreferences to a new WebView.
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::preferences):
        (TestShell::applyPreferences):
        * DumpRenderTree/chromium/WebPreferences.cpp: Added.
        * DumpRenderTree/chromium/WebPreferences.h: Added.

2010-09-18  Prasad Tammana  <prasadt@chromium.org>

        Reviewed by David Levin.

        update-webkit --chromium spitting out a spurious error
        https://bugs.webkit.org/show_bug.cgi?id=45868

        * Scripts/update-webkit-chromium: Use commandExists() function to check for existence of gclient.

2010-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Improve/unify the PageLoadClient interfaces
        https://bugs.webkit.org/show_bug.cgi?id=46043

        * MiniBrowser/mac/BrowserWindowController.m:
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didCommitLoadForFrame):
        (didFinishDocumentLoadForFrame):
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (didReceiveTitleForFrame):
        (didFirstLayoutForFrame):
        (didFirstVisuallyNonEmptyLayoutForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didCommitLoadForFrame):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didFinishLoadForFrame):
        * WebKitTestRunner/TestController.h:

2010-09-17  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Adding a shell script I use to run the
        commit-queue. Now that multiple machines run the cq,
        it makes sense to share the script between them.

        * EWSTools/start-commit-queue.sh: Added.

2010-09-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        The colors on the new build.webkit.org (after upgrading the master to 0.8.1) are
        slightly harder to read, so this reverts the previous background colors for various
        states, making it easier to read.

        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:
        (.success):
        (.failure):
        (.warnings):
        (.exception):
        (.start,.running,td.building):
        (.offline,td.offline):

2010-09-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67692.
        http://trac.webkit.org/changeset/67692
        https://bugs.webkit.org/show_bug.cgi?id=46011

        broke layout test dashboard (Requested by johnny_g on
        #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-09-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        Style bot complains about cairo forward declaration naming
        https://bugs.webkit.org/show_bug.cgi?id=45867

        Exclude Cairo forward declarations from indentifiers with underscores checks.

        * Scripts/webkitpy/style/checkers/cpp.py: Add exclusion for Cairo forward-declarations.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Add some tests for this.

2010-09-16  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Include detailed test modifiers (e.g. FLAKY) in results.json for failing non-layout tests
        https://bugs.webkit.org/show_bug.cgi?id=45408

        This change also tries to remove duplicated upload_results_json methods
        in run_webkit_tests.py and json_results_generator.py.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-09-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] When switching views (WebViewGraphicsBased <--> WebViewTraditional), QWebPage signals and QActions have to be re-set.

        Recently r67554 changed the way different views use the WebPage class: it was previously being shared between
        different views, but now for each view switch, a new WebPage class is constructed and set. Signals and QAction's
        were not being set to the new WebPage though. Patch fix that, by re constructing the toolbar, and then re-hooking
        all page specific stuff to the UI.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::MainWindow):
        (MainWindow::buildUI):
        (MainWindow::setPage):
        * QtTestBrowser/mainwindow.h:

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Make all accesses to m_item (GraphicsWebView) done by WebViewGraphicsBased class happen though graphicsWebView getter method.

        This patch is mostly a preparation for another commit, where the ownership of the m_item/GraphicsWebView
        object will move to the qgraphicsscene instead of the qgraphicsview.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::setPage):
        (WebViewGraphicsBased::setResizesToContents):
        (WebViewGraphicsBased::resizeEvent):
        (WebViewGraphicsBased::animatedFlip):
        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::setItemCacheMode):
        (WebViewGraphicsBased::itemCacheMode):

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Moved setYRotation method body out of the class (WebViewGraphicsBased) definition.

        We usually separate methods whose body are larger than a few lines from the class definition.

        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::yRotation):
        (WebViewGraphicsBased::setYRotation):

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Make initializeView method of LauncherWindow private.

        No one else needs to be able to call it but LauncherWindow.
        Also moving the declation of isGraphicsBased method down in the same file, in order
        to better group related methods.

        * QtTestBrowser/launcherwindow.h:

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Make the getter 'page' method of MainWindow const.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::page):
        * QtTestBrowser/mainwindow.h:

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Remove useless parameter from MainWindow class' constructor.

        The parameter defaults to an empty URL and is not being used by any caller. Apart from that it is also
        not referred in the constructor body and does not make much sense.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::MainWindow):
        * QtTestBrowser/mainwindow.h:

2010-09-15  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] Needs DRT queueLoadHTMLString and setDeferMainResourceLoad-implementations
        https://bugs.webkit.org/show_bug.cgi?id=42151

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (WorkItemLoadHTMLString::WorkItemLoadHTMLString):
        (WorkItemLoadHTMLString::run):
        (LayoutTestController::queueLoadHTMLString):
        (LayoutTestController::reset):
        (LayoutTestController::setDeferMainResourceDataLoad):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::deferMainResourceDataLoad):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didCreateDataSource):

2010-09-16  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        Add script to synchronize WebKit and Khronos WebGL tests
        https://bugs.webkit.org/show_bug.cgi?id=42336

        * Scripts/update-webgl-conformance-tests: Added.
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py: Added.
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests_unittest.py: Added.

2010-09-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add support for sending synchronous messages from the InjectedBundle to the WKContext
        <rdar://problem/8365320>
        https://bugs.webkit.org/show_bug.cgi?id=44785

        * MiniBrowser/mac/AppDelegate.m:
        (didReceiveSynchronousMessageFromInjectedBundle):
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didCreatePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-09-16  Leonid Ebril  <leonid.ebril@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser: Disable creation of a new window for screenshot on Symbian platform.
        https://bugs.webkit.org/show_bug.cgi?id=45885

        Avoid creation of an additional window for screenshot to prevent overlapping with original window.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::screenshot):

2010-09-16  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController zoomIn:]):
        (-[BrowserWindowController zoomOut:]):
        (-[BrowserWindowController resetZoom:]):
        Remove trailing semicolons.

2010-09-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67628.
        http://trac.webkit.org/changeset/67628
        https://bugs.webkit.org/show_bug.cgi?id=45904

        broke the build (Requested by eric_carlson on #webkit).

        * DumpRenderTree/gtk/EventSender.cpp:
        (contextClickCallback):

2010-09-16  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed.

        Adding myself as a comitter.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] enhanced context menu for media elements
        https://bugs.webkit.org/show_bug.cgi?id=45021

        EventSender::contextClick() now returns an array of js
        objects. Each object has a title property and a click() method.

        * DumpRenderTree/gtk/EventSender.cpp:
        (getMenuItemTitleCallback):
        (setMenuItemTitleCallback):
        (menuItemClickCallback):
        (getMenuItemClass):
        (contextClickCallback):

2010-09-14  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson and Martin Robinson.

        [GTK] eventSender.contextClick() should return the contents of the context menu
        https://bugs.webkit.org/show_bug.cgi?id=39102

        Make the eventSender use the new private WebKitGtk+ API to
        retrieve the context-menu item titles and store them in an array.

        * DumpRenderTree/gtk/EventSender.cpp:
        (contextClickCallback):

2010-09-16  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Jian Li.

        Unify FILE_SYSTEM and FILE_WRITER enables under the name FILE_SYSTEM.
        https://bugs.webkit.org/show_bug.cgi?id=45798

        * Scripts/build-webkit:

2010-09-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Support globalhistory tests
        https://bugs.webkit.org/show_bug.cgi?id=45774

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::isGlobalHistoryTest):
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpHistoryCallbacks):
        (LayoutTestController::removeAllVisitedLinks):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-09-10  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        deduplicate-tests should be runnable from any WebKit directory
        https://bugs.webkit.org/show_bug.cgi?id=44709

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-15  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] sort testing methods in DRT
        https://bugs.webkit.org/show_bug.cgi?id=45850

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::TextInputController):

2010-09-15  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        CQ status shows items out of order
        https://bugs.webkit.org/show_bug.cgi?id=45846
        
        Only group consecutive status items with the same patch ID into the same
        group, so that overall item ordering is preserved.
        
        Also don't indent status items that only have a single item in their
        group.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/templates/includes/singlequeuestatus.html: Added.
        * QueueStatusServer/templates/queuestatus.html:

2010-09-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add queue start/stop messages
        https://bugs.webkit.org/show_bug.cgi?id=45853

        I ended up needing to clean up a bunch of our unit testing
        in order to test this new code path nicely.

        There are also a few PEP8 changes needed to pass check-webkit-style.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2010-09-15  Simon Fraser  <simon.fraser@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=45849
        WKURLCreateWithCFURL crashes with null url
        
        Fix MiniBrowser crash when the url is not parseable.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController fetch:]):

2010-09-15  Patrick Gansterer  <paroga@paroga.com>

        Unreviewed.

        Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to run more than one commit-queue instance
        https://bugs.webkit.org/show_bug.cgi?id=45786

        Mostly we need to make sure the two (or more) instances get
        different patches to work on.  To do this, I re-worked
        the code responsible for getting the next work item to
        round trip through the status server.  The status server only
        vends patches from the work items list, only if those patches
        have not had status reported for them in the last hour.

        This is another step towards making all queues go through the
        status server, thus making it possible to run more than one
        instance of various EWS bots (as requested in bug 44292).

        The webkitpy changes are already covered by existing unit tests.
        The QueueStatusSever sadly has no testing infrastructure yet. :(

        * QueueStatusServer/handlers/nextpatch.py: Added.
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/main.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-15  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        NRWT fails with UnicodeDecodeError on editing/selection/mixed-editability-10.html
        https://bugs.webkit.org/show_bug.cgi?id=45791

        Force filenames to be raw bytes before running difflib.unified_diff.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2010-09-15  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] QtTestBrowser crashes when enabling QGraphicsView mode after first loading page without it enabled
        https://bugs.webkit.org/show_bug.cgi?id=35247

        The main issue when changing the views is that the plugins and any other components that
        depend on view specific attributes such as the native window id are not teared down.
        Even if we had a tear-down procedure, we'd have to re-initialize the plugin after
        switching to the new view (QGraphicsWebView). This is a rather uncommon situation, so
        we decided to work around this in QtTestBrowser by making toggling between QWebView
        and QGraphicsWebView also re-create the page.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        * QtTestBrowser/mainwindow.h:

2010-09-14  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Send webkit accessibility notifications to Chromium
        https://bugs.webkit.org/show_bug.cgi?id=45156

        Move printf inside shouldDumpAccessibilityNotifications check.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):

2010-09-14  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] fix http/tests/security/local-user-CSS-from-remote.html
        https://bugs.webkit.org/show_bug.cgi?id=45788

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setUserStyleSheetLocation): use a base64 url like in Chrome

2010-09-14  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] Remove WebKit::areLayoutTestImagesOpaque since it's no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=45768

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage): new baselines are checked in and Linux will match Windows going forward.

2010-09-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add newly added directories to the directory list.

        * wx/build/settings.py:

2010-09-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove WKBundleNodeRef, replacing uses with WKBundleNodeHandleRef.
        https://bugs.webkit.org/show_bug.cgi?id=45785

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::propertyValue):
        (WTR::numericWindowPropertyValue):
        (WTR::dumpPath):
        (WTR::toStr):
        (WTR::operator<<):
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-09-14  Adam Barth  <abarth@webkit.org>

        Fix two typos in commit-queue.  The first is harmless.  The second
        causes the queue to reject patches when the build is broken.  :(

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-14  Chris Guillory   <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Send all accessibility notifications to Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=45156

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-09-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue is slow during the day
        https://bugs.webkit.org/show_bug.cgi?id=45780

        Thanks to the new logging, we've noticed that checkout-is-out-of-date
        errors in the first pass of landing don't retry the land.  Instead,
        they're treated as failures and cause the commit-queue to do two more
        builds before really trying to land the patch.  Worse, in the second
        build, we can get bitten by a flaky test.

        This patch takes a slightly different approach to the commit-queue's
        main control logic.  We now use a separate subprocess for building and
        testing and for landing.  This means we should very rarely see the
        checkout-is-out-of-date error, and when we do see it, we should retry
        more quickly.  If my understanding is correct, this should be a big
        speed win for the commit-queue.

        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-14  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] implement layoutTestController.setDomainRelaxationForbiddenForURLScheme
        https://bugs.webkit.org/show_bug.cgi?id=45762

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/chromium/LayoutTestController.h:

2010-09-14  Csaba Osztrogonác  <ossy@webkit.org>

        Adding myself as a reviewer.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-14  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Build-webkit shows a warning when WebKitBuild directory is not exist
        https://bugs.webkit.org/show_bug.cgi?id=45736

        Build-webkit has showed a warning when WebKitBuild didn't exist, add
        an additional condition to avoid it.

        * Scripts/build-webkit:

2010-09-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should log when it's retrying due to checkout out of date error
        https://bugs.webkit.org/show_bug.cgi?id=45725

        This will allow us to better track how often we see these errors
        and how long it takes the queue to recover from them.

        In order to pass the tests, I had to correct an error
        from a previous change.  The UnitTestPort should not have
        ever been using the base port method as that will read
        a file from disk.  If the unit tests haven't passed the contents
        it should raise an IOError as though the file doesn't exist.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Upload results when cq patch landing fails
        https://bugs.webkit.org/show_bug.cgi?id=45683
        
        Include script errors when CommitQueue._land fails.

        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: accessibilityIsIgnored is returning nil when return value expects a BOOL
        https://bugs.webkit.org/show_bug.cgi?id=45548

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (isIgnoredCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isIgnored):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isIgnored):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isIgnored):

2010-09-13  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        jscPath() is incorrect in Windows' cmd.exe shell
        https://bugs.webkit.org/show_bug.cgi?id=45651

        * Scripts/webkitdirs.pm: Add ".exe" suffix to $jscName on Windows.

2010-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r64816-r64889): Crash in WebCore::AccessibilityRenderObject
        https://bugs.webkit.org/show_bug.cgi?id=43807

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (textMarkerForPointCallback):
        (AccessibilityUIElement::textMarkerForPoint):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::textMarkerForPoint):

2010-09-13  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] build-webkit: Add --v8 option to build against V8

        Note that V8 is picked up from QtScript, so this currently requires building
        against the experimental qt-script-v8 branch.

        * Scripts/build-webkit:

2010-09-13  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        Add WebDeviceOrientationClientMock::create() and use it from DRT.
        https://bugs.webkit.org/show_bug.cgi?id=45650

        Do not use the WebDeviceOrientationClientMock constructor directly,
        but use the create() member function.

        This should fix the linker errors for the multi-DLL Chromium DRT build.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        (LayoutTestController::deviceOrientationClient):

2010-08-27  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        Add support for testing the viewport meta tag algorithm,
        based on the following draft spec:

        http://people.opera.com/rune/TR/ED-css-viewport-20100806/

        Add common handling of viewport meta tag based on new Opera spec
        https://bugs.webkit.org/show_bug.cgi?id=44201

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-09-12  Kent Tamura  <tkent@chromium.org>

        Reviewed by Tony Chang.

        [DRT/Chromium] Remove dependency to base/string16.h and gfx/codec/png_codec.h
        https://bugs.webkit.org/show_bug.cgi?id=45517

        Use webkit_support_gfx.h for PNG encoding/decoding instead of png_codec.h

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (Image::craeteFromStdin):
        (Image::createFromFilename):
        (diffImages):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage):

2010-09-10  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Chromium] Implement textInputController.hasSpellingMarker() for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=45441

        Added TextInputController::hasSpellingMarker().
        
        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::TextInputController):
        (TextInputController::hasSpellingMarker):
        * DumpRenderTree/chromium/TextInputController.h:

2010-09-12  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        My last change accidentally contained a local change to the
        rebaselinig script; webkit-patch land picked it up without telling
        me and committed it :(

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-09-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        Attempt to fix Windows MiniBrowser build (untested)
        https://bugs.webkit.org/show_bug.cgi?id=45609

        * MiniBrowser/win/BrowserView.cpp:
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):

2010-09-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix zoom related tests when testing WebKit2.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::zoomPageIn): Zoom in and zoom out are not the same.

2010-09-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Implement WebKit2 callback equivalent to - [WebUIDelegate webView:setStatusText:]
        <rdar://problem/8359252>
        https://bugs.webkit.org/show_bug.cgi?id=45605

        * MiniBrowser/mac/BrowserWindowController.m:
        (setStatusText):
        (contentsSizeChanged):
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (setStatusText):
        (contentsSizeChanged):
        (BrowserView::create):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):

2010-09-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add callback mechanism for the getting the source of a frame
        <rdar://problem/8364681>
        https://bugs.webkit.org/show_bug.cgi?id=45604

        Add ability to dump the main frame's source to the console.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController dumpSourceToConsole:]):
        * MiniBrowser/mac/MainMenu.xib:

2010-09-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove unneeded Empty Queue messages
        https://bugs.webkit.org/show_bug.cgi?id=45602

        We already have a /gc job to delete these.
        recentstatus.py is already smart enough to use the
        most recent of the workitems last update or the most recent status,
        so removing these should not change the _last_status_date() return
        value more than a few milliseconds.

        These messages just spam the recent status log.

        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-11  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Fix Python exception when generating synthetic patch IDs
        https://bugs.webkit.org/show_bug.cgi?id=45592

        Can't concatenate strings and numbers directly.

        * QueueStatusServer/handlers/queuestatus.py:

2010-09-11  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Group statuses in queue status by patch ID
        https://bugs.webkit.org/show_bug.cgi?id=45588

        Group statuses by patch ID so that the status page is easier
        to scan.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/stylesheets/dashboard.css:
        (.status-group):
        (.status-bug):
        (.status-group ul):
        (.status-group ul li):
        (.status-group ul li:hover):
        (.status-cell):
        (.status-cell:hover):
        (.status-cell.pass):
        (.status-cell.fail):
        (.status-cell.pending):
        (.status-cell.error):
        * QueueStatusServer/templates/dashboard.html:
        * QueueStatusServer/templates/queuestatus.html:

2010-09-11  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Implement layoutTestController.dumpResourceResponseMIMETypes in Chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=45479

        Implement layoutTestController.dumpResourceResponseMIMETypes (modelled after
        implementation in ResourceLoadDelegate in the Mac port).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpResourceResponseMIMETypes):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShouldDumpResourceResponseMIMETypes):
        (LayoutTestController::shouldDumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::shouldDumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveResponse):

2010-09-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queues.webkit.org should expose /remote_api for data upload/download
        https://bugs.webkit.org/show_bug.cgi?id=45559

        * QueueStatusServer/app.yaml:
         - /remote_api is a standard app-engine service which allows use of
           the bulk uploader for data upload/download.  Exposing this
           (for admin access only) allows us to use 

2010-09-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add zoom support to WebKit2 API
        <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45585

        - Add zoom options to MiniBrowser that mimic Safari's options using
          the new WebKit2 zoom APIs.
        - Switch uses of float for the zoom APIs to use double.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithPageNamespace:]):
        (-[BrowserWindowController validateMenuItem:]):
        (-[BrowserWindowController validateUserInterfaceItem:]):
        (-[BrowserWindowController currentZoomFactor]):
        (-[BrowserWindowController setCurrentZoomFactor:]):
        (-[BrowserWindowController canZoomIn]):
        (-[BrowserWindowController zoomIn:]):
        (-[BrowserWindowController canZoomOut]):
        (-[BrowserWindowController zoomOut:]):
        (-[BrowserWindowController canResetZoom]):
        (-[BrowserWindowController resetZoom:]):
        (-[BrowserWindowController toggleZoomMode:]):
        * MiniBrowser/mac/MainMenu.xib:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::textZoomIn):
        (WTR::EventSendingController::textZoomOut):
        (WTR::EventSendingController::zoomPageIn):
        (WTR::EventSendingController::zoomPageOut):

2010-09-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix crash in DRT in standalone mode

        https://bugs.webkit.org/show_bug.cgi?id=45454

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::loadNextTestInStandAloneMode):

2010-09-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove unnecessary constraint in WebCore of choosing either text zoom or full page zoom.
        Precursor to <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45522

        Update for changes to the Bundle API to allow separate control of page and text zoom
        levels.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::textZoomIn):
        (WTR::EventSendingController::textZoomOut):
        (WTR::EventSendingController::zoomPageIn):
        (WTR::EventSendingController::zoomPageOut):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2010-09-10  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Support click event for notifications
        https://bugs.webkit.org/show_bug.cgi?id=44836

        Add support for simulateDesktopNotificationClick by calling
        back to DumpRenderTreeSupportQt.cpp.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::simulateDesktopNotificationClick):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-09-10  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Update queue status when patches fail their first land attempt
        https://bugs.webkit.org/show_bug.cgi?id=45583

        Add a few more _update_status calls to make it more obvious if a patch is 
        being retried because tests failed.

        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-10  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] MiniBrowser crashes with multiply windows when closing one of them
        https://bugs.webkit.org/show_bug.cgi?id=45536

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView): Reference the context instead of adopting it
        because it can be shared across different views.

2010-09-10  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r67241.
        http://trac.webkit.org/changeset/67241
        https://bugs.webkit.org/show_bug.cgi?id=44709

        Accidentally committed.

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        deduplicate-tests should be runnable from any WebKit directory
        https://bugs.webkit.org/show_bug.cgi?id=44709

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-10  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r67216.
        http://trac.webkit.org/changeset/67216
        https://bugs.webkit.org/show_bug.cgi?id=44709

        Broke

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        deduplicate-tests should be runnable from any WebKit directory
        https://bugs.webkit.org/show_bug.cgi?id=44709

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-09  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        Hook up LayoutTestController.setMockDeviceOrientation() in Chromium DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=45460

        This enables DumpRenderTree to run layout tests for DeviceOrientation.

        Also declare the LayoutTestController destructor out-of-line.
        Otherwise the implicit destructor would cause compiler errors because
        of the OwnPtr<WebKit::WebDeviceOrientationClientMock> member.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::~LayoutTestController):
        (LayoutTestController::setMockDeviceOrientation):
        (LayoutTestController::deviceOrientationClient):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::deviceOrientationClient):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-09-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67119.
        http://trac.webkit.org/changeset/67119
        https://bugs.webkit.org/show_bug.cgi?id=45505

        Extra newlines in results (Requested by tony^work on #webkit).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (printResponseDescription):
        (printNodeDescription):
        (printRangeDescription):
        (WebViewHost::shouldBeginEditing):
        (WebViewHost::shouldEndEditing):
        (WebViewHost::shouldInsertNode):
        (WebViewHost::shouldChangeSelectedRange):
        (WebViewHost::shouldDeleteRange):
        (WebViewHost::shouldApplyStyle):
        (WebViewHost::didBeginEditing):
        (WebViewHost::didChangeSelection):
        (WebViewHost::didChangeContents):
        (WebViewHost::didEndEditing):
        (WebViewHost::decidePolicyForNavigation):
        (WebViewHost::didCancelClientRedirect):
        (WebViewHost::didStartProvisionalLoad):
        (WebViewHost::didReceiveServerRedirectForProvisionalLoad):
        (WebViewHost::didFailProvisionalLoad):
        (WebViewHost::didCommitProvisionalLoad):
        (WebViewHost::didFinishDocumentLoad):
        (WebViewHost::didHandleOnloadEvents):
        (WebViewHost::didFailLoad):
        (WebViewHost::didFinishLoad):
        (WebViewHost::didChangeLocationWithinPage):
        (WebViewHost::willSendRequest):
        (WebViewHost::didReceiveResponse):
        (WebViewHost::didFinishResourceLoad):
        (WebViewHost::didFailResourceLoad):
        (WebViewHost::didDisplayInsecureContent):
        (WebViewHost::didRunInsecureContent):
        (WebViewHost::printFrameDescription):

2010-09-09  Michael Saboff  <msaboff@apple.com>

        Unreviewed, adding myself to committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-09  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Implement layoutTestController.dumpResourceResponseMIMETypes in Chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=45479

        Implement layoutTestController.dumpResourceResponseMIMETypes (modelled after
        implementation in ResourceLoadDelegate in the Mac port).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpResourceResponseMIMETypes):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShouldDumpResourceResponseMIMETypes):
        (LayoutTestController::shouldDumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::shouldDumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveResponse):

2010-09-09  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Daniel Bates.

        svn-apply tries to delete directories it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=45424

        isDirectoryEmptyForRemoval had the wrong check. If an item in the
        directory is itself a directory, then the directory is definitely
        not empty.

        * Scripts/svn-apply:

2010-09-09  Chris Fleizach  <cfleizach@apple.com>

        Fixing GTK and windows build failure.

        AX: Support AccessibilityTextMarkers in DRT
        https://bugs.webkit.org/show_bug.cgi?id=44778

        * DumpRenderTree/AccessibilityTextMarker.h:
        (AccessibilityTextMarker::platformTextMarker):
        (AccessibilityTextMarkerRange::platformTextMarkerRange):
        * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:
        (AccessibilityTextMarker::platformTextMarker):
        (AccessibilityTextMarkerRange::platformTextMarkerRange):

2010-09-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: Support AccessibilityTextMarkers in DRT
        https://bugs.webkit.org/show_bug.cgi?id=44778

        Add AccessibilityTextMarker and AccessibilityTextMarkerRange which encapsulate the AXTextMarkers 
        that WebCore uses when vending information about its VisiblePositions through AX.

        There are a few new methods in AccessibilityUIElement to retrieve and use text markers, and some basic
        methods for encapsulating and checking equality.

        This will allow future bug fixes in the text marker system to be adequately tested.

        * DumpRenderTree/AccessibilityTextMarker.cpp: Added.
        (toTextMarker):
        (isMarkerEqualCallback):
        (markerFinalize):
        (AccessibilityTextMarker::makeJSAccessibilityTextMarker):
        (AccessibilityTextMarker::getJSClass):
        (toTextMarkerRange):
        (isMarkerRangeEqualCallback):
        (markerRangeFinalize):
        (AccessibilityTextMarkerRange::makeJSAccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::getJSClass):
        * DumpRenderTree/AccessibilityTextMarker.h: Added.
        (AccessibilityTextMarker::platformTextMarker):
        (AccessibilityTextMarkerRange::platformTextMarkerRange):
        (AccessibilityTextMarker::AccessibilityTextMarker):
        (AccessibilityTextMarker::~AccessibilityTextMarker):
        (AccessibilityTextMarker::isEqual):
        (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::isEqual):
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (textMarkerRangeForElementCallback):
        (textMarkerRangeLengthCallback):
        (textMarkerRangeForMarkersCallback):
        (startTextMarkerForTextMarkerRangeCallback):
        (endTextMarkerForTextMarkerRangeCallback):
        (accessibilityElementForTextMarkerCallback):
        (AccessibilityUIElement::textMarkerRangeForElement):
        (AccessibilityUIElement::textMarkerRangeLength):
        (AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: Added.
        (AccessibilityTextMarker::AccessibilityTextMarker):
        (AccessibilityTextMarker::~AccessibilityTextMarker):
        (AccessibilityTextMarker::isEqual):
        (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::isEqual):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::textMarkerRangeForElement):
        (AccessibilityUIElement::textMarkerRangeLength):
        (AccessibilityUIElement::textMarkerRangeForMarkers):
        (AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        * DumpRenderTree/win/DumpRenderTree.vcproj:

2010-08-25  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        don't delete duplicates needed because of intermediate results
        https://bugs.webkit.org/show_bug.cgi?id=44653

        Also, output the full path so we can pipe the output to rm.

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-09  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] MiniBrowser does not starts properly
        https://bugs.webkit.org/show_bug.cgi?id=45459

        Do not try set up the first window by calling newWindow on a
        newly created BrowserWindow since it creates a new object.
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/main.cpp:
        (main):

2010-09-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Get ImageDiff building on Win32
        https://bugs.webkit.org/show_bug.cgi?id=45353

        * DumpRenderTree/gtk/ImageDiff.cpp:
        (main): Switch from using strtok to g_strsplit.

2010-09-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Modify load method of MiniBrowser's BrowserView class
        https://bugs.webkit.org/show_bug.cgi?id=45442

        Modify load method to take a QString as argument, remove unnecessary QT_VERSION_CHECK.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::load):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::load):

2010-09-09  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        fix show_results in new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=45413

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-09-08  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium] Fix test results server to make sure
        it does not have corrupted data.

        results.json file size coulbe be >1M and we split
        the data into multiple data store entries in this
        case. This patch fixes the issue that the data may
        be corrupted if data store error happens in the middle
        of saving multiple entries.

        https://bugs.webkit.org/show_bug.cgi?id=45063

        * TestResultServer/model/datastorefile.py:

2010-09-08  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Fix ignoring return value warning in case of gcc 4.4.4
        https://bugs.webkit.org/show_bug.cgi?id=45384

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testPostURLFile):
        If fwrite have written zero byte then the testPostURLFile function
        returns with false as tempFile can't be opened.
        * DumpRenderTree/qt/ImageDiff.cpp:
        (main):
        Put fwrite function into an if condition without body to avoid
        warning. It is safe because this function writes to the stdout.

2010-09-08  Satish Sampath  <satish@chromium.org>

        Unreviewed, adding myself to committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-08  Hans Wennborg  <hans@chromium.org>

        Unreviewed.

        Adding myself as a committer in committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-08  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Refactor MiniBrowser 
        https://bugs.webkit.org/show_bug.cgi?id=45173

        Split BrowserWindow into two source files and headers. Remove unnecessary header includes.

        * MiniBrowser/qt/BrowserView.cpp: Added.
        (createNewPage):
        (BrowserView::BrowserView):
        (BrowserView::resizeEvent):
        (BrowserView::load):
        (BrowserView::view):
        * MiniBrowser/qt/BrowserView.h: Added.
        (BrowserView::~BrowserView):
        * MiniBrowser/qt/BrowserWindow.cpp:
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:

2010-09-08  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Rename DocLoader to CachedResourceLoader because that's what it does.

        * Scripts/do-webcore-rename:

2010-09-07  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Enable incremental results.json generation for non-layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=45315

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py: Enable generate_incremental_results=True by default. (This still keeps to generate results.json.)  Also add a code to upload results json files to the app-engine server.  Need a chromium change to actually start the uploading.

        * TestResultServer/model/jsonresults.py: Make sure we save the file with test_type for incremental cases too.


2010-09-07  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix

        Missed one test in mac_unittest.py in previous change; for some
        reason the method is listed twice. I will fix both for now, but will
        figure this out in a later, not-time-sensitive patch.

        https://bugs.webkit.org/show_bug.cgi?id=45357

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2010-09-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Tony Chang.

        test-webkitpy: Fix load error of
        webkitpy/layout_tests/port/factory_unittest.py on Win32 Python
        https://bugs.webkit.org/show_bug.cgi?id=45356 Need a short

        * Scripts/webkitpy/layout_tests/port/server_process.py:
          Avoid to import fcntl on win32. Win32 Python doesn't have fcntl
          and we don't use server_process.py on Win32 Python. However
          unittest.py tries to load everything in a module.

2010-09-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Kent Tamura.

        Fix regression introduced in previous change to new-run-webkit-tests
        (bug 45090) to not try to run unittests for the Mac implementation
        of the Port interface if we aren't running on a Mac.

        Also fix the overrides implementation mock in the chromium unittests
        to fix the case where there are overrides checked in that cause
        problems.

        https://bugs.webkit.org/show_bug.cgi?id=45357

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:

2010-09-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: still more unit tests

        Clean up and remove unnecessary code. Biggest notable change is
        moving the chromium-specific imagediff code from port/base to
        port/chromium.

        Add more unit tests for run_webkit_tests.py, port/base.py,
        port/factory.py, port/dryrun.py, and
        layout_package/dump_render_tree_thread.py

        This covers almost all of the generic and test code paths except for
        a few error paths involving invalid or port-specific command line
        arguments, and the code path for uploading results files to the
        buildbots.
        
        https://bugs.webkit.org/show_bug.cgi?id=45090

        * Scripts/webkitpy/layout_tests/data/failures/expected/hang.html: Added.
        * Scripts/webkitpy/layout_tests/data/http/tests/passes/text-expected.txt: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text-expected.txt.
        * Scripts/webkitpy/layout_tests/data/http/tests/passes/text.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text.html.
        * Scripts/webkitpy/layout_tests/data/http/tests/ssl/text-expected.txt: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text-expected.txt.
        * Scripts/webkitpy/layout_tests/data/http/tests/ssl/text.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text.html.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/data/websocket/tests/passes/text-expected.txt: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text-expected.txt.
        * Scripts/webkitpy/layout_tests/data/websocket/tests/passes/text.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text.html.
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py: Added.
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-09-07  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        Provide a way to trigger a <select multiple> onchange event on changes
        https://bugs.webkit.org/show_bug.cgi?id=45192

        Adds a selector on ObjCController for testing
        -[DOMHTMLSelectElement _activateItemAtIndex:allowMultipleSelection:] and
        its different uses.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController setSelectElement:selectedIndex:allowingMultiple:]):

2010-09-07  James Robinson  <jamesr@chromium.org>

        Rubber-stamped by Dimitri Glazkov.

        Move myself from the committer to the reviewer list.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-07  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Make a public flag for how DRT generates bitmaps on Linux
        https://bugs.webkit.org/show_bug.cgi?id=45133

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage):

2010-09-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Implement --check-layout-test-sys-deps
        https://bugs.webkit.org/show_bug.cgi?id=45283

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main): Check --check-layout-test-sys-deps and call checkLayoutTestSystemDependencies().
        * DumpRenderTree/chromium/TestShell.h: Declare checkLayoutTestSystemDependencies().
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (checkLayoutTestSystemDependencies): Add an empty implementation.
        * DumpRenderTree/chromium/TestShellMac.mm:
        (checkLayoutTestSystemDependencies): Add an empty implementation.
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (checkLayoutTestSystemDependencies): Port similar function of test_shell.

2010-09-07  Jessie Berlin  <jberlin@apple.com>

        Unreviewed. Mac build fix.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didClearWindowObjectForFrame):

2010-09-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Indicate which one of the ScriptWorlds for a Frame the Window Object has been cleared for
        https://bugs.webkit.org/show_bug.cgi?id=45217
        
        Make WebKitTestRunner work with this change.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        Make sure the ScriptWorld here is the normal world, since that is no longer being done in
        WebFrameLoaderClient.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-09-07  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, build fix.

        webkit-patch command to find the ports covering a specific layout test
        https://bugs.webkit.org/show_bug.cgi?id=42832

        * Scripts/webkitpy/layout_tests/port/chromium.py: Don't assume the
        tests are present when building the expectations. This is needed
        for the unittests.

2010-09-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Adam Barth.

        webkit-patch command to find the ports covering a specific layout test
        https://bugs.webkit.org/show_bug.cgi?id=42832

        To use it: webkit-patch skipped-ports some/layout/test.html

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-07  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        [NRWT] Add temp directory to all running drivers.
        https://bugs.webkit.org/show_bug.cgi?id=45261

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-09-06  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium/DRT] Empty out user stylesheet after each test run.
        https://bugs.webkit.org/show_bug.cgi?id=45282

        This should significantly cut down on the number of the mysterious flaky tests
        whose diffs looked like the page was blown up to a very lage size. This
        was indeed the dirty work of platform/mac/fast/loader/user-stylesheet-fast-path.html,
        which set the base body font to 100px.

        Since the user stylesheet was never reset, _all_ pixel tests that ran after it in
        the same thread failed.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings): Set user stylesheet to an empty URL.

2010-09-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Do not generate pixel results for text/plain resources
        https://bugs.webkit.org/show_bug.cgi?id=45253

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump): Clear shouldGeneratePixelResults flag for text/plain.

2010-09-06  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Kent Tamura.

        print out correct error when a DRT thread dies in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=45281

        Not sure why, but with the parens, python 2.6.5 on Linux
        gives an error that raise takes 5 arguments and 0 were given.
        Didn't test other platforms or python versions, but putting it
        all on one line fixes it and correctly prints the exception
        from the DRT thread.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-09-06  Eric Seidel  <eric@webkit.org>

        Unreviewed, just adding some emails from lists.webkit.org.

        Update committers.py to include emails from lists.webkit.org
        as found by the validate-committer-lists script.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Small code cleanup in DumpRenderTreeGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=45213

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Made this function do nothing for non-X11 platforms, so we don't
        have to surround the invocation with #ifdefs.
        (useLongRunningServerMode): Added.
        (runTestingServerLoop): Added.
        (initializeGlobalsFromCommandLineOptions): Added.
        (runTest): Removed ifdefs.
        (main): Use new helper functions.

2010-09-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] EventSender should support modifier keys with mouseDown and mouseUp events
        https://bugs.webkit.org/show_bug.cgi?id=45235

        Add support for interpreting the modifier key arguments to the mouseDown and mouseUp
        methods of the EventSender.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Allow passing in a modifier bitmask, which will be OR'd
        with the current modifiers.
        (contextClickCallback): Always send no modifiers when preparing the mouse event.
        (gdkModifersFromJSValue): Added, converts a JSValue array into a GDK modifier bitmask.
        (mouseDownCallback): Send in the requested modifiers to prepareMouseButtonEvent.
        (mouseUpCallback): Ditto.

2010-09-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Make Chromium/Mac generate continuous mousewheel events with the same wheelDelta values as Safari/Mac.
        https://bugs.webkit.org/show_bug.cgi?id=45155

        * DumpRenderTree/chromium/EventSender.cpp: Modify Chromium DRT mousewheel event generation to match new behavior on Mac.
        (EventSender::handleMouseWheel):

2010-09-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: remove WebDevToolsAgentClient::forceRepaint which is not used
        https://bugs.webkit.org/show_bug.cgi?id=45179

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-09-05  Andreas Kling  <andreas.kling@nokia.com>

        Rubber-stamped by Daniel Bates.

        Adding myself as reviewer.

        * Scripts/webkitpy/common/config/committers.py:

2010-09-04  Daniel Bates  <dbates@rim.com>

        Reviewed by Martin Robinson.

        Teach svn-apply/unapply about svn:mergeinfo
        https://bugs.webkit.org/show_bug.cgi?id=45236

        Recognize the svn:mergeinfo property and ignore it for now.

        Currently, svn-apply/unapply recognize only '+' and '-'
        property changes within a diff. We should add support
        to recognize "Merged" and "Reverse-merged" changes as well.
        Because svn:mergeinfo is metadata that is used only by SVN
        and tends to be error-prone and/or nuisance (*), we will ignore
        it for now.
        (*) See "Parting Thoughts" of <http://www.collab.net/community/subversion/articles/merge-info.html>.

        * Scripts/VCSUtils.pm:
          - Modified parseSvnProperty() to recognize "Merged" and
            "Reverse-merged" as the start of a property value.
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffFooter.pl:
          - Added the following unit tests:
            "simple: add svn:mergeinfo"
            "simple: delete svn:mergeinfo"
            "simple: modified svn:mergeinfo"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
          - Added the following unit tests:
            "simple: add svn:mergeinfo"
            "simple: delete svn:mergeinfo"
            "simple: modified svn:mergeinfo"
            "simple: modified svn:mergeinfo using SVN 1.4 syntax"
            "'Merged' change followed by 'Merged' change"
            "'Reverse-merged' change followed by 'Reverse-merged' change"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
          - Added the following unit tests:
            "'Merged' change"
            "'Reverse-merged' change"
            "'Reverse-merged' change followed by 'Merge' change"
            "'Merged' change followed by 'Merge' change"
            "'Reverse-merged' change followed by 'Reverse-merged' change"
            "'Reverse-merged' change followed by 'Reverse-merged' change followed by 'Merged' change"

2010-09-04  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Move test browser to WebKitTools directory
        https://bugs.webkit.org/show_bug.cgi?id=45212

        Follow other ports like QT and GTK which moved the test browser to
        WebKitTools directory.

        * CMakeListsEfl.txt: Added.
        * EWebLauncher/main.c: Added.
        (print_history):
        (zoom_level_set):
        (on_ecore_evas_resize):
        (title_set):
        (viewport_set):
        (on_title_changed):
        (on_progress):
        (on_load_finished):
        (on_toolbars_visible_set):
        (on_toolbars_visible_get):
        (on_statusbar_visible_set):
        (on_statusbar_visible_get):
        (on_scrollbars_visible_set):
        (on_scrollbars_visible_get):
        (on_menubar_visible_set):
        (on_menubar_visible_get):
        (on_tooltip_text_set):
        (on_inputmethod_changed):
        (on_viewport_changed):
        (on_mouse_down):
        (on_focus_out):
        (on_focus_in):
        (on_resized):
        (on_key_down):
        (on_browser_del):
        (on_closeWindow):
        (quit):
        (browserCreate):
        (browserDestroy):
        (closeWindow):
        (main_signal_exit):
        (findThemePath):
        (main):

2010-09-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        Set project dependencies so that they build serially. This fixes
        issues when running run-webkit-tests if DRT is not built yet.

        * DumpRenderTree/DumpRenderTree.sln:

2010-09-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Fix reading configuraiton in NWRT to work on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=45180

        * Scripts/webkitpy/layout_tests/port/base.py: Added 'perl' argument, because Windows doesn't know what to do
            with the file otherwise.

2010-09-03  Chris Rogers  <crogers@google.com>

        Unreviewed

        Add myself to the committers list
        https://bugs.webkit.org/show_bug.cgi?id=45189

        * Scripts/webkitpy/common/config/committers.py:

2010-09-03  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        http/tests/inspector/console-xhr-logging.html and http/tests/inspector/resource-har-conversion.html are failing on chromium win bot
        Changed MIME type for .js to application/x-javascript for consistency with apache used on other platforms.
        https://bugs.webkit.org/show_bug.cgi?id=45137

        * Scripts/webkitpy/layout_tests/port/lighttpd.conf:

2010-09-03  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        Add feature detection support to NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=41842

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Added.

2010-09-03  Hironori Bono  <hbono@chromium.org>

        Reviewed by Kent Tamura.

        Adds textInputController.hasSpellingMarker() to avoid using pixel tests for spellchecking tests
        and implements it for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=41832

        * DumpRenderTree/mac/TextInputController.m: Added [TextInputController hasSpellingMarker:length:]
        and bind it so we can call it from JavaScript.
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController hasSpellingMarker:length:]):

2010-09-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add a unit test for commit-queue retries
        https://bugs.webkit.org/show_bug.cgi?id=45162

        I think commit-queue retries are not correctly avoiding
        build and test on retries.  So I started testing the code.
        Unfortunately this test did not find the bug.  But now
        that we have the test we might as well keep it.
        I also fixed a broken import in validate-committer-lists.

        * Scripts/validate-committer-lists:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove dependency to base/task.h and base/timer.h
        https://bugs.webkit.org/show_bug.cgi?id=45091

        Task.{cpp,h} introduces a simpler version of Chromium
        base/task.h. It doesn't have TupleN and Method.

        * DumpRenderTree/DumpRenderTree.gypi:
         Add Task.cpp and Task.h
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::DRTDevToolsAgent):
        (DRTDevToolsAgent::reset):
        (DRTDevToolsAgent::asyncCall):
        (DRTDevToolsAgent::frontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        (DRTDevToolsAgent::taskList): Added to use MethodTask<T>.
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::DRTDevToolsClient):
        (DRTDevToolsClient::~DRTDevToolsClient):
        (DRTDevToolsClient::reset):
        (DRTDevToolsClient::asyncCall):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        (DRTDevToolsClient::taskList): Added to use MethodTask<T>.
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::reset):
        (EventSender::scheduleAsynchronousClick):
        * DumpRenderTree/chromium/EventSender.h:
        (EventSender::taskList): Added to use MethodTask<T>.
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::WorkQueue::processWorkSoon):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::taskList): Added to use MethodTask<T>.
        (LayoutTestController::WorkQueue::taskList): Added to use MethodTask<T>.
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (deferredDisplayDispatch):
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/Task.cpp: Added.
        * DumpRenderTree/chromium/Task.h: Added.

2010-09-02  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Hook up LayoutTestController.setMockDeviceOrientation() on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=43181

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockDeviceOrientation):

2010-08-31  Adam Roben  <aroben@apple.com>

        Fix flashiness when resizing the browser window on Windows

        Reviewed by Sam Weinig.

        * MiniBrowser/win/BrowserWindow.cpp:
        (BrowserWindow::wndProc): Override WM_ERASEBKGND so Windows won't
        periodically fill the window with white.

2010-09-02  Peter Kasting  <pkasting@google.com>

        Reviewed by Dimitri Glazkov.

        Implement [continuous]MouseScrollBy() on Chromium, and partly on GTK.
        https://bugs.webkit.org/show_bug.cgi?id=45073

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::mouseScrollBy):
        (EventSender::continuousMouseScrollBy):
        (EventSender::sendCurrentTouchEvent):
        (EventSender::handleMouseWheel):
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseScrollByCallback):
        (continuousMouseScrollByCallback):

2010-09-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Land a patched version of r66542 - change TestRunner to have an
        separate cleanup method and fix the ordering of cleanup between
        TestRunner and the printing module, and then wrap everything in a
        try/finally block to ensure reliable cleanup without needing to
        rely on stuff happening in the destructor of the TestRunner.

        Also refactor run_webkit_tests.run() to be much smaller and cleaner
        by creating a bunch of helper methods and moving more stuff into
        the TestRunner class.

        This fixes the crash at the end of the linux test run of
        new-run-webkit-tests (and undoes the rollout in 66547).

        https://bugs.webkit.org/show_bug.cgi?id=44902

        * Scripts/webkitpy/layout_tests/data/failures/expected/exception.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/keyboard.html: Added.
        * Scripts/webkitpy/layout_tests/data/passes/error-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/error.html: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-09-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Roben.

        Fix TestNetscapePlugIn to compile without access to QuickDraw private headers.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:

2010-09-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Have kill-old-processes kill debug and release variants of WebKit2WebWebProcess
        and WebKitTestRunner.

        * BuildSlaveSupport/win/kill-old-processes:

2010-09-01  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        [Qt] Remove obsolete include path from DumpRenderTree.pro

        * DumpRenderTree/qt/DumpRenderTree.pro:

2010-09-01  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] QWebPage::allowGeolocationRequest should be async API
        https://bugs.webkit.org/show_bug.cgi?id=41364

        Implements new async API for geolocation permission similar to
        Notification. WebPage maintains list of geolocation permission request
        QtWebkit and set's when LayoutTestController gets the access from test JS

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::cancelPermission):
        (WebCore::WebPage::permissionSet):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::processLine):
        (WebCore::DumpRenderTree::geolocationPermissionSet):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setGeolocationPermissionCommon):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-09-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Antti Koivisto.

        [Qt] Auto-generate WebKit2 forwarding headers
        https://bugs.webkit.org/show_bug.cgi?id=44692

        * MiniBrowser/qt/BrowserWindow.h: use source style includes
        * MiniBrowser/qt/MiniBrowser.pro: add missing include paths
        * Scripts/enumerate-included-framework-headers: Removed.

2010-08-31  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Adam Barth.

        Allow Ctrl+C inside Bugzilla::fetch_bug_dictionary
        https://bugs.webkit.org/show_bug.cgi?id=44789

        * Scripts/webkitpy/common/net/bugzilla.py:

2010-08-31  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Adam Barth.

        ews: Add support for EFL-EWS
        https://bugs.webkit.org/show_bug.cgi?id=44982

        * QueueStatusServer/model/queues.py: Add "efl-ews" to queues list.
        * Scripts/webkitpy/common/config/ports.py: Define a EflPort class
        and add it to the ports dict.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py: Define a
        EflEWS class.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py: Add
        a test case for the EFL EWS.

2010-08-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42195
        <rdar://problem/8186761> WebKitTestRunner needs to support layoutTestController.setXSSAuditorEnabled

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: (WTR::LayoutTestController::setXSSAuditorEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Added setXSSAuditorEnabled, calling through to an WKBundle private method. Calling this method
        makes WebProcess use a different value for this preference than UIProcess thinks it uses.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetStateToConsistentValues):
        Reset xssAuditorEnabled. Even though the value doesn't change, this calls through to WebProcess,
        which forgets its override.

2010-08-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        WebKitTestRunner needs layoutTestController.addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=42680

        WebKitTestRunner needs layoutTestController.addUserScript
        https://bugs.webkit.org/show_bug.cgi?id=42681

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::addUserScript):
        (WTR::LayoutTestController::addUserStyleSheet):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-08-31  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r66542.
        http://trac.webkit.org/changeset/66542
        https://bugs.webkit.org/show_bug.cgi?id=44902

        r66542 - the weird logging dependencies in Python stuck again ...

        * Scripts/webkitpy/layout_tests/data/failures/expected/exception.html: Removed.
        * Scripts/webkitpy/layout_tests/data/failures/expected/keyboard.html: Removed.
        * Scripts/webkitpy/layout_tests/data/passes/error-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/passes/error.html: Removed.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-31  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Tony Chang.

        Implementing LayoutTestController::markerTextForListItem() in Chromium's DRT.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::markerTextForListItem):
        * DumpRenderTree/chromium/LayoutTestController.h:

2010-08-31  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add more unit tests

        Add more unit tests for new-run-webkit-tests; we now cover all but
        the most obscure code paths in the generic code. We still need to
        add coverage for the http server and web socket paths, and add better
        coverage of the platform-specific logic. Note that the rebaselining
        tool is still not well tested.

        Also clean up some of the configuration logic for the printing
        module and the way it interacts with the Python logging module; that
        is a crufty interface, to be certain.
        
        https://bugs.webkit.org/show_bug.cgi?id=44902

        * Scripts/webkitpy/layout_tests/data/failures/expected/exception.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/keyboard.html: Added.
        * Scripts/webkitpy/layout_tests/data/passes/error-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/error.html: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        * Scripts/check-for-global-initializers: Add a file that ends up having global initializers
        in a debug build when built with certain compilers.

2010-08-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Isolate all GTK+ typedefs into one file
        https://bugs.webkit.org/show_bug.cgi?id=44900

        * DumpRenderTree/gtk/EventSender.h: Remove GTK+ typedefs.

2010-08-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Show more status on queue status pages
        https://bugs.webkit.org/show_bug.cgi?id=44938

        I upped the number of status lines from 6 to 15 --
        this has been bugging me for a while...

        I also disabled showing the chromium-win EWS queue
        since it's been down for almost 5 months now.

        * QueueStatusServer/handlers/dashboard.py:
        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/model/queues.py:

2010-08-31  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Read command line arguments and open them as URLs in new windows
        https://bugs.webkit.org/show_bug.cgi?id=44944

        Extend MiniBrowser to accept command line arguments and open them as URLs in new browser windows.

        * MiniBrowser/qt/main.cpp:
        (main):

2010-08-31  Adrian Perez  <aperez@igalia.com>

        Reviewed by Martin Robinson.

        Support scripts to run Buildbot slaves under daemontools (gtk related)
        https://bugs.webkit.org/show_bug.cgi?id=40053

        * BuildSlaveSupport/gtk: Added.
        * BuildSlaveSupport/gtk/README: Added.
        * BuildSlaveSupport/gtk/buildbot: Added.
        * BuildSlaveSupport/gtk/buildbot/log: Added.
        * BuildSlaveSupport/gtk/buildbot/log/run: Added.
        * BuildSlaveSupport/gtk/buildbot/run: Added.
        * BuildSlaveSupport/gtk/crashmon: Added.
        * BuildSlaveSupport/gtk/crashmon/crashmon: Added.
        * BuildSlaveSupport/gtk/crashmon/log: Added.
        * BuildSlaveSupport/gtk/crashmon/log/run: Added.
        * BuildSlaveSupport/gtk/crashmon/run: Added.
        * BuildSlaveSupport/gtk/daemontools-buildbot.conf: Added.
        * BuildSlaveSupport/gtk/pulseaudio: Added.
        * BuildSlaveSupport/gtk/pulseaudio/run: Added.
        * BuildSlaveSupport/gtk/xvfb: Added.
        * BuildSlaveSupport/gtk/xvfb/log: Added.
        * BuildSlaveSupport/gtk/xvfb/log/run: Added.
        * BuildSlaveSupport/gtk/xvfb/run: Added.

2010-08-27  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Notifications should support a click event.
        Adds necessary hooks to chromium's DRT so that clicks on desktop notifications
        can be simulated during a layout test.  Requires storing a list of active
        notifications so that they can be referred to later for clicking.
        https://bugs.webkit.org/show_bug.cgi?id=44800

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::simulateDesktopNotificationClick):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::simulateClick):
        (NotificationPresenter::show):
        (NotificationPresenter::cancel):
        (NotificationPresenter::objectDestroyed):
        * DumpRenderTree/chromium/NotificationPresenter.h:

2010-08-30  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin Adler.

        Add missing parts of didFinishDocumentLoadForFrame
        https://bugs.webkit.org/show_bug.cgi?id=44913

        * MiniBrowser/mac/BrowserWindowController.m:
        (didFinishDocumentLoadForFrame): Added
        (-[BrowserWindowController awakeFromNib]): Updated struct
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Rearranged function ptr
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Updated struct

2010-08-30  Vangelis Kokkevis  <vangelis@chromium.org>

        Unreviewed: Add myself to the list of Committers.

        * Scripts/webkitpy/common/config/committers.py:

2010-08-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Fix fast/notifications/notifications-display-close-events.html failure
        https://bugs.webkit.org/show_bug.cgi?id=44585

        Apply http://crrev.com/48893. We should dispatch display events
        asynchronously.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (deferredDisplayDispatch):
        (NotificationPresenter::show):

2010-08-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        allow ports with windowed plugins to support windowless plugin tests

        https://bugs.webkit.org/show_bug.cgi?id=40730

        Ports that implement plugins windowed by default need to have a way of
        supporting plugin tests that assume the plugin is windowless. Add this
        feature to the tests and support it in the webkit test plugin. Also
        add mouse and keyboard event logging to the webkit-test plugin on Unix.

        Unskip the following tests on Qt:

        plugins/mouse-events.html
        plugins/keyboard-events.html
        plugins/mouse-events-fixedpos.html

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginSetProperty):
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_handle_event):

2010-08-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after addition of fileapi directory in WebCore.

        * wx/build/settings.py:

2010-08-30  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Fixed compilation error, now that we have included the
        GtkVersioning.h we have to remove some version dependent code from
        EventSender.

        * DumpRenderTree/gtk/EventSender.cpp:

2010-08-30  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] gdk_display_get_core_pointer and gdk_device_get_core_pointer
        are deprecated
        https://bugs.webkit.org/show_bug.cgi?id=44787

        We have replaced GtkVersioning.cpp with GtkVersioning.c and
        created a function (getDefaultGDKPointerDevice) to get the pointer
        of the window with the new APIs. We added that function to DRT and
        copyandpaste unit test.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent):
        (mouseMoveToCallback):
        (keyDownCallback):
        * GNUmakefile.am:

2010-08-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add new window menu to MiniBrowser

        Implement newWindow function and add a menu item for opening new window in MiniBrowser.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::newWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/main.cpp:
        (main):

2010-08-29  James Robinson  <jamesr@chromium.org>

        Reviewed by David Levin.

        Make failing the download step fail the build
        https://bugs.webkit.org/show_bug.cgi?id=44298

        If the download step fails on a test bot, this ensures that
        the build goes red instead of only the download step going red
        and the overall build staying green.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:

2010-08-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove dependency to base/keyboard_codes.h
        https://bugs.webkit.org/show_bug.cgi?id=44847

        * DumpRenderTree/chromium/EventSender.cpp:
         Use webkit_support::VKEY_* instead of base::VKEY_*.

2010-08-29  Darin Adler  <darin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=40589

        * Scripts/prepare-ChangeLog: Only prepend namespaces to non-empty
        function names.

2010-08-26  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Reviewed by Darin Adler.

        [iExploder] Add new CSS Properties and HTML Attributes
        https://bugs.webkit.org/show_bug.cgi?id=44746

        Updated the files with the update-iexploder-cssproperties script
        and manually readded the -webkit-binding CSS Property to the list.

        * iExploder/htdocs/cssproperties.in:
        * iExploder/htdocs/htmlattrs.in:
        * iExploder/htdocs/htmltags.in:

2010-08-26  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Reviewed by Darin Adler.

        Fix Coverage build after the addition of ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=44744

        ANGLE is using libtool to build a static library and the version of
        libtool on Leopard refuses to handle the -fprofile-arcs and -ftest-coverage
        parameters. The easiest way to handle this is to not build ANGLE with
        coverage information.

        This is achieved by applying the XCode options for each project
        separately and exclude ANGLE.

        * Scripts/build-webkit: Remove -framework AppKit due link errors.
        * Scripts/webkitdirs.pm: Do not apply the XCode options for ANGLE.

2010-08-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after directory addition.

        * wx/build/settings.py:

2010-08-28  Chris Guillory   <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Add AX notification for childrenChanged
        https://bugs.webkit.org/show_bug.cgi?id=44472

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::reset):
        (AccessibilityController::getRootElement):
        (AccessibilityController::dumpAccessibilityNotifications):
        * DumpRenderTree/chromium/AccessibilityController.h:
        (AccessibilityController::shouldDumpAccessibilityNotifications):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didChangeAccessibilityObjectChildren):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-08-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update commit-queue failure message
        https://bugs.webkit.org/show_bug.cgi?id=44798

        The commit-queue auto-restarts itself and has for a very long time.
        No need for people to email me to request a restart anymore.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-07-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Add JavaScript API to allow a page to go fullscreen.
        rdar://problem/6867795
        
        Added basic full screen support to DumpRenderTree: when a webView requests
        that DumpRenderTree go "full screen", just call the provided callback listener object's
        will/did Enter/Exit full screen methods.  Also, register a new user default which 
        enables full screen support.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:supportsFullscreenForElement:]):
        (-[UIDelegate webView:enterFullscreenForElement:listener:]):
        (-[UIDelegate webView:exitFullscreenForElement:listener:]):

2010-08-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Unreviewed. Add myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-08-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Pavel Feldman.

        [DRT/Chromium] Fix inspector test failures
        https://bugs.webkit.org/show_bug.cgi?id=44748

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::createClientMessageLoop):
          Returns a valid WebKitClientMessageLoop instance
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-08-26  Jon Honeycutt  <jhoneycutt@apple.com>

        Add Windows WebKit2 Tester to buildbot
        <rdar://problem/7887703>

        Reviewed by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2010-08-26  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Needs DRT queueLoadHTMLString and setDeferMainResourceLoad-implementations
        https://bugs.webkit.org/show_bug.cgi?id=42152

        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (LoadHTMLStringItem::invoke): Implementation using
        webkit_web_frame_load_string().

2010-08-25  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/8334338> run-webkit-tests sometimes hangs when using
        WebKitTestRunner (44331)

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        The hang occurs when WebKitTestRunner begins launching the WebKit2
        web process then exits before it finishes launching. Work around this by
        looking for the --print-supported-features argument and exiting without
        creating the web process.

2010-08-26  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: add rebaselining tests for test_expectations
        
        This patch adds more unit tests for the rebaselining code in the
        test_expectations module. It doesn't add any tests for
        rebaseline_chromium_webkit_tests itself; that will come some other
        time.

        https://bugs.webkit.org/show_bug.cgi?id=44648

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:

2010-08-26  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Add HTTP caching support
        https://bugs.webkit.org/show_bug.cgi?id=44261

        Ignore new soup API that we decided to merge into the soup backend
        while it is being cooked. It follows the libsoup style, and will
        be removed from WebKit as soon as it is merged into libsoup.

        * Scripts/webkitpy/style/checker.py:

2010-08-26  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DumpRenderTree runs only one test from command mode
        https://bugs.webkit.org/show_bug.cgi?id=44012

        Enables support to run multiple test files and single
        folder containing html files in stand alone mode

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::processArgsLine):
        (WebCore::DumpRenderTree::loadNextTestInStandAloneMode):
        (WebCore::DumpRenderTree::processLine):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::setStandAloneMode):
        (WebCore::DumpRenderTree::isStandAloneMode):
        * DumpRenderTree/qt/main.cpp:
        (main):

2010-08-25  Martin Robinson  <mrobinson@igalia.com>

        Updating webkitpy test expectations.

        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2010-08-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        fix the always squash git config
        https://bugs.webkit.org/show_bug.cgi?id=44651

        Fix help text and apparently underscores are not allowed
        in git config keys.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/tool/steps/commit.py:

2010-08-25  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        * Scripts/commit-log-editor: Fix perl warning for people who have no
        value for SVN_LOG_EDITOR or CVS_LOG_EDITOR.

2010-08-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        stop blocking commits when the bots are red
        https://bugs.webkit.org/show_bug.cgi?id=44644

        This check currently is just annoying. It doesn't actually
        help keep the tree green. We can always add it back later
        if we decide the tree is generally more green.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py:

2010-08-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        REGRESSION: media/video-loop.html is timing out on the commit-queue Leopard Bot
        https://bugs.webkit.org/show_bug.cgi?id=38912

        I know of nothing else to do but skip all media tests for the cq.

        * Scripts/webkitpy/tool/steps/runtests.py:

2010-08-25  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add more unit tests for test_expectations
        This adds unit tests to cover (almost?) all of the non-rebaselining
        functionality.

        https://bugs.webkit.org/show_bug.cgi?id=44579

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:

2010-08-25  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add more unit tests

        This change adds more unit tests for the image_diff, test_failures,
        and test_files modules, bringing them to 100% coverage (and adds a
        couple tests to run_webkit_tests while we're at it).

        This test also turns on the "dryrun" port for testing when run on
        the mac, increasing coverage in a few other places.

        https://bugs.webkit.org/show_bug.cgi?id=44578

        * Scripts/webkitpy/layout_tests/data/failures/expected/checksum-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/checksum-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/checksum-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/checksum.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum.html.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_check-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_check-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_check.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/failures/expected/missing_image.html.
        * Scripts/webkitpy/layout_tests/data/failures/expected/timeout.html: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/data/resources/README.txt: Added.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-25  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add more unit tests for layout_package/printing.py

        This change adds more unit tests to get the test coverage to 100%
        for the printing module. This code is actually pretty crufty and
        has some layering violations that need to be cleaned up but I'll
        save that for another CL after we get all the unit tests written and
        we fix the multithreading issues. At least now we'll be able to tell
        if we break things.

        https://bugs.webkit.org/show_bug.cgi?id=44576

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2010-08-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests should respect set-webkit-configuration
        https://bugs.webkit.org/show_bug.cgi?id=44633

        Moves the getting of the configuration into the base Port so that
        chromium ports use it as well. In the downstream chromium port,
        this should still just return Release.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-08-25  Tony Chang  <tony@chromium.org>

        Not reviewed, changing svn props for a script.

        * Scripts/deduplicate-tests: Added properties svn:executable and svn:eol-style.

2010-08-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WebKit2 from core builders
        https://bugs.webkit.org/show_bug.cgi?id=44625

        This builder was added to the core builders by accident.  It doesn't
        appear to be green enough to be a core builder yet.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:

2010-08-19  Adam Roben  <aroben@apple.com>

        Test that NP_Initialize and NP_GetEntryPoints are called in the
        correct order

        The order differs between Mac and Windows (see r38858).

        Fixes <http://webkit.org/b/44270> <rdar://problem/8330393> Crash in
        NP_Initialize when loading QuickTime when running
        plugins/embed-attributes-setting.html in WebKit2 on Windows

        Reviewed by John Sullivan.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Added a CRASH macro and
        a boolean to record whether NP_GetEntryPoints has been called.
        (NP_Initialize): Crash on Windows if NP_GetEntryPoints hasn't been
        called yet. This matches Flash and QuickTime's behavior.
        (NP_GetEntryPoints): Crash on Mac if NP_Initialize hasn't been called
        yet. This matches Silverlight's behavior.

2010-08-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        Cairo and EFL port shouldn't depend on glib.
        https://bugs.webkit.org/show_bug.cgi?id=44354

        Replace occurrences of GRefPtr and adoptGRef with PlatformRefPtr and
        adoptPlatformRef.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isSelected):

2010-08-25  Ojan Vafai  <ojan@chromium.org>

        Fix order of Timothy's email address. The script, and
        other tools all assume that the first email is the bugzilla address.

        * Scripts/webkitpy/common/config/committers.py:

2010-08-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Pavel Feldman.

        [DRT/Chromium] Fix 26 inspector test crashes
        https://bugs.webkit.org/show_bug.cgi?id=44580

        - DRTDevToolsAgent has a reference to the main WebView. So we
          should not clear it in closeDevTools() and should clear it in
          ~TestShell().
        - DRTDevToolsClient has a reference to a DevTools WebView and no
          way to update it. So we should delete DRTDevToolsClient instances
          in closeDevTools().

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell):
        (TestShell::closeDevTools):

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        unicode(Exception(\u"0x1234")) is busted in python 2.5, disable tests which hit this
        https://bugs.webkit.org/show_bug.cgi?id=44584

        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue and EWS bots should report all failures
        https://bugs.webkit.org/show_bug.cgi?id=41820

        Right now commit-queue/EWS only report failures when the
        patch under testing fails.  We should report all failures
        to the status server so that we can diagnose when the bots
        are wedged w/o needing to log into the machines.

        I also reduced the amount of data we upload since we've seen
        timeouts during status upload.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove HTML5 parser testing infrastructure now that we don't need it
        https://bugs.webkit.org/show_bug.cgi?id=44581

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (initializeGlobalsFromCommandLineOptions):
        * Scripts/old-run-webkit-tests:
        * Scripts/test-html5-parser: Removed.

2010-08-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Fix 28 inspector test crashes
        https://bugs.webkit.org/show_bug.cgi?id=44574

        Reset DevToolsClient and DevToolsAgent before closing a DevTools
        WebView in order to avoid accessing to a deleted WebView instance.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::closeDevTools):

2010-08-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: clean up code for test_types, test_failures

        Add a bunch of unit tests for webkitpy.layout_tests.test_types and
        webkitpy.layout_tests.layout_package.test_failures, and remove
        some dead code and otherwise clean up things.

        https://bugs.webkit.org/show_bug.cgi?id=44559

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-08-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: revise unit testing strategy for test failures
    
        This change revamps the way we store test data for new-run-webkit-tests.
        Previously we had a few copies of test files from the main test tree.
        Now we have a bunch of completely fake test data and use the test
        data to generate different kinds of test failures, getting
        much better coverage.

        https://bugs.webkit.org/show_bug.cgi?id=44556

        * Scripts/webkitpy/layout_tests/data/failures/expected/crash.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_image.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_text.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/text-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/text.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/unexpected/text-image-checksum-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/failures/unexpected/text-image-checksum-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/unexpected/text-image-checksum-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/unexpected/text-image-checksum.html: Added.
        * Scripts/webkitpy/layout_tests/data/image/canvas-bg.html: Removed.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom-expected.checksum: Removed.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom-expected.png: Removed.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom.html: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/crash-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/crash.html: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/missing-expectation.html: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/passing-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/passing.html: Removed.
        * Scripts/webkitpy/layout_tests/data/passes/image-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/passes/image-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/passes/image-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/image.html: Added.
        * Scripts/webkitpy/layout_tests/data/passes/platform_image-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/passes/platform_image-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/passes/platform_image-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/platform_image.html: Added.
        * Scripts/webkitpy/layout_tests/data/passes/text-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/text.html: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/image/canvas-bg-expected.checksum: Removed.
        * Scripts/webkitpy/layout_tests/data/platform/test/image/canvas-bg-expected.png: Removed.
        * Scripts/webkitpy/layout_tests/data/platform/test/image/canvas-bg-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/platform/test/passes/platform_image-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/passes/platform_image-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/passes/platform_image-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/data/text/article-element-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/text/article-element.html: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2010-08-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        speed up new-run-webkit-tests unit tests

        Add a --no-record-results flag that turns off generating the JSON
        results file on every test run. Generating the file requires us to
        fetch the old results down from the bots, which can be slow. This
        flag is off by default.
    
        Reduce the sleep time in wait_for_threads_to_finish from 0.1s to 0.01s.
    
        These changes together shorten the test cycle from ~4.5s to ~1.5s
        - a 3x speedup.

        https://bugs.webkit.org/show_bug.cgi?id=44553

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-24  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] fix the platform result fallback order on mac/win
        https://bugs.webkit.org/show_bug.cgi?id=44483

        * Scripts/webkitpy/layout_tests/port/google_chrome.py:

2010-08-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Set a device to the event struct when building with GTK+ 3.x, it's
        mandatory.

        * DumpRenderTree/gtk/EventSender.cpp:
        (keyDownCallback):

2010-08-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
        https://bugs.webkit.org/show_bug.cgi?id=44534

        Fix two double-frees introduced in my previous commit.

        * DumpRenderTree/gtk/EventSender.cpp:
        (contextClickCallback): Copy the event before using it again.
        (keyDownCallback): Ditto.

2010-08-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
        https://bugs.webkit.org/show_bug.cgi?id=44534

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Use gdk_event_new and reference the reference the GdkWindow
        when setting it on the event. It is dereferenced by gdk_event_free(...).
        (contextClickCallback): Ditto.
        (mouseDownCallback): Ditto.
        (mouseUpCallback): Ditto.
        (mouseMoveToCallback): Ditto.
        (mouseWheelToCallback): Ditto.
        (sendOrQueueEvent): Take a GdkEvent* instead of a GdkEvent.
        (dispatchEvent): Ditto. Also free the event when we are done with it.
        (keyDownCallback): Use gdk_event_new and reference the GdkWindow.

2010-08-24  Andras Becsi  <abecsi@webkit.org>

        [Qt] WebKit2 build fix.

        * Scripts/enumerate-included-framework-headers:
        Remove stray global option form sed.

2010-08-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Jeremy Orlow.

        [DRT/Chromium] Support for IndexedDB tests
        https://bugs.webkit.org/show_bug.cgi?id=44490

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell): Enable IndexedDB.

2010-08-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] The 64-bit Release bot is showing crashes on tests that use mouse buttons
        https://bugs.webkit.org/show_bug.cgi?id=44465

        Initialize the axes field of mouse button and motion events to null.
        This is the value that should be used for events originating from the
        mouse device.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Initalize button event axes field to null.
        (mouseMoveToCallback): Initialize motion event axes field to null.

2010-08-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65703.
        http://trac.webkit.org/changeset/65703
        https://bugs.webkit.org/show_bug.cgi?id=44460

        "Causing lots of crashes on Snow Leopard when running the
        layout tests" (Requested by eseidel2 on #webkit).

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_Initialize):
        (NP_GetEntryPoints):

2010-08-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Layout tests do not run when using WebKitTestRunner in a Debug build.
        https://bugs.webkit.org/show_bug.cgi?id=44409

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeInjectedBundlePath):
        Use InjectedBundle_debug.dll when building Debug.

2010-08-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] run-launcher fails if WebKitGTK+ compiled with GTK+-3.0 support
        https://bugs.webkit.org/show_bug.cgi?id=42026

        If a GTK+ 3.x build is present return that as the library to use,
        otherwise fallback to the GTK+ 2.x build.

        * Scripts/webkitdirs.pm:

2010-08-23  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Ariya Hidayat.

        [Qt] Find needed forwarding headers for WebKit2 automatically
        https://bugs.webkit.org/show_bug.cgi?id=44336

        * MiniBrowser/qt/BrowserWindow.cpp: Use normal (not framework style) includes here.
        The new script does not satisfy the needs of this file however using normal includes
        is generally better here.
        * MiniBrowser/qt/MiniBrowser.pro: Added include paths.
        * Scripts/enumerate-included-framework-headers: Enumerates headers included from the 
        given frameworks by files in the current directory (and subdirectories).
        In the future this needs to be rewritten in perl for being able to use on Windows.

2010-08-22  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Qt test browser: enable a QGLWidget viewport with a command line argument
        https://bugs.webkit.org/show_bug.cgi?id=43010

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::applyPrefs):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2010-08-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Remove specialized retain/release functions in favor of a single one for WKTypeRefs
        https://bugs.webkit.org/show_bug.cgi?id=44386

        * MiniBrowser/mac/AppDelegate.m:
        (didRecieveMessageFromInjectedBundle):
        (didNavigateWithNavigationData):
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate applicationWillTerminate:]):
        * MiniBrowser/mac/BrowserStatisticsWindowController.m:
        (-[BrowserStatisticsWindowController initWithThreadedWKContextRef:processWKContextRef:]):
        (-[BrowserStatisticsWindowController dealloc]):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithPageNamespace:]):
        (-[BrowserWindowController fetch:]):
        (-[BrowserWindowController windowWillClose:]):
        (-[BrowserWindowController applicationTerminating]):
        (closePage):
        (runJavaScriptAlert):
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (-[BrowserWindowController updateProvisionalURLForFrame:]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didClearWindowObjectForFrame):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::goToURL):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::~PlatformWebView):

2010-08-20  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        WebKit does not build with Python 2.3
        https://bugs.webkit.org/show_bug.cgi?id=44373

        Replaced the function sorted() by a call to sort()
        on the entry list.
        The function sorted() has been added to Python 2.4.
        The function method sort() of List works with older
        versions of Python.

        * Scripts/create-html-entity-table:

2010-08-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector tests were disabled for GTK.
        https://bugs.webkit.org/show_bug.cgi?id=43977

        * Scripts/old-run-webkit-tests: Set the WEBKIT_INSPECTOR_PATH to the appropriate
        path before running tests.

2010-08-20  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

        svn-apply doesn't detect empty line with Windows line endings
        after property value
        https://bugs.webkit.org/show_bug.cgi?id=43981

        Part 2 of 2

        Add unit tests that were not landed in the first commit.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Added the following test cases:
            "SVN: binary file (isBinary true) using Windows line endings"
            "SVN: property diff, followed by file change diff using Windows line endings"
            "SVN: two consecutive property diffs using Windows line endings"
            "SVN: binary file with executable bit change usng Windows line endings"
            "SVN: binary file followed by property change on different file using Windows line endings"
            "SVN: binary file followed by file change on different file using Windows line endings"
            "SVN: file change diff with property change, followed by property change diff using Windows line endings"
            "SVN: file change diff with property change, followed by file change diff using Windows line endings"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
          - Added the following test cases:
            "add svn:executable, followed by empty line and start of next diff using Windows line endings"
            "add svn:executable, followed by empty line and start of next property diff using Windows line endings"
            "multi-line '+' change, followed by empty line and start of next diff using Windows line endings"
            "multi-line '+' change, followed by empty line and start of next property diff using Windows line endings"
            "add svn:executable, followed by empty line and start of binary patch using Windows line endings"
            "multi-line '+' change, followed by empty line and start of binary patch using Windows line endings"
            "multi-line '-' change, followed by multi-line '+' change, empty line, and start of binary patch using Windows line endings"
            "single-line '+' with trailing new line using Windows line endings"
            "single-line '+' with trailing new line, followed by empty line and start of binary patch using Windows line endings"
            "single-line '-' change with trailing new line, and single-line '+' change using Windows line endings"
            "multi-line '-' change with trailing new line, and multi-line '+' change using Windows line endings"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
          - Added the following test cases:
            "single-line '-' change followed by empty line with Windows line endings"
            "multi-line '+' change and start of binary patch with Windows line endings"

2010-08-20  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

        svn-apply doesn't detect empty line with Windows line endings
        after property value
        https://bugs.webkit.org/show_bug.cgi?id=43981

        Fixes an issue where an empty line following the property value
        in an SVN property change diff would not be detected if it had
        Windows line endings (i.e. ended in CRLF). Hence it was consumed
        as if it was part of a multi-line property value. 

        * Scripts/VCSUtils.pm:
          - Modified parseSvnPropertyValue() to detect empty line
            with Windows line endings.
          - Added toWindowsLineEndings().
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Added the following test cases:
            "SVN: binary file (isBinary true) using Windows line endings"
            "SVN: property diff, followed by file change diff using Windows line endings"
            "SVN: two consecutive property diffs using Windows line endings"
            "SVN: binary file with executable bit change usng Windows line endings"
            "SVN: binary file followed by property change on different file using Windows line endings"
            "SVN: binary file followed by file change on different file using Windows line endings"
            "SVN: file change diff with property change, followed by property change diff using Windows line endings"
            "SVN: file change diff with property change, followed by file change diff using Windows line endings"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
          - Added the following test cases:
            "add svn:executable, followed by empty line and start of next diff using Windows line endings"
            "add svn:executable, followed by empty line and start of next property diff using Windows line endings"
            "multi-line '+' change, followed by empty line and start of next diff using Windows line endings"
            "multi-line '+' change, followed by empty line and start of next property diff using Windows line endings"
            "add svn:executable, followed by empty line and start of binary patch using Windows line endings"
            "multi-line '+' change, followed by empty line and start of binary patch using Windows line endings"
            "multi-line '-' change, followed by multi-line '+' change, empty line, and start of binary patch using Windows line endings"
            "single-line '+' with trailing new line using Windows line endings"
            "single-line '+' with trailing new line, followed by empty line and start of binary patch using Windows line endings"
            "single-line '-' change with trailing new line, and single-line '+' change using Windows line endings"
            "multi-line '-' change with trailing new line, and multi-line '+' change using Windows line endings"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
          - Added the following test cases:
            "single-line '-' change followed by empty line with Windows line endings"
            "multi-line '+' change and start of binary patch with Windows line endings"

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Fix Mac build after Windows WebKit2 changes for Netscape Plug-ins

        * MiniBrowser/mac/BrowserWindowController.m:
        (decidePolicyForNavigationAction): Updated method signature.
        (decidePolicyForNewWindowAction): Updated method signature.

2010-08-19  Adam Roben  <aroben@apple.com>

        Test that NP_Initialize and NP_GetEntryPoints are called in the
        correct order

        The order differs between Mac and Windows (see r38858).

        Fixes <http://webkit.org/b/44270> <rdar://problem/8330393> Crash in
        NP_Initialize when loading QuickTime when running
        plugins/embed-attributes-setting.html in WebKit2 on Windows

        Reviewed by Sam Weinig.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Added a CRASH macro and
        a boolean to record whether NP_GetEntryPoints has been called.
        (NP_Initialize): Crash on Windows if NP_GetEntryPoints hasn't been
        called yet. This matches Flash and QuickTime's behavior. Crash on Mac
        if NP_GetEntryPoints has been called already. This matches
        Silverlight's behavior.

2010-08-19  Adam Roben  <aroben@apple.com>

        Make build-webkittestrunner build TestNetscapePlugIn on Windows

        Fixes <http://webkit.org/b/44268> <rdar://problem/8330388>

        Reviewed by Sam Weinig.

        * WebKitTestRunner/WebKitTestRunner.sln: Added TestNetscapePlugIn.
        Threaded it in between ImageDiff and InjectedBundleGenerated.

2010-08-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        install rietveld's upload script from a versioned url
        https://bugs.webkit.org/show_bug.cgi?id=44291

        autoinstall expects the file at a given URL to never change.
        In order to be able to update the file, we need to be able to
        change the path.

        * Scripts/webkitpy/thirdparty/__init__.py:

2010-08-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        add --webkit_patch_id to reitveld uploads
        https://bugs.webkit.org/show_bug.cgi?id=44289

        This is the first step in having rietveld store which
        patches have been uploaded and getting rid of the
        in-rietveld flag.

        * Scripts/webkitpy/common/net/rietveld.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postcodereview.py:

2010-08-19  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Adjust my status from committer to reviewer
        https://bugs.webkit.org/show_bug.cgi?id=44277

        * Scripts/webkitpy/common/config/committers.py:

2010-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: remove injected script fetcher from test harness.
        https://bugs.webkit.org/show_bug.cgi?id=44266

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: There is no need in resource-based InjectedScript.js source.
        Now that we populate front-end after its onload handler, we don't need
        to install injected script early. Exposing injected script source on the WebCore
        level here.
        https://bugs.webkit.org/show_bug.cgi?id=44029

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::runtimePropertyChanged):
        (DRTDevToolsAgent::delayedFrontendLoaded):
        (DRTDevToolsAgent::frontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-08-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Kenneth Rohde Christiansen.

        [Gtk] Enable view mode media feature layout test
        https://bugs.webkit.org/show_bug.cgi?id=43278

        Add view mode media feature testing infrastructure, and add
        placeholder methods for the other platforms'
        LayoutTestControllers.

        * DumpRenderTree/LayoutTestController.cpp:
        (setViewModeMediaFeatureCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setViewModeMediaFeature):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setViewModeMediaFeature):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setViewModeMediaFeature):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setViewModeMediaFeature):

2010-08-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Make it so the WebKit2 test slave runs the WebKit2 tests

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:

2010-08-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Make run-webkit-tests --webkit-test-runner build DumpRenderTree
        in addition to WebKitTestRunner to get the DumpRenderTreeSupport
        module and the TestNetscapePlugin.

        * Scripts/old-run-webkit-tests:

2010-08-18  Adam Roben  <aroben@apple.com>

        Fix hang when saving crash logs on Windows

        * Scripts/old-run-webkit-tests:
        (setUpWindowsCrashLogSaving):
        (END):
        Pass -s to regtool so it will write the Auto value as a string instead
        of as a number. This was causing a "do you want to debug?" dialog to
        appear.

2010-08-17  Victor Wang  <victorw@chromium.org>

        Unreviewed. Fixed chromium incremental test json upload.
        Quote builder name and test results server in url.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-08-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] [Symbian] Consistently use Q_OS_SYMBIAN to guard all Symbian platform dependencies
        https://bugs.webkit.org/show_bug.cgi?id=44124

        Q_WS_S60 is not defined for Symbian^4 devices as Q_WS_S60 used to guard 
        Avkon UI framework dependencies. Use Q_OS_SYMBIAN everywhere to mark
        Symbian dependencies.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        (LauncherWindow::toggleFullScreenMode):
        (LauncherWindow::showFPS):
        (LauncherWindow::updateFPS):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):

2010-08-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by David Levin.

        new-run-webkit-tests: remove --show-sources option

        --show-sources is pretty much obsolete with --trace everything, so
        I'm removing it.

        Also rename a couple of methods in the TestTextDiff class to make their
        intended visibility (private) more obvious.

        https://bugs.webkit.org/show_bug.cgi?id=44143

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-08-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by David Levin.

        remove --fuzzy-image-diff in new-run-webkit-tests (it doesn't work)

        This code bit-rotted at some point more than a year ago, and nobody seems
        to miss it. old-run-webkit-tests has a --tolerance flag that new-run-webkit-tests
        should support instead, making this flag unnecessary anyway.

        https://bugs.webkit.org/show_bug.cgi?id=44141

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.py: Removed.

2010-08-17  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Update json results generator to have incremental json including
        results for tests that pass in current run but failed before.

        https://bugs.webkit.org/show_bug.cgi?id=44119

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-08-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        fix test-webkitpy, add easy way to find a checkout root

        test-webkitpy currently doesn't work right if run from someplace other
        than the checkout root, and it spews a bunch of debug logging because
        the deduplicate_tests tests contaminates the test environment.

        This patch cleans up the deduplicate_tests unit tests, and creates
        two new methods in scm.py: find_checkout_root() and default_scm(),
        both of which use a single algorithm for guessing what checkout root
        to use if you aren't explicitly told one from a path.

        https://bugs.webkit.org/show_bug.cgi?id=44001

        * Scripts/deduplicate-tests:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/main.py:

2010-08-17  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Add support to the test results server for downloading json that
        contains test list only.

        This is for json results generator to generate incremental json
        results so that it includes results not only for tests failed in
        current run, but also tests failed before.

        Also set the results type to "N" (no data) instead of "P" (pass)
        if test results cannot be found in incremental json file.

        https://bugs.webkit.org/show_bug.cgi?id=44117

        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2010-08-17  Adam Roben  <aroben@apple.com>

        Use the right path style

        * Scripts/old-run-webkit-tests:

2010-08-17  Adam Roben  <aroben@apple.com>

        Fix typo

        * Scripts/old-run-webkit-tests:

2010-08-17  Adam Roben  <aroben@apple.com>

        Don't hang when running run-webkit-tests as a non-Administrator on
        Vista/7

        * Scripts/old-run-webkit-tests:
        (setUpWindowsCrashLogSaving): Use regtool to set NTSD as the
        post-mortem debugger, rather than using NTSD itself. The latter waits
        for user input when it fails to set the registry values; the former
        does not.

2010-08-17  Adam Roben  <aroben@apple.com>

        Teach run-webkit-tests, DumpRenderTree, and WebKitTestRunner how to
        save crash logs on Windows

        The crash logs are saved to /tmp/layout-test-results and have names
        like CrashLog_02bc_2010-08-17_14-36-20-108.txt.

        Unfortunately, crashes in the WebKit2 web process are recorded as
        time-outs by run-webkit-tests. Fixing this is covered by
        <http://webkit.org/b/44121>.

        Fixes <http://webkit.org/b/37859> <rdar://problem/7883560>
        DumpRenderTree should save a stack trace and/or dump file when it
        crashes

        Reviewed by Sam Weinig.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (exceptionFilter):
        (main):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::exceptionFilter):
        (WTR::TestController::platformInitialize):
        These changes set up an exception filter that prints #CRASHED to
        stderr, then lets the exception propagate normally. This allows
        run-webkit-tests to detect when we've crashed even when a post-mortem
        debugger attaches to the process.

        * Scripts/old-run-webkit-tests:
        (top level): Declared some variables used by the crash-log-saving
        code.
        (openDumpTool): Copy _NT_SYMBOL_PATH into the clean environment so
        that the post-mortem debugger has access to it.
        (toCygwinPath): Added. This is the opposite of toWindowsPath.
        (readFromDumpToolWithTimer): If the dump tool prints #CRASHED to
        stderr, consider it a crash.
        (setUpWindowsCrashLogSaving): Added. Saves the current post-mortem
        debugger, then sets ntsd as the post-mortem debugger. ntsd is
        configured to save a crash log and then quit automatically.
        (END): Added. Restores the previous post-mortem debugger when the
        script exits.

2010-08-17  Victor Wang  <victorw@chromium.org>

        Reviewed by ojan@chromium.org.

        Update test results server:
        1. Normalize test results and times after merging (prune tests where
           all runs pass or do not have data, truncate all test items to max
           number of builds)
        2. times should be int not string.
        3. when inserting a new test item, should keep old data regardless
           whether or not they have same item type with new one.

        https://bugs.webkit.org/show_bug.cgi?id=43861

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2010-08-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add WebKit2 Mac tester to buildbot.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:

2010-08-16  Paul Sawaya  <psawaya@apple.com>

        Reviewed by Chris Marrin.

        Added shader validation via ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=42405

        Added ANGLE to webkit build

        * Scripts/build-webkit:

2010-08-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, do not build WebCore as a convenience library as this leads to
        errors in the Win build w/export symbols and causes problems with DOM bindings
        debugging in gdb.

        * DumpRenderTree/wscript:
        * Scripts/build-webkit:
        * wx/browser/wscript:
        * wx/build/settings.py:
        * wx/build/waf_extensions.py:

2010-08-16  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage): Initialize the contentsSizeChanged member.
        (WTR::TestController::initialize): Ditto.

2010-08-16  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Handle content size change in WebKit2
        Re-landing after fix.

        https://bugs.webkit.org/show_bug.cgi?id=43198

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Initialize WKPageUICallback::contetsSizeChanged to 0.
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): Initialize WKPageUICallback::contetsSizeChanged to 0.

2010-08-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65419.
        http://trac.webkit.org/changeset/65419
        https://bugs.webkit.org/show_bug.cgi?id=44053

        Broke the Windows build (Requested by bbandix on #webkit).

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2010-08-16  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Handle content size change in WebKit2

        https://bugs.webkit.org/show_bug.cgi?id=43198

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Initialize WKPageUICallback::contetsSizeChanged to 0.
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): Initialize WKPageUICallback::contetsSizeChanged to 0.

2010-08-16  Ariya Hidayat  <ariya@sencha.com>

        Add my new email address to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2010-08-16  Zoltan Horvath  <zoltan@webkit.org>

        Add my old e-mail addresses to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2010-08-15  Jon Honeycutt  <jhoneycutt@apple.com>

        WebEditorClient::didBeginEditing is never called in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42939

        Reviewed by Sam Weinig.

        * WebKitTestRunner/PlatformWebView.h:
        Declare focus().

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Focus the PlatformWebView.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::focus):
        Stubbed.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::focus):
        Focus the view.

2010-08-15  Jon Honeycutt  <jhoneycutt@apple.com>

        run-webkit-tests should not strip editing callbacks when using
        WebKitTestRunner on Windows
        https://bugs.webkit.org/show_bug.cgi?id=44000

        Reviewed by Mark Rowe.

        * Scripts/old-run-webkit-tests:
        Leave $stripEditingCallbacks undefined until we look for command-line
        arguments. If using WebKit2, set it to 0 if not explicity set on the
        command line. Later, set it to isCygwin() to match old behavior if it is
        not yet defined.

2010-08-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, remove define always set to the correct value by wtf/Platform.h.

        * wx/build/settings.py:

2010-08-14  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [GTK] autogen.sh not executed if build-webkit options change
        https://bugs.webkit.org/show_bug.cgi?id=42266

        Rerun autogen.sh in situations where the arguments to build-webkit have
        changed since the previous build. This will fix some issues on the bots
        where the build does not notice changes to default build-webkit arguments.

        * Scripts/webkitdirs.pm: Add special logic for detecting changes to build-webkit arguments.

2010-08-14  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Another fix to support python 2.3.

        Add support for MathML entities
        https://bugs.webkit.org/show_bug.cgi?id=43949

        * Scripts/webkitpy/thirdparty/simplejson/decoder.py:
         - It looks like our simplejson is version 1.7.3 which
           should be python 2.3 compatible.  But someone modified
           our copy slightly from the original source.
           I've removed the relative import in hopes this fixes
           the problem.

2010-08-13  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Build fix only.

        Add support for MathML entities
        https://bugs.webkit.org/show_bug.cgi?id=43949

        * Scripts/create-html-entity-table:
         - Hack sys.path to avoid executing 2.5 dependent python
           on systems (like chromium-win and Tiger) which do not have 2.5 python.

2010-08-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename some concepts in HTML entity search to be more self-documenting
        https://bugs.webkit.org/show_bug.cgi?id=44004

        Reflect name change in generator script.

        * Scripts/create-html-entity-table:

2010-08-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add support for MathML entities
        https://bugs.webkit.org/show_bug.cgi?id=43949

        A script for generating the C++ state data structure describing all the
        entities from a JSON description.

        * Scripts/create-html-entity-table: Added.

2010-08-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Rewrite new-run-webkit-test's wait_for_threads_to_finish loop to
        check for exceptions on all threads, not just the first thread.
        
        This change also changes the logging behavior for wedged threads
        to only dump the stacks of threads that are actually wedged.

        Refactor the thread classes in the dump_render_tree_thread module
        to make the contract between TestRunner and TestShellThread clearer.

        Added a bunch of unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=38561

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-13  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Shinichiro Hamaji.

        Add test_expectations.txt syntax checker to check-webkit-style.
        https://bugs.webkit.org/show_bug.cgi?id=43899

        Just utilizing layout_tests/layout_package/test_expectations.py for checking
        the syntax of test_expectations.txt.
        This change also moves tab checking class from style/checkers/text.py to
        style/checkers/common.py for sharing code.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/common.py:
        * Scripts/webkitpy/style/checkers/common_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py: Added.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Added.
        * Scripts/webkitpy/style/checkers/text.py:
        * Scripts/webkitpy/style_references.py:

2010-08-12  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner does not correctly resize WebView for W3C SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=43945

        Reviewed by Sam Weinig.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::sizeWebViewForCurrentTest):
        Allow for a Windows-style path.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::resizeTo):
        Call SetWindowPos to resize the view window.

2010-08-12  David Levin  <levin@chromium.org>

        Build break fix.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Removed usage
        of a variable that doesn't exist in the class.

2010-08-12  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to run tests without using native controls
        https://bugs.webkit.org/show_bug.cgi?id=43772

        Reviewed by Sam Weinig.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Call platformInitializeContext().

        * WebKitTestRunner/TestController.h:
        Declare platformInitializeContext().

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitializeContext):
        Stubbed.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformInitializeContext):
        Call WKContextSetShouldPaintNativeControls() to disable native control
        drawing.

2010-08-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Alexey Proskuryakov.

        WebKitTestRunner should be more aggressive about ensuring consistent state between tests
        https://bugs.webkit.org/show_bug.cgi?id=43653

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::isTestRunning):
        (WTR::InjectedBundle::):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::stopLoading):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        (WTR::InjectedBundlePage::willAddMessageToConsole):
        (WTR::InjectedBundlePage::willSetStatusbarText):
        (WTR::InjectedBundlePage::willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        (WTR::InjectedBundlePage::didBeginEditing):
        (WTR::InjectedBundlePage::didEndEditing):
        (WTR::InjectedBundlePage::didChange):
        (WTR::InjectedBundlePage::didChangeSelection):
        Don't do any work if we are not currently running a test.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toCF):
        Add conversion function for WKURLRef -> CFURLRef

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::runTest):
        (WTR::TestController::didFinishLoadForFrame):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/TestInvocation.h:
        Move resetting code to TestController.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::runUntil):
        * WebKitTestRunner/mac/TestInvocationMac.mm: Removed.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::runUntil):
        * WebKitTestRunner/win/TestInvocationWin.cpp: Removed.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Move runUntil to TestController.

2010-08-12  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed.

        Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-08-12  Hayato Ito  <hayato@chromium.org>

        Reviewed by Tony Chang.

        Merge pretty printers for gdb.
        https://bugs.webkit.org/show_bug.cgi?id=43850

        We need to update webcore.py because basic string classes have moved to WTF from WebCore.
        It is good timing to merge webcore.py and wtf.py and name it 'webkit.py'.
        webcore.py is left for backward compatibility.

        * gdb/webcore.py:
        * gdb/webkit.py: Added.
        * gdb/wtf.py: Removed.

2010-08-11  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] add google-chrome layout test result directories
        https://bugs.webkit.org/show_bug.cgi?id=43889

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:

2010-08-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Disable accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=43894

        Disable accelerated compositing because DRT is not ready for
        it. This change fixes hundreds of test crashes on Windows and
        Linux.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):

2010-08-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Adding my Collabora personality to the list.

        * Scripts/webkitpy/common/config/committers.py:

2010-08-11  Martin Robinson  <mrobinson@igalia.com>

        Adding myself as a reviewer.

        * Scripts/webkitpy/common/config/committers.py:

2010-08-11  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Perl warnings when running commit-log-editor
        https://bugs.webkit.org/show_bug.cgi?id=43856

        Fixes Perl warnings introduced by the patch for Bug #40548.

        Perl doesn't have symbolic names for True/False. Instead, we
        should use boolean values. Moreover, the variable installedEditorApplication
        is not be used and should be renamed builtEditorApplication so that it
        uses the existing machinery to set the commit log editor application.

        * Scripts/commit-log-editor:

2010-08-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Trying waiting for httpd lock in the EWS
        https://bugs.webkit.org/show_bug.cgi?id=43833

        If this works, we can probably run the tests on the mac-ews, which
        would be very exciting.  :)

        * Scripts/webkitpy/tool/steps/runtests.py:

2010-08-11  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Eric Seidel.

        Check in a script to list redundant test outputs.
        https://bugs.webkit.org/show_bug.cgi?id=37630

        If e.g. platform/mac-leopard is missing an expected test output, we
        fall back on platform/mac.  This means it's possible to grow redundant
        test outputs, where we have the same expected data in both a platform
        directory and another platform it falls back on.
        (original patch by Evan Marting <evan@chromium.org> https://bugs.webkit.org/attachment.cgi?id=53398)

        * Scripts/deduplicate-tests: Added.
        * Scripts/webkitpy/layout_tests/deduplicate_tests.py: Added.
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py: Added.

2010-08-11  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: after switching between QWebView and QGraphicsWebView, rotation actions get broken
        https://bugs.webkit.org/show_bug.cgi?id=43853

        LauncherWindow::createChrome is connecting menu itens to WebViewGraphicsBased's slots directly.
        It behaviors badly when user launches the QtTestBrowser in QWebView mode, since then switching to
        QGraphicsWebView mode, createChrome is not called again, and menu items end up not getting connected
        to slots at all.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::animatedFlip):
        (LauncherWindow::animatedYFlip):
        * QtTestBrowser/launcherwindow.h:

2010-08-11  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] QtTestBrowser: switching between QWebView and QGraphicsWebView modes is broken
        https://bugs.webkit.org/show_bug.cgi?id=43851

        All window options data (including the bool holding if the view is either QWebView or
        QGraphicsWebView based) is stored in m_windowOptions, a class member of LauncherWindow.
        When toggle the view from QWebView to QGraphicsWebView based (and vice-versa), we were
        not updating LauncherWindow::WindowOptions::m_useGraphicsView bit, and then things were
        getting broken.

        Patch addresses this issue.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleWebView):
        (LauncherWindow::toggleAcceleratedCompositing):

2010-08-10  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: lazy instantiate "YRotation" state machine and related objects
        https://bugs.webkit.org/show_bug.cgi?id=43831

        Only instantiate QStateMachine and friends associated to the YRotation action on demand.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):
        (WebViewGraphicsBased::animatedYFlip):

2010-08-11  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        Improved editor options for prepare-ChangeLog and commit-log-editor
        https://bugs.webkit.org/show_bug.cgi?id=40548

        * Scripts/commit-log-editor: Split editor strings on spaces so EDITOR
        values like "xed --launch --wait" work properly.

        * Scripts/prepare-ChangeLog: Added a new CHANGE_LOG_EDITOR so we can
        use a command line tool with the $openChangeLogs feature.

2010-08-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove InjectDispatch.js
        https://bugs.webkit.org/show_bug.cgi?id=43835

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-08-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        webkit-patch should refuse to run under Win32 Python
        https://bugs.webkit.org/show_bug.cgi?id=40962

        Given that there are lots of places in webkit-patch's code that
        assume unix-style filenames (forward slashes), webkit-patch fails
        with weird file-not-found errors when run under a native windows
        Python. It would be nice if we just trapped this and errored out
        at the beginning, rather than producing unpredictable errors.

        * Scripts/webkit-patch:

2010-08-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.
        
        Chromium build fix for r65107.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):

2010-08-10  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] http/tests/media/video-cookie.html fails
        https://bugs.webkit.org/show_bug.cgi?id=42240

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAlwaysAcceptCookies): create the
        SoupCookieJar if it does not exist. Otherwise the accept policy
        won't be set.

2010-08-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Add suspendAnimations/resumeAnimation API to DRT
        https://bugs.webkit.org/show_bug.cgi?id=43733
        
        Adds suspendAnimations() and resumeAnimations() to LayoutTestController.
        Calls functions with the same names on AnimationController for the 
        mainFrame.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/LayoutTestController.cpp:
        (suspendAnimationsCallback):
        (resumeAnimationsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):

2010-08-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium/DRT] Enable saving layout test results.
        https://bugs.webkit.org/show_bug.cgi?id=43796

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added more
            parameters to the new-run-webkit-tests, including the name
            of the test results server.

2010-08-10  Jian Li  <jianli@chromium.org>

        More chromium build fix.

        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::spellCheckWord):
        (MockSpellCheck::initializeIfNeeded):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::grantPermission):
        (NotificationPresenter::show):
        (NotificationPresenter::checkPermission):

2010-08-10  Jian Li  <jianli@chromium.org>

        Chromium build fix.

        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        * DumpRenderTree/chromium/NotificationPresenter.cpp:

2010-08-10  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Update test results server merge logic so the aggregated
        results and times are updated for tests that are
        in aggragated json but not in incremental json.

        Also update unittest to test this case.

        https://bugs.webkit.org/show_bug.cgi?id=43769

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2010-08-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: proper set scene rect

        When resizesToContents is ON scene's rect is set to the boundary of
        the mainFrame. However, navigating to other web page should keep resizing
        scene's rect according to the new document loaded. Patch addresses this issue.

        Now resizesToContents and scrolling properly work on QtTestBrowser.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::setPage):
        (WebViewGraphicsBased::contentsSizeChanged):
        (WebViewGraphicsBased::setResizesToContents):
        (WebViewGraphicsBased::resizeEvent):
        * QtTestBrowser/webview.h:

2010-08-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: Clean up LauncherWindow code.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow): Moves applyPrefs methods call from the constructor to init().
        (LauncherWindow::init): Fixed comments.
        (LauncherWindow::applyPrefs): Move the method around.
        (LauncherWindow::createChrome): Move more code of this method around, for grouping, and fixing up comments.

2010-08-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: make reset-zooming to animate when tiled backing store is on.

        It gets control+0 the same visual effect as control++ or control-.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::toggleZoomTextOnly):

2010-08-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser:: make m_zoomLevels a static member.

        Not all instances of LauncherWindow need its own m_zoomLevel.

        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:

2010-08-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add zoom support for injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=43759

        Use zoom factor SPI to implement zoom related eventSender functions.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::textZoomIn):
        (WTR::EventSendingController::textZoomOut):
        (WTR::EventSendingController::zoomPageIn):
        (WTR::EventSendingController::zoomPageOut):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset): Reset zoom mode and level for each test.

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Speculative chromium build fix III.

        * DumpRenderTree/chromium/MockSpellCheck.h:
        * DumpRenderTree/chromium/NotificationPresenter.h:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::addClearHeader):
        (WebViewHost::clearHeaders):

2010-08-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        increase the number of test results that we save
        https://bugs.webkit.org/show_bug.cgi?id=43763

        Now that we do incremental uploads, we can increase the number of
        results that we save for http://test-results.appspot.com/dashboards/flakiness_dashboard.html.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-08-09  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] DRT error print statement incorrectly tries to print a FILE*
        https://bugs.webkit.org/show_bug.cgi?id=43747

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (writeFile): pass the correct pointer.

2010-08-09  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Upload incremental test results json to server by default.

        https://bugs.webkit.org/show_bug.cgi?id=43743

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-08-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS bots wait 2 minutes between patches
        https://bugs.webkit.org/show_bug.cgi?id=43731

        * Scripts/webkitpy/tool/bot/queueengine.py:
         - Don't sleep after failures.  This was a hold-over from
           an earlier design.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
         - EWS bots were not properly reporting true/false from process_work_item.
           They were always returning None, thus false, thus always logging
           as a failure and sleeping 2 minutes after each patch.

2010-08-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Stub out EventSender for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=43703

        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Add ability to pass javascript arguments to the wrapped object.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl: Added.
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp: Added.
        (WTR::EventSendingController::create):
        (WTR::EventSendingController::EventSendingController):
        (WTR::EventSendingController::~EventSendingController):
        (WTR::EventSendingController::wrapperClass):
        (WTR::setExceptionForString):
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::keyDown):
        (WTR::EventSendingController::contextClick):
        (WTR::EventSendingController::leapForward):
        (WTR::EventSendingController::textZoomIn):
        (WTR::EventSendingController::textZoomOut):
        (WTR::EventSendingController::zoomPageIn):
        (WTR::EventSendingController::zoomPageOut):
        (WTR::EventSendingController::makeWindowObject):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::eventSendingController):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        Add stubbed out EventSenderController.

        * WebKitTestRunner/InjectedBundle/GCController.h:
        Remove incorrect comment.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        Add new files.

2010-08-08  Kent Tamura  <tkent@chromium.org>

        Unreviewed, trivial fix.

        Fix "WindowsError: [Error 32] The process cannot access the file
        because it is being used by another process" introduced by r64959.

        * BuildSlaveSupport/test-result-archive:

2010-08-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Tony Chang.

        Chromium buildbot: Avoid "zip" command dependency
        https://bugs.webkit.org/show_bug.cgi?id=43470

        * BuildSlaveSupport/test-result-archive:
         For Chromium port, creates a zip archive with zipfile package of Python
         instead of external "zip" command. We'd like to avoid additional
         command installation.

2010-08-08  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner should add the QuickTime dir to the PATH environment
        variable
        https://bugs.webkit.org/show_bug.cgi?id=43686

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::addQTDirToPATH):
        Copied from DRT.
        (WTR::TestController::platformInitialize):
        Call addQTDirToPath().
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Link to shlwapi.lib for SHGetValue.

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        WebKitTestRunner needs layoutTestController.dumpTitleChanges
        <rdar://problem/8213861>
        https://bugs.webkit.org/show_bug.cgi?id=42683

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpTitleChanges):
        (WTR::LayoutTestController::shouldDumpTitleChanges):

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs to print onunload handler information
        <rdar://problem/8213831>
        https://bugs.webkit.org/show_bug.cgi?id=42703

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::operator<<):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add additional loader client functions need to complete WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=43684

        Remove unnecessary and jarring underscores as well.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didClearWindowObjectForFrame):
        (didCreatePage):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didCommitLoadForFrame):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        (WTR::InjectedBundlePage::didCancelClientRedirectForFrame):
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame):
        (WTR::InjectedBundlePage::didChangeLocationWithinPageForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        (WTR::InjectedBundlePage::didHandleOnloadEventsForFrame):
        (WTR::InjectedBundlePage::didDisplayInsecureContentForFrame):
        (WTR::InjectedBundlePage::didRunInsecureContentForFrame):
        (WTR::InjectedBundlePage::willAddMessageToConsole):
        (WTR::InjectedBundlePage::willSetStatusbarText):
        (WTR::InjectedBundlePage::willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        (WTR::InjectedBundlePage::didBeginEditing):
        (WTR::InjectedBundlePage::didEndEditing):
        (WTR::InjectedBundlePage::didChange):
        (WTR::InjectedBundlePage::didChangeSelection):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-08-07  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Made the references
        to JSGCController.{cpp,h} relative to the build root.

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs GCController
        <rdar://problem/8213834>
        https://bugs.webkit.org/show_bug.cgi?id=42701

        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/InjectedBundle/Bindings/GCController.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h:
        (WTR::setProperty):
        * WebKitTestRunner/InjectedBundle/GCController.cpp: Added.
        (WTR::GCController::create):
        (WTR::GCController::GCController):
        (WTR::GCController::~GCController):
        (WTR::GCController::wrapperClass):
        (WTR::GCController::collect):
        (WTR::GCController::collectOnAlternateThread):
        (WTR::GCController::getJSObjectCount):
        (WTR::GCController::makeWindowObject):
        * WebKitTestRunner/InjectedBundle/GCController.h: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::bundle):
        (WTR::InjectedBundle::gcController):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::keepWebHistory):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:

2010-08-05  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to be able to set the font smoothing type
        https://bugs.webkit.org/show_bug.cgi?id=43406

        Reviewed by Adam Roben.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        Set the font smoothing level to
        kWKFontSmoothingLevelNoSubpixelAntiAliasing to match DRT.

2010-08-06  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix a missed variable rename.

        Unreviewed.

        * Scripts/old-run-webkit-tests:

2010-08-06  Jon Honeycutt  <jhoneycutt@apple.com>

        mac-wk2/Skipped should be used on Windows when running regression tests
        https://bugs.webkit.org/show_bug.cgi?id=43494

        Reviewed by Adam Roben.

        * Scripts/old-run-webkit-tests:
        If the platform is win-wk2, also read the mac-wk2 skipped list.

2010-08-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Should revoke scheduled tasks
        https://bugs.webkit.org/show_bug.cgi?id=43560

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::reset): Calls RevokeAll().
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::reset): Calls RevokeAll().
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::reset): Calls RevokeAll().
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset): Calls RevokeAll().
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController): Calls DRTDevToolsAgent::reset() and DRTDevToolsClient::reset().

2010-08-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Fix the DRT build on Mac OS X

        * DumpRenderTree/qt/DumpRenderTree.pro:

2010-08-06  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Pavel Feldman.

        Rietvield's upload.py moved to a different location.
        https://bugs.webkit.org/show_bug.cgi?id=43613

        * Scripts/webkitpy/thirdparty/__init__.py:

2010-05-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        QueueStatusServer needs better queue-status pages
        https://bugs.webkit.org/show_bug.cgi?id=39562

        The primary goal of this patch is to display queue
        positions somewhere on the site so that it's easier
        for commit-queue users to know when their pach will
        be landed.  I also tried to improve the root page
        to be more useful than the previous wall of status text.

        * QueueStatusServer/handlers/recentstatus.py:
        * QueueStatusServer/main.py:
        * QueueStatusServer/model/queues.py:
        * QueueStatusServer/templates/recentstatus.html:

2010-08-05  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Add option to generate/upload incremental json results to test result server.
        Also refactor the json results generator unittest code to test
        incremental and aggregated json results.

        https://bugs.webkit.org/show_bug.cgi?id=43519

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-08-05  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Unify blob related feature defines to ENABLE(BLOB).
        https://bugs.webkit.org/show_bug.cgi?id=43081

        * Scripts/build-webkit:

2010-08-05  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Add speech input controller mock in WebKit and a layout test.
        https://bugs.webkit.org/show_bug.cgi?id=43477

        Added LayoutTestController::setMockSpeechInputResultCallback method.

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback): Wrapper invoking the member function.
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setMockSpeechInputResult): Sets the mock result.
        (LayoutTestController::speechInputController): Creates the mock controller.
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController): Creates the mock controller.
        * DumpRenderTree/chromium/WebViewHost.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult): dummy method.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult): dummy method.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult): dummy method.
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: dummy method.
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: dummy method.
        (LayoutTestController::setMockSpeechInputResult):

2010-08-04  Adam Roben  <aroben@apple.com>

        Fix the path to TestNetscapePlugin's directory on Windows

        Fixes <http://webkit.org/b/43513> WebKitTestRunner on Windows fails to
        load TestNetscapePlugin

        Reviewed by Jon Honeycutt.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeTestPluginDirectory):
        TestNetscapePlugin is in a TestNetscapePlugin[_Debug] directory that's
        next to WebKitTestRunner.exe. Previously we were passing the directory
        that contains WebKitTestRunner.exe. Also fixed some leaks.

2010-08-05  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style returns non-zero when patch is entirely minus lines.
        https://bugs.webkit.org/show_bug.cgi?id=38169

        * Scripts/check-webkit-style:
        Check whether a patch contains modified files that are entirely minus lines.
        * Scripts/webkitpy/style/filereader.py:
        Add a variable that holds number of files that contain only deleted lines.
        * Scripts/webkitpy/style/patchreader.py:
        Count up modified files that contain only deleted lines.

2010-08-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        DevTools: get rid of delayed command dispatching on front-end side.

        https://bugs.webkit.org/show_bug.cgi?id=43479

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::detach):
        (DRTDevToolsAgent::frontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::~DRTDevToolsClient):
        (DRTDevToolsClient::sendFrontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:

2010-08-04  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Shinichiro Hamaji.

        Fixes check-webkit-style false positive on "new uint32_t."
        https://bugs.webkit.org/show_bug.cgi?id=43077

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-08-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove base/linked_ptr.h dependency
        https://bugs.webkit.org/show_bug.cgi?id=43472

        Replace linked_ptr<TestNavigationEntry> with RefPtr<TestNavigationEntry>.
        We need to use RefPtr<> because m_pendingEntry points an object in
        m_entries or not in m_entries.

        * DumpRenderTree/chromium/TestNavigationController.cpp:
        (TestNavigationEntry::create): Added.
        (TestNavigationController::activeEntry):
        (TestNavigationController::didNavigateToEntry):
        (TestNavigationController::discardPendingEntry):
        (TestNavigationController::insertEntry):
        (TestNavigationController::navigateToPendingEntry):
        * DumpRenderTree/chromium/TestNavigationController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::loadURLForFrame):
         Use TestNavigationEntry::create().
        (WebViewHost::updateURL):
         Use RefPtr<>.
        (WebViewHost::updateSessionHistory):
         Remove unnecessary static_cast<>.

2010-08-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a problem that "archived test results" step doesn't work on Chromium buildbots
        https://bugs.webkit.org/show_bug.cgi?id=43333

        * BuildSlaveSupport/test-result-archive:
          - Make layoutTestResultsDir local and pass it to archiveTestResults()
          - Adjust layoutTestResultsDir for Chromium

2010-08-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        NRWT: websocket_server startup detection failure
        https://bugs.webkit.org/show_bug.cgi?id=43466

        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
         Increase timeout value: 5 second -> 10 second

2010-08-04  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        -. Add result.json incremental merging functionality to test results app engine.
        -. blobstore is not suitable for AE data merging and there is no API to
           programatically edit existing blob or write a new one yet, so replace blobstore
           with datastore. If file is oversize (>1000*1000 bytes), store file data in
           multiple datastore entries.
        -. Fix styles.

        Test: jsonresults_unittest to test merging logics.

        https://bugs.webkit.org/show_bug.cgi?id=38599

        * TestResultServer/handlers/dashboardhandler.py:
        * TestResultServer/handlers/menu.py:
        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/main.py:
        * TestResultServer/model/dashboardfile.py:
        * TestResultServer/model/datastorefile.py: Added.
        * TestResultServer/model/jsonresults.py: Added.
        * TestResultServer/model/jsonresults_unittest.py: Added.
        * TestResultServer/model/testfile.py:
        * TestResultServer/templates/uploadform.html:

2010-08-04  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] [QtTestBrowser] Remove unneeded QAction class members
        https://bugs.webkit.org/show_bug.cgi?id=43518

        LauncherWindow class has two totally unneeded class members: m_flopAnimated and
        m_flipYAnimated. Also, in initializeView method there are some dead code block
        trying to connect them at the wrong time, when they have not been instanciated.

        This patch:

        - removes the two cited class members in favor of local variables in createChrome method;
        - removes the dead code block.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        * QtTestBrowser/launcherwindow.h:

2010-08-04  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann and Kenneth Christiansen.

        [Qt] [QtTestBrowser] Clean up static and global menu state controls
        https://bugs.webkit.org/show_bug.cgi?id=43448

        After LauncherWindow class was refactored out of from main.cpp, all global variables that
        were hanging in main.cpp became temporarily public static class members of newly added
        LauncherWindow class. This design was not properly handling the initial purpose of the
        global variables: newly created launcher windows should inherit the settings of the originating
        one.

        In order to properly fix the problem, this patch introduces a WindowOptions class, as a POD. It
        comprises all data needed to handling the goal described above.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow): The class now receives an optional WindowOptions pointer object
                                          holding all user settings configured in the menus and command line.
                                          It also receices an optional QGraphicsScene points in case we are doing
                                          a "Clone Window".
        (LauncherWindow::init): Removed the usesGraphics parameter because the class member m_userData holds its
                                value.
        (LauncherWindow::initializeView): Ditto.
        (LauncherWindow::createChrome): Changed all references to gXXX to m_userData.XXX
        (LauncherWindow::applyPrefs): Removed the "LauncherWindow* source" parameter. All data needed to properly
                                      apply the preferences is provided by m_userData.
        (LauncherWindow::toggleAcceleratedCompositing): Change gXXX by m_userData.XXX
        (LauncherWindow::toggleResizesToContents): Ditto.
        (LauncherWindow::toggleWebGL): Ditto.
        (LauncherWindow::toggleFrameFlattening): Ditto.
        (LauncherWindow::toggleQGLWidgetViewport): Ditto.
        (LauncherWindow::changeViewportUpdateMode): Ditto.
        (LauncherWindow::showFPS): Ditto.
        (LauncherWindow::newWindow): Changed to pass the userData.
        (LauncherWindow::cloneWindow): Ditto.
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (requiresGraphicsView):
        (LauncherApplication::handleUserOptions):
        (main):

2010-08-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for gcc not importing all symbols from convenience libraries.
        Works on 10.6 only for Mac until the build system is reworked. 

        * wx/build/settings.py:

2010-08-04  Markus Goetz  <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Change wording in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=43241

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):

2010-08-04  Aaron Boodman  <aa@chromium.org>

        Reviewed by Eric Seidel.

        prepare-ChangeLog fails mysteriously if curl doesn't support ssl
        https://bugs.webkit.org/show_bug.cgi?id=43460

        * Scripts/prepare-ChangeLog:

2010-08-03  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [DRT] Assertion failed when drag and move a draggable element.
        https://bugs.webkit.org/show_bug.cgi?id=41695

        mouseMoveToX() did call [WebHTMLView mouseDragged] even if dragging started.
        But Cocoa doesn't call mouseDragged() until dragging is done.
        Other part of DumpRenderTree also assumes Cocoa behavior and an assertion
        on UIDelegate failed when mouseDragged() is called during dragging.
        This change eliminated the mouseDragged() call when dragging begins,
        which is implicated by draggingInfo instance.
        
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseMoveToX:Y:]):

        Test: fast/events/dragging-mouse-moves.html
        
2010-08-02  Steve Block  <steveblock@google.com>

        Reviewed by Alexey Proskuryakov.

        Adds Geolocation LayoutTests for the case where permission is not granted or denied immediately
        https://bugs.webkit.org/show_bug.cgi?id=40002

        The code in LayoutTestController::setGeolocationPermission() was moved to
        setGeolocationPermissionCommon() to allow each port to provide its own
        implementation of setGeolocationPermission().

        For the Mac port, setGeolocationPermission() notifies the UIDelegate of the
        new permission, so it can call back to WebCore if permission requests are in
        progress and are waiting for a response. A minor fix to the Mac
        MockGeolocationProvider was also required to make sure that the mock provider
        calls back to WebCore when it is first started.

        For other ports, LayoutTestController::setGeolocationPermission() is not
        implemented.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::setGeolocationPermissionCommon):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setGeolocationPermission):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setGeolocationPermission):
        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        (-[MockGeolocationProvider registerWebView:]):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:]):
        (-[UIDelegate setGeolocationPermission:]):
        (-[UIDelegate dealloc]):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setGeolocationPermission):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setGeolocationPermission):

2010-08-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Implement --testshell-startup-dialog
        https://bugs.webkit.org/show_bug.cgi?id=40616

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main): Check --testshell-startup-dialog, and call openStartUpDialog()
        if it is specfied.
        * DumpRenderTree/chromium/TestShell.h:
          Declare openStartUpDialog().
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (openStartupDialog):
        * DumpRenderTree/chromium/TestShellMac.mm:
        (openStartupDialog):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (openStartupDialog):

2010-08-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove dependency of base/md5.h
        https://bugs.webkit.org/show_bug.cgi?id=43403

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage): Use wtf/MD5.h

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 6 - LayoutTest and Cleanup

          Allow tests to delete application caches and set application cache
          origin quotas, so they can be tested.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpApplicationCacheDelegateCallbacksCallback): JavaScript callback, delegates to the controller.
        (clearAllApplicationCachesCallback): should delete all application caches.
        (setApplicationCacheOriginQuotaCallback): should set the origin quota for the localhost tests.
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpApplicationCacheDelegateCallbacks): accessor to see if application cache callbacks should be output.
        (LayoutTestController::setDumpApplicationCacheDelegateCallbacks): enable or disable debug output when the application cache quota is reached.

          Mac implementation.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::clearAllApplicationCaches): delete application caches.
        (LayoutTestController::setApplicationCacheOriginQuota): set the quota for localhost.
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): style fix.
        (-[UIDelegate webView:exceededApplicationCacheOriginQuotaForSecurityOrigin:]): reset the quota.

          Stub implementations for other platforms.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 5 - Refactor Quota Management in WebSecurityOrigin into Managers

          Change old style calls to make use of the managers.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setDatabaseQuota):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]):

2010-08-03  Mark Rowe  <mrowe@apple.com>

        Add a new Leopard build slave to run the release tests.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2010-08-03  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to activate the Mac font ascent hack
        https://bugs.webkit.org/show_bug.cgi?id=43404

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        Call WKBundleActivateMacFontAscentHack().

2010-08-03  Alex Milowski  <alex@milowski.com>

        Reviewed by Beth Dakin.

        Changed the default for MathML support so that is is enabled by default.

        * Scripts/build-webkit:

2010-08-03  Sam Weinig  <sam@webkit.org>

        Roll r64566 back in this time with all the overloads in place..

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::shouldInsertNode):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/StringFunctions.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-08-03  Sam Weinig  <sam@webkit.org>

        Rollout r64566. It broke all the WebKit2 tests.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::operator<<):
        (WTR::InjectedBundlePage::shouldInsertNode):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/StringFunctions.h: Removed.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::createWKURL):
        (WTR::WKStringToUTF8):
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-08-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WTR: Move all the utility functions for working with strings to a shared header.
        https://bugs.webkit.org/show_bug.cgi?id=43386

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::shouldInsertNode):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/StringFunctions.h: Added.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-08-02  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] QtTestBrowser not setting preferredContentsSize for resizesToContents
        https://bugs.webkit.org/show_bug.cgi?id=43168

        QGraphicsWebView resizesToContents property has to work together with QWebPage's
        setPreferredContentsSize as stated by the docs. Patch addresses that for QtTestBrowser.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::applyPrefs):
        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::setResizesToContents): Properly handle scene, webview and viewport sizes
                                                      needed when toggle resizesToContents on/off.
        (WebViewGraphicsBased::resizeEvent):
        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::setCustomLayoutSize): Setter helper.
        (WebViewGraphicsBased::customLayoutSize): Getter helper.

2010-08-03  Jochen Eisinger  <jochen@chromium.org>

        Unreviewed. Adding myself as committer.

        * Scripts/webkitpy/common/config/committers.py:

2010-08-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: Get rid of DevTools RPC.

        https://bugs.webkit.org/show_bug.cgi?id=43335

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::sendMessageToInspectorFrontend):
        (DRTDevToolsAgent::call):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.h:
        (DRTDevToolsCallArgs::DRTDevToolsCallArgs):
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::sendMessageToBackend):
        (DRTDevToolsClient::call):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:

2010-08-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove dependencies to some Chromium headers
        https://bugs.webkit.org/show_bug.cgi?id=43396

        * DumpRenderTree/chromium/CppVariant.h:
         Remove base/basictypes.h because webkit_support.h contains it.
        * DumpRenderTree/chromium/EventSender.cpp:
        (getCurrentEventTimeSec): Use new wrapper function.
        * DumpRenderTree/chromium/TestNavigationController.h:
         Remove base/basictypes.h because webkit_support.h contains it.
        * DumpRenderTree/chromium/TestShell.cpp:
        (dumpHistoryItem): Use new wrapper function.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::cancelledError): Use new wrapper function.
        (WebViewHost::didFailResourceLoad): Use new wrapper function.

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DRT implement execCommand()
        https://bugs.webkit.org/show_bug.cgi?id=35351

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::execCommand): Implement using webkit_web_view_execute_core_command_by_name.
        (LayoutTestController::isCommandEnabled): Implement using webkit_web_view_is_command_enabled.
        (LayoutTestController::setCacheModel): Move below LayoutTestController::isCommandEnabled.

2010-08-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add alias for run-webkit-tests --webkit-test-runner (run-webkit-tests -2).

        * Scripts/old-run-webkit-tests:

2010-08-02  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to support loading custom fonts (via the
        WEBKIT_TESTFONTS environment variable)
        https://bugs.webkit.org/show_bug.cgi?id=42782

        Reviewed by Adam Roben.

        * WebKitTestRunner/InjectedBundle/win/ActivateFonts.cpp:
        (WTR::fontsPath):
        Copied from DRT code. Removed the fallback to DumpRenderTree.resources/,
        as this directory doesn't appear to be created anymore.
        (WTR::activateFonts):
        Loop through the fonts, and call AddFontResourceExW() for each.

2010-08-02  Jon Honeycutt  <jhoneycutt@apple.com>

        Restore the WebKitTestRunner.sln that was removed, and remove the
        correct one.

        Rubber-stamped by Sam Weinig.

        * WebKitTestRunner/WebKitTestRunner.sln: Added.
        * WebKitTestRunner/win/WebKitTestRunner.sln: Removed.

2010-08-02  Jon Honeycutt  <jhoneycutt@apple.com>

        Move InjectedBundle.vcproj to where the other WebKitTestRunner vcprojs live.

        Remove the unused WebKitTestRunner.sln.

        Reviewed by Sam Weinig.

        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj: Removed.
        * WebKitTestRunner/WebKitTestRunner.sln: Removed.
        * WebKitTestRunner/win/InjectedBundle.vcproj: Added.
        * WebKitTestRunner/win/WebKitTestRunner.sln:

2010-08-02  Sam Weinig  <sam@webkit.org>

        Fix the windows build.

        * WebKitTestRunner/win/main.cpp:

2010-07-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Add a Skipped list on Windows, and have run-webkit-tests respect it.

        Part of <rdar://problem/8233237> Fill WebKit2 Windows skipped list so
        there are zero tests failing
        https://bugs.webkit.org/show_bug.cgi?id=43374

        Reviewed by Adam Roben.

        * Scripts/old-run-webkit-tests:
        If using WebKitTestRunner and Apple Windows WebKit, set the platform to
        win-wk2. When building the result hierarchy, if the platform is win-wk2,
        add it first to the list of platforms.

2010-08-02  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs layoutTestController.setCanOpenWindows
        https://bugs.webkit.org/show_bug.cgi?id=42321

        WebKitTestRunner needs layoutTestController.setCloseRemainingWindowsWhenComplete
        https://bugs.webkit.org/show_bug.cgi?id=42779

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added
        setCanOpenWindows, setCloseRemainingWindowsWhenComplete, and windowCount

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle): Initialize m_mainPage to 0 instead of
        waiting for the first call to didCreatePage.
        (WTR::InjectedBundle::didCreatePage): Set m_mainPage only when the first page
        is created. Put other pages into a map.
        (WTR::InjectedBundle::willDestroyPage): Added code to handle the destruction
        of the main page.
        (WTR::InjectedBundle::closeOtherPages): Added. Closes all the pages other than
        the main page.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Added pageCount and
        closeOtherPages functions.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Don't let pages other than
        the main page affect dumping.
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame): Ditto.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize the new
        m_shouldCloseExtraWindows member.
        (WTR::LayoutTestController::setCanOpenWindows): Added. Empty for now.
        (WTR::LayoutTestController::windowCount): Added.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Added setCanOpenWindows, setCloseRemainingWindowsWhenComplete,
        windowCount, shouldCloseExtraWindowsAfterRunningTest, and
        m_shouldCloseExtraWindows.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::shared): Return a pointer to the shared copy, but
        don't allocate and leak it. This seemed cleaner than adding an explicit
        finalize call to go along with the explicit initialize call.
        (WTR::TestController::TestController): Added calls to the initialize and
        run function, which are now done automatically.
        (WTR::TestController::~TestController): Added, since it's called now.
        (WTR::closeOtherPage): Added. Used to close pages other than the main page.
        (WTR::createOtherPage): Added. Used to create pages other than the main page.
        (WTR::TestController::initialize): Added code to set up createOtherPage.
        (WTR::TestController::run): Removed unused return value.
        * WebKitTestRunner/TestController.h: Made constructor and destructor public,
        and initialize and run private. Changed m_mainWebView to be an OwnPtr.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Added a call to setReleasedWhenClosed
        to avoid releasing the window twice. Another way to handle it would be to
        remove the release, but this approach is slightly more robust because it works
        even if some other code calls the close method an extra time.

        * WebKitTestRunner/mac/main.mm:
        (main): Use a stack-allocated TestController object instead of calling
        initalize and run on a globally allocated one.

2010-08-02  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        add myself to the reviewers list
        https://bugs.webkit.org/show_bug.cgi?id=43366

        * Scripts/webkitpy/common/config/committers.py:

2010-08-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cache JSNPObjects and fix bugs in the object map
        https://bugs.webkit.org/show_bug.cgi?id=43368

        Test that we correctly throw exceptions when trying to do things to a JSObject that used to
        wrap an NPObject that came from a plug-in that is now destroyed.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest::Object::getProperty):
        (PluginTest::Object::NP_GetProperty):
        (PluginTest::Object::npClass):
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeObjectFromDestroyedPlugin.cpp: Added.
        (NPRuntimeObjectFromDestroyedPlugin::NPRuntimeObjectFromDestroyedPlugin):
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::hasProperty):
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::getProperty):
        (NPRuntimeObjectFromDestroyedPlugin::NPP_GetValue):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] DOM listeners get wrong keycodes for some keys
        https://bugs.webkit.org/show_bug.cgi?id=35170

        Add support to all event senders for simulating keypad insert
        and print screen keys.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown): Add support for generating keypad insert and print screen.
        * DumpRenderTree/gtk/EventSender.cpp:
        (keyDownCallback): Ditto.
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]): Ditto.
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::keyDown): Ditto.
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Ditto.

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Build fix for building against development versions of GTK+. GTK 2.22
        has not yet been released, so these function definitions must be conditionalized
        on the development version.

        * DumpRenderTree/gtk/EventSender.cpp: Fix GTK+ 2.21 build.

2010-08-02  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] use ChromiumDriver on Linux when running webkit tests
        https://bugs.webkit.org/show_bug.cgi?id=43273

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-08-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Always initialize GTK
        https://bugs.webkit.org/show_bug.cgi?id=43327

        Call gtk_init() in order to fix plugin test crash.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main): Pass argc/argv to platformInit().
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (platformInit): Update parameters, call gtk_init().
        * DumpRenderTree/chromium/TestShellMac.mm:
        (platformInit): Update parameters.
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit): Update parameters.

2010-08-02  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Generate forwarding headers for WebKit2

        https://bugs.webkit.org/show_bug.cgi?id=43336

        * Scripts/webkitdirs.pm: Call make on WebKit2/Makefile.DerivedSources.

2010-08-02  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket server should start with SO_REUSEADDR
        https://bugs.webkit.org/show_bug.cgi?id=43329

        Pulls in pywebsocket-0.5.2.
        pywebsocket-0.5.2 includes a small fix to start server with SO_REUSE_ADDR.
        http://code.google.com/p/pywebsocket/source/detail?r=273

        * Scripts/webkitpy/thirdparty/__init__.py: Bump pywebsocket version

2010-08-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove string_util.h dependency
        https://bugs.webkit.org/show_bug.cgi?id=43312

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::pathToLocalResource):
         Use string::find() instead of StartsWithASCII().
        (LayoutTestController::cppVariantToInt32):
         Use strtol() instead of StringToNumber().

2010-08-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to reset frame names for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=43316

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-08-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_RemoveProperty
        https://bugs.webkit.org/show_bug.cgi?id=43315

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add NPRuntimeRemoveProperty.cpp
        
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_GetStringIdentifier):
        (PluginTest::NPN_GetIntIdentifier):
        (PluginTest::NPN_RemoveProperty):
        Add NPN_ helpers.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Support more NPClass functions.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp: Added.
        (NPRuntimeRemoveProperty::NPRuntimeRemoveProperty):
        Test for NPN_RemoveProperty.

        (NPRuntimeRemoveProperty::TestObject::hasMethod):        
        (NPRuntimeRemoveProperty::TestObject::invoke):
        Add a testRemoveProperty method.

        (NPRuntimeRemoveProperty::NPP_GetValue):
        Return the test object.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Add NPRuntimeRemoveProperty.cpp

2010-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add an NPObject class template helper to TestNetscapePlugin
        https://bugs.webkit.org/show_bug.cgi?id=43288

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Add some template magic to be able to figure out if a class has a member function of a given type.

        (PluginTest::Object::create):
        Create an object.

        (PluginTest::Object::invokeDefault):
        Add dummy function, this should never be called.

        (PluginTest::Object::Object):
        Initialize m_pluginTest to 0.

        (PluginTest::Object::~Object):
        Add virtual destructor.

        (PluginTest::Object::NP_Allocate):
        Create a new object.

        (PluginTest::Object::NP_Deallocate):
        Delete the object.

        (PluginTest::Object::NP_InvokeDefault):
        Call invokeDefault.

        (PluginTest::Object::npClass):
        Initialize the NPClass struct.

        * DumpRenderTree/TestNetscapePlugIn/Tests/DocumentOpenInDestroyStream.cpp:
        (DocumentOpenInDestroyStream::NPP_DestroyStream):
        Move this inline.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PluginScriptableNPObjectInvokeDefault.cpp:
        (PluginScriptableNPObjectInvokeDefault::NPObjectWithInvokeDefault::invokeDefault):
        (PluginScriptableNPObjectInvokeDefault::NPP_GetValue):
        Use the PluginTest::Object class template.

2010-07-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43305
        Add back WKBundleFrameCopyInnerText to fix ~50 test failures
        due to SVGElements not having the innerText function.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpFrameText):

2010-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43290
        Add structured message passing from the injected bundle to UIProcess

        * MiniBrowser/mac/AppDelegate.m:
        (didRecieveMessageFromInjectedBundle):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didClearWindowForFrame):
        (didRecieveMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):
        (WTR::InjectedBundle::didReceiveMessage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43275
        Make WKArrayRef more usable.

        Remove now unnecessary const_casts.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpDescendantFrameScrollPositions):
        (WTR::dumpDescendantFramesText):

2010-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43274
        Add first pass of structured message passing.

        Update Minibrowser and WebKitTestRunner to work with the new post message
        function.

        * MiniBrowser/mac/AppDelegate.m:
        (didRecieveMessageFromInjectedBundle):
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didCommitLoadForFrame):
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (didReceiveTitleForFrame):
        (didClearWindowForFrame):
        (didCreatePage):
        (willDestroyPage):
        (didRecieveMessage):
        (WKBundleInitialize):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::_didReceiveMessage):
        (WTR::InjectedBundle::didReceiveMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-30  Anders Carlsson  <andersca@apple.com>

        Try to fix the layout test failures.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_get_value):

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Replace plugins/npruntime/bindings-test.html with a more sophisticated test
        https://bugs.webkit.org/show_bug.cgi?id=43232

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add PluginScriptableNPObjectInvokeDefault.cpp.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        Remove invokeDefault callback function.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::create):
        Move this to the top of the file.

        (PluginTest::NPP_GetValue):
        Add default implementation.

        (PluginTest::NPN_CreateObject):
        Add NPN_ wrapper.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest::identifier):
        Add identifier getter.

        * DumpRenderTree/TestNetscapePlugIn/Tests/DocumentOpenInDestroyStream.cpp:
        (DocumentOpenInDestroyStream::DocumentOpenInDestroyStream):
        Add "using namespace std".

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_GetValue):
        Give PluginTest a chance to return a value.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Add PluginScriptableNPObjectInvokeDefault.cpp.
        
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_get_value):
        Give PluginTest a chance to return a value.

2010-07-30  Steve Block  <steveblock@google.com>

        Reviewed by Steve Block.

        Add LayoutTestController methods to test DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=39589

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockDeviceOrientationCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * Scripts/build-webkit:

2010-07-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] QtTestBrowser: -resizes-to-contents command line parameter is broken
        https://bugs.webkit.org/show_bug.cgi?id=43209

        When -resizes-to-content was being passed as a command line parameter it was simply
        not being set (although the corresponding menu item was marked as ON).
        User had to toggle the menu OFF and then ON again for it to take place.

        Reason: LauncherWindow::applyPrefs method sets many user options passed in from
        the command line, but not resizesToContents. Patch addresses that.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::applyPrefs):
        (LauncherWindow::toggleResizesToContents):
        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::resizesToContents):

2010-07-29  Antonio Gomes  <tonikitoo@webkit.org>

        Rubber-stamped by Simon Fraser.

        [Qt] QtTestBrowser: more method grouping and clean ups.

        Moving blocks of code around. Basically grouping related methods close to each.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::changeViewportUpdateMode):
        (LauncherWindow::showFPS):
        (LauncherWindow::newWindow):
        (LauncherWindow::cloneWindow):
        * QtTestBrowser/launcherwindow.h:

2010-07-30  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [QT][Symbian] QtTestBrowser missing location capabilities
        https://bugs.webkit.org/show_bug.cgi?id=43235

        QtTestBrowser missing capabilities to use QtMobility::QLocation. 

        * QtTestBrowser/QtTestBrowser.pro:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Add PluginTest.cpp

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Update download URLs for python irclib package; the old URLs 
        pointed at a specific mirror host and not the general sourceforge
        URLs.

        https://bugs.webkit.org/show_bug.cgi?id=43228

        * Scripts/webkitpy/thirdparty/__init__.py:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Fix typo.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Qt and GTK+ build.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_destroy_stream):

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Another build fix attempt.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        * GNUmakefile.am:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Try to fix Windows and Unix builds.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_destroy_stream):

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Refactor TestNetscapePlugin so tests can be split in separate files
        https://bugs.webkit.org/show_bug.cgi?id=43220

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add PluginTest.cpp, PluginTest.h and Tests/DocumentOpenInDestroyStream.cpp.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        Initialize pluginTest to 0. Remove testDocumentOpenInDestroyStream.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp: Added.
        (PluginTest::PluginTest):
        Initialize m_npp and the test identifier.
        
        (PluginTest::createTestFunctions):
        Return the map from identifiers to createTest functions.

        (PluginTest::registerCreateTestFunction):
        Insert the identifier and create function pair in the map.

        (PluginTest::create):
        Look for a createTest function. If one is found, call it. Otherwise create a vanilla PluginTest object.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added.
        (PluginTest::Register::Register):
        Helper class template for registering plug-in tests.
        
        (PluginTest::Register::create):
        Create a new test of the given type.

        * DumpRenderTree/TestNetscapePlugIn/Tests/DocumentOpenInDestroyStream.cpp: Added.
        (DocumentOpenInDestroyStream::DocumentOpenInDestroyStream):
        Add a test that calls testDocumentOpen from its NPP_DestroyStream callback.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        Create a PluginTest given the identifier. Remove the check for "testdocumentopenindestroystream".

        (NPP_DestroyStream):
        Call the plug-in test NPP_DestroyStream member function.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Add PluginTest.cpp, PluginTest.h and Tests/DocumentOpenInDestroyStream.cpp.

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed build fix.

        Add missing second argument to assert_lint in new style checker tests.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        check-webkit-style shouldn't complain about NPAPI functions
        https://bugs.webkit.org/show_bug.cgi?id=43211

        Allow underscores in functions that start with NPN_, NPP_ or NP_.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-07-29  Victor Wang  <victorw@chromium.org>

        Unreviewed, rolling out r64270.
        http://trac.webkit.org/changeset/64270
        https://bugs.webkit.org/show_bug.cgi?id=39589

        The patch breaks chromium webkit unittest

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * Scripts/build-webkit:

2010-07-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] QtTestBrowser: Move WebPage class methods definitions from main.cpp to webpage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43199

        There is no sense in keeping WebPage method definitions in main.cpp once
        webpage.cpp already exists.

        No behavior change.

        * QtTestBrowser/main.cpp:
        * QtTestBrowser/webpage.cpp:
        (WebPage::createWindow):
        (WebPage::createPlugin):

2010-07-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Factor out LauncherWindow class out of main.cpp (QtTestBrowser)
        https://bugs.webkit.org/show_bug.cgi?id=43170

        Moving LauncherWindow class out of main.cpp to its own .cpp and .h files:
        launcherwindow.{cpp|h}

        No behavior change.

        Also changed all global static variables (named "gXXX") from main.cpp to
        static public variables of the LauncherWindow class.

        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp: Added.
        * QtTestBrowser/launcherwindow.h: Added.
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):
        (main):

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Build fix for building against GTK+ 3.x. GSEAL requires that we
        access internals of the GdkDragContext via methods. For older versions
        of GTK+, define those methods.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gdk_drag_context_get_selected_action): Added.
        (gdk_drag_context_get_actions): Added.
        (dispatchEvent): Use the two new accessor methods.

2010-07-29  Adam Roben  <aroben@apple.com>

        Always say "plugins directory" when referring to a directory
        containing one or more plugins

        Fixes <http://webkit.org/b/43197> WebKit2 often says "plugin
        directory" when it means "plugins directory"

        Reviewed by John Sullivan.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Updated for rename.

2010-07-29  Adam Roben  <aroben@apple.com>

        Always say "directory" when referring to a plugin directory

        Fixes <http://webkit.org/b/43195> WebKit2 often says "plugin path"
        when it means "plugin directory"

        Reviewed by John Sullivan.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Updated for renames.

        * WebKitTestRunner/TestController.h: Renamed m_testPluginPath to
        m_testPluginDirectory.
        (WTR::TestController::testPluginDirectory): Renamed from
        testPluginPath.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::initializeTestPluginDirectory):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeTestPluginDirectory):
        Renamed from initializeTestPluginPath and updated for rename.

2010-07-29  Csaba Osztrogonác  <ossy@webkit.org>

         Reviewed by Antonio Gomes.

         Initialize all members of NPClass struct.
         https://bugs.webkit.org/show_bug.cgi?id=43193

         * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:

2010-07-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Antonio Gomes.

        Warning fix on platforms where XP_MACOSX is undefined.
        https://bugs.webkit.org/show_bug.cgi?id=43192

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        Use #if defined(XP_MACOSX) instead of #if XP_MACOSX .

2010-07-29  Adam Roben  <aroben@apple.com>

        Give find-included-framework-headers our standard license

        * Scripts/find-included-framework-headers: Used the license from
        WebCore/LICENSE-APPLE.

2010-07-29  Adam Roben  <aroben@apple.com>

        Speed up find-included-framework-headers

        We only do one invocation of find now, no longer pipe to grep, and
        replace uniq with sort -u.

        Also added a license header.

        * Scripts/find-included-framework-headers:

2010-07-29  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Add LayoutTestController methods to test DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=39589

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockDeviceOrientationCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * Scripts/build-webkit:

2010-07-28  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Shinichiro Hamaji.

        Fixed <https://bugs.webkit.org/show_bug.cgi?id=33814>
        check-webkit-style gives false positives in single-line functions.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-07-28  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.execCommand
        <https://bugs.webkit.org/show_bug.cgi?id=42538>

        WebKitTestRunner needs layoutTestController.isCommandEnabled
        <https://bugs.webkit.org/show_bug.cgi?id=42671>

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added execCommand and isCommandEnabled.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::execCommand): Added.
        (WTR::LayoutTestController::isCommandEnabled): Added.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Ditto.

2010-07-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Introduce drt_expectations.txt for NRWT
        https://bugs.webkit.org/show_bug.cgi?id=43123

        Introduce LayoutTests/platform/chromium/drt_expectations.txt,
        which overrides test expectations only for DumpRenderTree, in
        order to manage what problems are investigated.
        This change will be reverted when we switch to DRT completely.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
         Add drt_expectations.txt content to the result of
         test_expectations_overrides() if --use-drt is specified.

2010-07-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        First pass at visited link support for WK2
        https://bugs.webkit.org/show_bug.cgi?id=43157

        * MiniBrowser/mac/AppDelegate.m:
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks): Added for the new version of the HistoryClient.
        (-[BrowserAppDelegate init]): Set the HistoryClient right after creating the context(s)
        
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):

2010-07-28  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Add DOM bindings support for wx port.

        * DumpRenderTree/wscript:
        * wx/browser/wscript:
        * wx/build/settings.py:

2010-07-28  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] cleanup temp files left by Linux DRT
        https://bugs.webkit.org/show_bug.cgi?id=43062

        * BuildSlaveSupport/build.webkit.org-config/config.json: Rename the chromium bots to include the OS
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: add a step on chromium-linux to delete temp files left
            by crashed DRTs

2010-07-28  Antonio Gomes  <tonikitoo@webkit.org>

        Rubber-stamped by Kenneth Christiansen.

        More Developer menu items reordering.

        Grouping related menu items together, visually and logically (in the code).

        No behavior change.

        * QtTestBrowser/main.cpp:
        (LauncherWindow::createChrome):

2010-07-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Add FILE_SYSTEM build flag for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=42915

        * Scripts/build-webkit:

2010-07-27  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by David Levin.

        Stylebot should not complain about NULL usage in calls to gdk_pixbuf_save_to
        https://bugs.webkit.org/show_bug.cgi?id=43090

        * Scripts/webkitpy/style/checkers/cpp.py: Add exemption for some GdkPixbuf methods.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added some tests for this behavior.

2010-07-27  Kent Tamura  <tkent@chromium.org>

        Unreviewed, trivial typo fix.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
          Fix a wrong method name committed by r64109.

2010-07-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43087
        Clean up handling of strings at the WebKit2 API layer.

        * MiniBrowser/mac/BrowserWindowController.m:
        (runJavaScriptAlert):
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (didNavigateWithNavigationData):
        (-[BrowserWindowController updateProvisionalURLForFrame:]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindowForFrame):

2010-07-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        webkit-patch post-commits is broken: AttributeError: Values instance has no attribute 'no_squash'
        https://bugs.webkit.org/show_bug.cgi?id=42984

        squash and no_squash have been intentionally erroring for a couple weeks now.
        But post-commits was just broken. Just remove squash/no_squash.

        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-07-27  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after introduction of EXECUTABLE_ALLOCATOR_DEMAND.

        * wx/build/settings.py:

2010-07-27  Adam Roben  <aroben@apple.com>

        Mac build fix

        * MiniBrowser/mac/BrowserWindowController.m:
        (processDidExit):
        (-[BrowserWindowController awakeFromNib]):
        Added processDidExit support.

2010-07-26  Antonio Gomes  <tonikitoo@webkit.org>

        Rubber-stamped by Simon Hausmann.

        [Qt] Reorder some items in Developers' menu so QGraphicsView one is easier accessible.

        Move some less useful menu items on Developers menu from the top to the bottom, so
        QGraphicsView menu goes to the top, and becomes more quickly accessible.

        * QtTestBrowser/main.cpp:
        (LauncherWindow::createChrome):

2010-07-26  Adam Roben  <aroben@apple.com>

        Fix the path to InjectedBundle.dll in Debug_Internal builds

        Fixes <http://webkit.org/b/42994> WebKitTestRunner fails to load
        InjectedBundle.dll in the Debug_Internal configuration

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeInjectedBundlePath): Add the _debug
        suffix only in Debug_All builds.

2010-07-25  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42947
        Check for WEBKIT_TESTFONTS for qt, gtk and windows port and throw 
        error. Without which dumpRenderTree crashes.

        * Scripts/old-run-webkit-tests:

2010-07-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=42956
        [DRT/Chromium] Fix "out of sync" assertion error

        Fix an assertion error on Windows like the following:
        100721 20:16:46 chromium.py:386  CRITICAL Test got out of sync:
        |file:///c:/WebKitBuildSlave2/chromium-win-release-tests/build/LayoutTests/http/tests/local/blob/send-data-blob.html|
        |file:///C:/WebKitBuildSlave2/chromium-win-release-tests/build/LayoutTests/http/tests/local/blob/send-data-blob.html|

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        If the url matches with "file:///[a-z]:", does case-ignore comparison.
        GURL capitalize the driver letter of a file: URL.

2010-07-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.counterValueForElementById
        https://bugs.webkit.org/show_bug.cgi?id=42537

        WebKitTestRunner needs layoutTestController.markerTextForListItem
        https://bugs.webkit.org/show_bug.cgi?id=42549

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Fixed _paramterExpression typo. Improved support for string type as a
        return value, so we don't try to include DOMString.h and we can convert
        the string to a JSValue by calling JSValueMakeStringOrNull.

        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h:
        Added JSValueMakeStringOrNull, used by the code generator.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added counterValueForElementById and markerTextForListItem.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        Moved constant to the top of the file.
        (WTR::toCF): Added. Converts strings to CFStringRef.
        (WTR::toWK): Added. Converts strings to WKStringRef.
        (WTR::toJS): Added. Converts strings to JSStringRef.
        (WTR::setProperty): Moved this function to the top of the file
        rather than having it down where it's used inside the class. Also
        renamed it so it's a separate function rather than an overload of
        JSObjectSetProperty.
        (WTR::propertyValue): Copied this here from InjectedBundlePage.cpp.
        Should move it somewhere we can share it.
        (WTR::propertyObject): Ditto.
        (WTR::getElementById): Added. Calls getElementById through the magic
        of JavaScript.
        (WTR::LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        Chagned to use toWK instead of four local variables.
        (WTR::LayoutTestController::counterValueForElementById): Added.
        Calls WKBundleFrameCopyCounterValue.
        (WTR::LayoutTestController::markerTextForListItem): Added.
        Calls WKBundleFrameCopyMarkerText.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Added counterValueForElementById and markerTextForListItem.

2010-07-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] The EventSender should support simulating drop events
        https://bugs.webkit.org/show_bug.cgi?id=39844

        Add initial dropping support to the GTK+ EventSender.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (createWebView): Listen for some new drag-and-drop signals.
        * DumpRenderTree/gtk/EventSender.cpp: Add currentDragSourceContext.
        (dispatchEvent):
        Detect situations where a drag is either starting or ending and massage
        GTK+ into sending the appropriate signals to the WebView.
        (replaySavedEvents): Remove comment.
        (makeEventSender): Clear the currentDragSourceContext when creating a new EventSender.
        (dragBeginCallback): Capture the new currentDragSourceContext when a drag begins.
        (dragEndCallback): Clear the currentDragSourceContext when a drag ends.
        (dragFailedCallback): Disable the GTK+ drag failed animation.
        * DumpRenderTree/gtk/EventSender.h: Add declarations for new signal callbacks.

2010-07-26  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        svn-unapply warns of uninitialized variable when unapplying
        a patch that describes an svn move operation
        https://bugs.webkit.org/show_bug.cgi?id=42036

        Fixes Perl uninitialized variable warnings when un-applying
        a patch that moves a file.

        * Scripts/svn-unapply:
          - Modified patch() so that it initializes $patch to the empty
            string when we don't have svnConvertedText (such as when
            reversing a diff that represents a svn copy/move operation).

2010-07-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move some non-APIish functions into private headers.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:

2010-07-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=42986
        Add prompt and confirm client functions to WebKit2

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):

2010-07-26  Adam Roben  <aroben@apple.com>

        Windows build fix

        * MiniBrowser/MiniBrowser.vcproj:
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj:
        Removed empty attributes so the values will be picked up from the
        vsprops files. (Also removed a couple of attributes that accidentally
        duplicated values from the vsprops files.)

2010-07-26  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Adam Roben.
        
        Touch MiniBrowser's stdafx to fix the build.

        * MiniBrowser/win/stdafx.h:

2010-07-26  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Add pretty printer of WTF::Vector for GDB 7.

        https://bugs.webkit.org/show_bug.cgi?id=40909

        * gdb/wtf.py: Added.

2010-07-26  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix feature detection regexp

        We were missing the last feature

        * Scripts/webkitdirs.pm:

2010-07-25  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        WebKitTestRunner needs to support layoutTestController.dumpSelectionRect
        https://bugs.webkit.org/show_bug.cgi?id=42326

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added dumpSelectionRect.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpSelectionRect): Added. For now, this
        does nothing because its purpose is to change pixel test output and
        we do not have pixel tests implemented yet.

2010-07-25  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKitTestRunner needs to support layoutTestController.keepWebHistory
        https://bugs.webkit.org/show_bug.cgi?id=42323

        Added keepWebHistory and computedStyleIncludingVisitedInfo.

        Also fixed misspellings of the word "receive".

        Also tweaked the names of some of the LayoutTestController members.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Added support for a type named "object" that is passed and returns as
        a JSValueRef.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added keepWebHistory and computedStyleIncludingVisitedInfo. Also
        put setAcceptsEditing up nearer the top.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::_didReceiveMessage): Fixed mispellings of receive.
        (WTR::InjectedBundle::initialize): Ditto.
        (WTR::InjectedBundle::didReceiveMessage): Ditto.
        (WTR::InjectedBundle::reset): Reset the state of visited links between
        tests. Also eliminated the unused argument to the LayoutTestController
        create function.
        (WTR::InjectedBundle::setShouldTrackVisitedLinks): Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Ditto.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::shouldBeginEditing): Call shouldAllowEditing
        instead of acceptsEditing.
        (WTR::InjectedBundlePage::shouldEndEditing): Ditto.
        (WTR::InjectedBundlePage::shouldInsertNode): Ditto.
        (WTR::InjectedBundlePage::shouldInsertText): Ditto.
        (WTR::InjectedBundlePage::shouldDeleteRange): Ditto.
        (WTR::InjectedBundlePage::shouldChangeSelectedRange): Ditto.
        (WTR::InjectedBundlePage::shouldApplyStyle): Ditto.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::create): Removed uneeded argument.
        (WTR::LayoutTestController::LayoutTestController): Removed unneeded
        argument. Updated for rename of m_acceptsEditing to m_shouldAllowEditing.
        (WTR::LayoutTestController::numberOfActiveAnimations): Added some FIXMEs
        about the fact that this works on the main frame.
        (WTR::LayoutTestController::pauseAnimationAtTimeOnElementWithId): Ditto.
        (WTR::LayoutTestController::keepWebHistory): Added.
        (WTR::LayoutTestController::computedStyleIncludingVisitedInfo): Added.
        (WTR::JSObjectSetProperty): Added. Helper to make the function below
        cleaner.
        (WTR::LayoutTestController::makeWindowObject): Changed to use the
        overload of JSObjectSetProperty above.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Changes to
        match above.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Fixed mispellings of receive.
        (WTR::TestController::_didReceiveMessageFromInjectedBundle): Ditto.
        (WTR::TestController::didReceiveMessageFromInjectedBundle): Ditto.
        * WebKitTestRunner/TestController.h: Ditto.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Ditto.
        * WebKitTestRunner/TestInvocation.h: Ditto.

2010-07-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42193
        Support layoutTestController.dumpEditingDelegates in WebKitTestRunner

        Step 2 - add the rest of editing delegates.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::operator<<): Fixed to not crash when range is null.
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::_shouldEndEditing):
        (WTR::InjectedBundlePage::_shouldInsertNode):
        (WTR::InjectedBundlePage::_shouldInsertText):
        (WTR::InjectedBundlePage::_shouldDeleteRange):
        (WTR::InjectedBundlePage::_shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::_shouldApplyStyle):
        (WTR::InjectedBundlePage::_didBeginEditing):
        (WTR::InjectedBundlePage::_didEndEditing):
        (WTR::InjectedBundlePage::_didChange):
        (WTR::InjectedBundlePage::_didChangeSelection):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        (WTR::InjectedBundlePage::didBeginEditing):
        (WTR::InjectedBundlePage::didEndEditing):
        (WTR::InjectedBundlePage::didChange):
        (WTR::InjectedBundlePage::didChangeSelection):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-07-24  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: need a layout test testing misspelled words in attributed strings
        https://bugs.webkit.org/show_bug.cgi?id=42899

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (attributedStringForRangeCallback):
        (attributedStringRangeIsMisspelledCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):

2010-07-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/42911> Update ruby tools to work with shallow framework bundles

        Reviewed by Mark Rowe.

        * Scripts/check-for-inappropriate-files-in-framework: Added
        check for the SHALLOW_BUNDLE environment variable so that the
        script will work with iOS WebKit builds.
        * Scripts/check-for-webkit-framework-include-consistency: Ditto.

2010-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Eliminate unneeded WKBundleFrameCopyInnerText function from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42847

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::operator<<): Replaced the WKStringToUTF8 function with
        a set of overloaded stream operators.
        (WTR::dumpPath): Changed to use ostringstream and return a string.
        (WTR::propertyValue): Added.
        (WTR::propertyObject): Added.
        (WTR::propertyString): Added.
        (WTR::numericWindowPropertyValue): Changed to call propertyValue.
        (WTR::dumpFrameScrollPosition): Removed now unneeded WKStringToUTF8 sequence
        since we now have suitable streaming functions.
        (WTR::dumpFrameText): Use propertyObject and propertyString instead of
        WKBundleFrameCopyInnerText.
        (WTR::dumpDescendantFramesText): Removed now unneeded WKStringToUTF8 sequence
        since we now have suitable streaming functions.
        (WTR::InjectedBundlePage::dump): Ditto.
        (WTR::InjectedBundlePage::willAddMessageToConsole): Ditto.
        (WTR::InjectedBundlePage::willSetStatusbarText): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptAlert): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt): Ditto.

2010-07-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42193
        Support layoutTestController.dumpEditingDelegates in WebKitTestRunner

        Step 1: Add the method, and implement one actual delegate call as proof of concept. No tests
        fixed, but this makes difference one line smaller on many editing tests.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added dumpEditingCallbacks() and setAcceptsEditing().

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpPath): Dump path to a node in a format that's compatible with DumpRenderTree.
        (WTR::operator<<): Print a range.
        (WTR::InjectedBundlePage::InjectedBundlePage): Set editor client in addition to existing
        clients.
        (WTR::InjectedBundlePage::_shouldBeginEditing): The only client method implemented so far.
        (WTR::InjectedBundlePage::shouldBeginEditing): Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Added a section for editor client
        calls.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpEditingCallbacks):
        (WTR::LayoutTestController::setAcceptsEditing):
        (WTR::LayoutTestController::acceptsEditing):
        (WTR::LayoutTestController::shouldDumpEditingCallbacks):
        Store m_acceptsEditing and m_dumpEditingCallbacks.

2010-07-22  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] QtWebKit needs public API for Notifications.
        https://bugs.webkit.org/show_bug.cgi?id=41413

        Update DumpRenderTree and QtTestBrowser to use the new API.
        Add new DRT API to flag that notifications permission requests should be ignored.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::checkPermission):
        (WebCore::WebPage::cancelRequestsForPermission):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::ignoreDesktopNotificationPermissionRequests):
        (LayoutTestController::checkDesktopNotificationPermission):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::ignoreReqestForPermission):
        * QtTestBrowser/main.cpp:
        (LauncherWindow::LauncherWindow):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::requestPermission):
        (WebPage::checkPermission):
        (WebPage::cancelRequestsForPermission):
        * QtTestBrowser/webpage.h:

2010-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.dumpChildFramesAsText
        https://bugs.webkit.org/show_bug.cgi?id=42325

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added dumpChildFramesAsText.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpFrameText): Added.
        (WTR::dumpDescendantFramesText): Added.
        (WTR::InjectedBundlePage::dumpAllFramesText): Added.
        (WTR::InjectedBundlePage::dump): Changed to use the new whatToDump function
        instead of the shouldDumpAsText function, and added a case for AllFramesText.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Added dumpAllFramesText.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Replaced m_dumpAsText with
        m_whatToDump.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Added
        dumpChildFramesAsText. Removed shouldDumpAsText, shouldDumpDOMAsWebArchive,
        and shouldDumpSourceAsWebArchive. Added whatToDump.

2010-07-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        Inspired by r63881.

        * MiniBrowser/MiniBrowser.vcproj:
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj:
        Removed pre- and post-build events so they will be inherited from the
        vsprops files.

2010-07-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs layoutTestController.dumpChildFrameScrollPositions
        https://bugs.webkit.org/show_bug.cgi?id=42548

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::numericWindowPropertyValue): Renamed this and moved it up higher in the file.
        (WTR::dumpFrameScrollPosition): Added argument telling whether to dump the frame name.
        Changed to a file-internal function instead of a member function.
        (WTR::dumpDescendantFrameScrollPositions): Added.
        (WTR::InjectedBundlePage::dumpAllFrameScrollPositions): Added.
        (WTR::InjectedBundlePage::dump): Changed to call dumpAllFrameScrollPositions when
        appropriate. Also streamlined all the WKStringToUTF8 call sites.
        (WTR::InjectedBundlePage::willAddMessageToConsole): Streamlined use of WKStringToUTF8.
        (WTR::InjectedBundlePage::willSetStatusbarText): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptAlert): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt): Ditto.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Updated for above changes.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize
        m_shouldDumpAllFrameScrollPositions.
        (WTR::LayoutTestController::shouldDumpMainFrameScrollPosition): Renamed from
        shouldDumpFrameScrollPositions.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Reorganized the file a
        bit, added dumpChildFrameScrollPositions and shouldDumpAllFrameScrollPositions,
        and renamed shouldDumpFrameScrollPositions to shouldDumpMainFrameScrollPosition.

2010-07-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support dumping of scroll position
        https://bugs.webkit.org/show_bug.cgi?id=42514

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindowForFrame): Use JSGlobalContextRef instead of JSContextRef.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::_didClearWindowForFrame): Use JSGlobalContextRef
        instead of JSContextRef.
        (WTR::InjectedBundlePage::dump): Call dumpFrameScrollPosition when appropriate.
        (WTR::numericWindowProperty): Added. Helper for dumpFrameScrollPosition.
        (WTR::InjectedBundlePage::dumpFrameScrollPosition): Added.
        (WTR::InjectedBundlePage::didClearWindowForFrame): Use JSGlobalContextRef
        instead of JSContextRef.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Removed names from
        arguments that simply repeat the argument type. Added dumpFrameScrollPosition.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shouldDumpDOMAsWebArchive): Added. Currently
        returns false.
        (WTR::LayoutTestController::shouldDumpSourceAsWebArchive): Added. Currently
        returns false.
        (WTR::LayoutTestController::shouldDumpFrameScrollPositions): Added. Matches
        the logic in DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Updated for above changes.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj: Added property svn:ignore.

2010-07-21  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, adding the WebCore/bindings/generic dir to the list of build dirs.

        * wx/build/settings.py:

2010-07-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42539
        WebKitTestRunner needs to support printing ALERT, PROMPT and CONFIRM messages

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::_willAddMessageToConsole):
        (WTR::InjectedBundlePage::_willSetStatusbarText):
        (WTR::InjectedBundlePage::_willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::_willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::_willRunJavaScriptPrompt):
        (WTR::InjectedBundlePage::willAddMessageToConsole):
        (WTR::InjectedBundlePage::willSetStatusbarText):
        (WTR::InjectedBundlePage::willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-07-21  Adam Roben  <aroben@apple.com>

        Give InjectedBundle our standard set of configurations (minus the
        *_Cairo variants)

        InjectedBundle's Debug_All configuration was the same as is Debug
        configuration, and it was missing a Debug_Internal configuration.

        Fixes <http://webkit.org/b/42749> InjectedBundle's build
        configurations are screwy

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj: Added
        debug_internal.vsprops and debug_all.vsprops to the Debug_All
        configuration. Added a Debug_Internal configuration.

        * WebKitTestRunner/WebKitTestRunner.sln: Build the Debug_Internal
        variant of InjectedBundle when we're using the Debug_Internal solution
        configuration.

2010-07-21  Adam Roben  <aroben@apple.com>

        Move InjectedBundle's settings to a vsprops file

        This will make it easier to change settings for all configurations,
        and to add new configurations.

        Fixes <http://webkit.org/b/42748> InjectedBundle should use vsprops
        files

        Reviewed by Darin Adler.

        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops: Added.
        Moved settings here...
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj: ...from
        here.

2010-07-21  Adam Roben  <aroben@apple.com>

        Give MiniBrowser our standard set of configurations (minus the *_Cairo
        variants)

        MiniBrowser already had a configuration called "Release", but it was
        using mostly the same settings as Debug. And its Debug configuration
        was using the settings that Debug_Internal should be using.

        Fixes <http://webkit.org/b/42746> MiniBrowser's build configurations
        are screwy

        Reviewed by Darin Adler.

        * MiniBrowser/MiniBrowser.vcproj: Removed debug_internal.vsprops from
        the Debug configuration. Remove debug.vsprops and
        debug_internal.vsprops from the Release configuration and replace them
        with release.vsprops. Added Debug_Internal and Debug_All
        configurations.

2010-07-21  Adam Roben  <aroben@apple.com>

        Move MiniBrowser's settings to a vsprops file

        This will make it easier to change settings for all configurations,
        and to add new configurations.

        MiniBrowser should use vsprops files
        https://bugs.webkit.org/show_bug.cgi?id=42745

        Reviewed by Darin Adler.

        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops: Added. Moved
        settings here...
        * MiniBrowser/MiniBrowser.vcproj: ...from here.

2010-07-21  Adam Roben  <aroben@apple.com>

        Fix compiler warnings when building MiniBrowser

        Also cleaned up the .vcproj a bit.

        Fixes <http://webkit.org/b/42743>.

        Reviewed by Darin Adler.

        * MiniBrowser/MiniBrowser.vcproj: Removed all settings that are
        already defined in .vsprops files. This also fixes a warning about
        /EDITANDCONTINUE being incompatible with /SAFESEH.

        * MiniBrowser/win/MiniBrowser.rc: Replaced afxres.h with winresrc.h so
        that we stop getting warnings about ID_FILE_OPEN and ID_FILE_CLOSE
        being redefined. (I think this will also get us closer to building
        with VC++ Express.)

2010-07-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Fix obvious typo.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::setStatusbarText): Need to call ->data() to actually get the string value.

2010-07-20  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] by default, dumpAsText should disable pixel results
        https://bugs.webkit.org/show_bug.cgi?id=42715

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::dumpAsText): disable pixel results, but allow JS to override

2010-07-20  Adam Roben  <aroben@apple.com>

        Windows build fix

        * MiniBrowser/MiniBrowser.vcproj: Link against the new, shiny
        WebKit.lib instead of the old, dusty WebKit2.lib.

2010-07-20  Adam Roben  <aroben@apple.com>

        Stop linking WebKitTestRunner against getopt

        Use of getopt was removed in r63700.

        Fixes <http://webkit.org/b/42714> WebKitTestRunner links against
        getopt, but doesn't need to

        Reviewed by Sam Weinig.

        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Removed getopt.lib
        from all configurations.

2010-07-20  Adam Roben  <aroben@apple.com>

        Make run-webkit-tests --webkit-test-runner "work" on Windows

        WebKitTestRunner crashes on launch, but at least the scripts build and
        launch it!

        Fixes <http://webkit.org/b/42709> run-webkit-tests
        --webkit-test-runner bails with an error on Windows

        Reviewed by Anders Carlsson.

        * Scripts/build-webkittestrunner: Build WebKitTestRunner.sln on
        Windows.
        * WebKitTestRunner/WebKitTestRunner.sln: Added. Contains the following
        projects (from first-built to last-built): FindSafari, ImageDiff,
        InjectedBundleGenerated, InjectedBundle, WebKitTestRunner.

2010-07-20  Adam Roben  <aroben@apple.com>

        Change build-webkit back to building WebKit.sln on Windows

        WebKit.sln builds all the same projects as WebKit2.sln, and the latter
        is being removed.

        Rubber-stamped in advance by Steve Falkenburg.

        * Scripts/build-webkit:

2010-07-20  Adam Roben  <aroben@apple.com>

        Windows build fix

        * MiniBrowser/win/BrowserWindow.cpp: Added missing #include.

2010-07-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Geoffrey Garen.

        WebScriptObject Should Allow Safely Checking For Key Existence
        https://bugs.webkit.org/show_bug.cgi?id=42613

        Normal ObjCController workflow for a WebScriptObject test.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController testHasWebScriptKey:]):

2010-07-20  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=42118
        Disable compositing/webgl tests if WebGL is not enabled

        * Scripts/old-run-webkit-tests:

2010-07-20  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Adler.

        Print additional information about exception if failed to connect to apache (in verbose mode).
        https://bugs.webkit.org/show_bug.cgi?id=42627

        * Scripts/webkitpy/layout_tests/port/http_server_base.py:

2010-07-20  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] only pass --force to gclient sync if explicitly stated
        https://bugs.webkit.org/show_bug.cgi?id=42581

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: bots should
              always pass --force since it's hard to do manual cleanups
        * Scripts/update-webkit-chromium: only pass --force if --force is
              passed in

2010-07-19  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Paths of generated files should be relative to the build product.

2010-07-19  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

        [Win] Implement LayoutTestController::markerTextForListItem()
        https://bugs.webkit.org/show_bug.cgi?id=37930

        Implements DRT support for markerTextForListItem in the Windows port.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::markerTextForListItem): Implemented.

2010-07-19  Jessie Berlin  <jberlin@apple.com>

        Windows build fix. Unreviewed.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeTestPluginPath):

2010-07-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Remove dependency on getopt from WebKitTestRunner.

        - Simplify options parsing and eliminate unused options.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::testPluginPath):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::initializeTestPluginPath):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::initializeTestPluginPath):

2010-07-19  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] MiniBrowser: Progress indication at address bar
        https://bugs.webkit.org/show_bug.cgi?id=42565

        Make possible to see load progress at address bar based on
        QtTestBrowser solution

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::loadProgress):
        * MiniBrowser/qt/BrowserWindow.h:

2010-07-19  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Add MiniBrowser features: urlChanged, titleChanged and from user input load
        https://bugs.webkit.org/show_bug.cgi?id=42564

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserView::load):
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::titleChanged):
        (BrowserWindow::urlChanged):
        * MiniBrowser/qt/BrowserWindow.h:

2010-07-19  Sam Weinig  <weinig@apple.com>

        Reviewed by Adam Roben.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42532
        Auto-generate the JS bindings for WebKitTestRunner's script objects.

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/DerivedSources.make: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/GetPtr.h: Added.
        * WebKitTestRunner/InjectedBundle/Bindings: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h: Added.
        (WTR::JSWrappable::~JSWrappable):
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp: Added.
        (WTR::JSWrapper::wrap):
        (WTR::JSWrapper::unwrap):
        (WTR::unwrapObject):
        (WTR::JSWrapper::initialize):
        (WTR::JSWrapper::finalize):
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h: Added.
        (WTR::toJS):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::setStatusbarText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::wrapperClass):
        (WTR::LayoutTestController::waitUntilDone):
        (WTR::LayoutTestController::makeWindowObject):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::shouldDumpAsText):
        (WTR::LayoutTestController::dumpAsText):
        (WTR::LayoutTestController::shouldDumpStatusCallbacks):
        (WTR::LayoutTestController::dumpStatusCallbacks):
        (WTR::LayoutTestController::waitToDump):
        (WTR::LayoutTestController::testRepaint):
        (WTR::LayoutTestController::repaintSweepHorizontally):
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj: Added.
        * WebKitTestRunner/win/build-generated-files.sh: Added.

2010-07-19  Mark Rowe  <mrowe@apple.com>

        Clean up the buildbot configuration a little.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2010-07-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42118
        Disable WebGL on Leopard for now. 

        LayoutTests fail on some graphics hardware on Leopard because one of the features we use,
        GL_ARB_framebuffer_object, is not universally available in Leopard like it is in
        SnowLeopard. This will allow LayoutTests to pass on Leopard until we add logic to use a
        software OpenGL driver on machines without this support.

        * Scripts/build-webkit:

2010-07-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Brady Eidson.

        Fix MiniBrowser to update URL as you browse
        https://bugs.webkit.org/show_bug.cgi?id=42591
        
        Hook up various loading notifications to update the URL bar in MiniBrowser.

        * MiniBrowser/mac/BrowserWindowController.m:
        (_didStartProvisionalLoadForFrame):
        (_didReceiveServerRedirectForProvisionalLoadForFrame):
        (_didFailProvisionalLoadWithErrorForFrame):
        (_didCommitLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (-[BrowserWindowController updateProvisionalURLForFrame:]):
        (-[BrowserWindowController didStartProvisionalLoadForFrame:]):
        (-[BrowserWindowController didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[BrowserWindowController didFailProvisionalLoadWithErrorForFrame:]):
        (-[BrowserWindowController didFailLoadWithErrorForFrame:]):
        (-[BrowserWindowController didCommitLoadForFrame:]):

2010-07-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42586
        Log all canceled authentication attempts in DumpRenderTree

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        It's important to know whether an auth sheet appeared. Added logging to "no preset credentials"
        case.

2010-07-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63671.
        http://trac.webkit.org/changeset/63671
        https://bugs.webkit.org/show_bug.cgi?id=42575

        broke windows (Requested by weinig on #webkit).

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/DerivedSources.make: Removed.
        * WebKitTestRunner/ForwardingHeaders/wtf/GetPtr.h: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Removed.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::setStatusbarText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setWaitToDump):
        (WTR::displayCallback):
        (WTR::dumpAsTextCallback):
        (WTR::dumpStatusCallbacksCallback):
        (WTR::waitUntilDoneCallback):
        (WTR::notifyDoneCallback):
        (WTR::numberOfActiveAnimationsCallback):
        (WTR::pauseAnimationAtTimeOnElementWithIdCallback):
        (WTR::repaintSweepHorizontallyCallback):
        (WTR::testRepaintCallback):
        (WTR::layoutTestControllerObjectFinalize):
        (WTR::LayoutTestController::makeWindowObject):
        (WTR::LayoutTestController::getJSClass):
        (WTR::LayoutTestController::staticFunctions):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpAsText):
        (WTR::LayoutTestController::setDumpAsText):
        (WTR::LayoutTestController::dumpStatusCallbacks):
        (WTR::LayoutTestController::setDumpStatusCallbacks):
        (WTR::LayoutTestController::setTestRepaint):
        (WTR::LayoutTestController::setTestRepaintSweepHorizontally):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42532
        Auto-generate the JS bindings for WebKitTestRunner's script objects.

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/DerivedSources.make: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/GetPtr.h: Added.
        * WebKitTestRunner/InjectedBundle/Bindings: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h: Added.
        (WTR::JSWrappable::~JSWrappable):
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp: Added.
        (WTR::JSWrapper::wrap):
        (WTR::JSWrapper::unwrap):
        (WTR::unwrapObject):
        (WTR::JSWrapper::initialize):
        (WTR::JSWrapper::finalize):
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h: Added.
        (WTR::toJS):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::setStatusbarText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::wrapperClass):
        (WTR::LayoutTestController::waitUntilDone):
        (WTR::LayoutTestController::makeWindowObject):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::shouldDumpAsText):
        (WTR::LayoutTestController::dumpAsText):
        (WTR::LayoutTestController::shouldDumpStatusCallbacks):
        (WTR::LayoutTestController::dumpStatusCallbacks):
        (WTR::LayoutTestController::waitToDump):
        (WTR::LayoutTestController::testRepaint):
        (WTR::LayoutTestController::repaintSweepHorizontally):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-19  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        fix chromium linux compile on ubuntu maverick
        https://bugs.webkit.org/show_bug.cgi?id=42528

        * Scripts/webkitdirs.pm: add a chomp to eat a newline that breaks the make command line

2010-07-19  Adam Roben  <aroben@apple.com>

        When dumping a response's MIME type, print its URL's last path
        component rather than its suitable-for-test-result form

        This matches the Mac behavior.

        Fixes <http://webkit.org/b/42276>
        http/tests/loading/preload-slow-loading.php and
        http/tests/mime/uppercase-mime-type.html fail on Windows

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult): Moved code to actually extract the last
        path component from here...
        (lastPathComponent): ...to here.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Added lastPathComponent.

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveResponse): Use the URL's last path
        component, rather than its suitable-for-test-result form, to match
        Mac.

2010-07-19  Anders carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        WebKit2 does not have application cache
        https://bugs.webkit.org/show_bug.cgi?id=42552

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        Set up default preferences. Right now just enables the web application cache.

        (WTR::TestInvocation::invoke):
        Call resetPreferencesToConsistentValues.

        * WebKitTestRunner/TestInvocation.h:

2010-07-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Roben.

        Fix NewRunWebKitTests to work on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=41180

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
          Specifying python explicitly.

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add dumping of statusbar text to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42516

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::_setStatusbarText):
        (WTR::InjectedBundlePage::setStatusbarText):
        Dump the statusbar text.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        Initialize m_dumpStatusCallbacks to false.

        (WTR::dumpStatusCallbacksCallback):
        Implement JSC callback.

        (WTR::LayoutTestController::staticFunctions):
        Add dumpStatusCallbacks.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpStatusCallbacks):
        (WTR::LayoutTestController::setDumpStatusCallbacks):
        Add setter and getter for m_dumpStatusCallbacks.

2010-07-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej Stachowiak.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Get the test plug-in path and set it on the context.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::initializeInjectedBundlePath):
        Simplify this code by using NSBundle.

        (WTR::TestController::testPluginPath):
        Return the test plug-in path.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::testPluginPath):
        Ditto.

2010-07-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach webkitpy about queues.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=42492

        * Scripts/webkitpy/common/net/statusserver.py:

2010-07-16  Ada Chan  <adachan@apple.com>

        Reviewed by Alice Liu.

        Fix Windows build.

        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj:

2010-07-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=42482
        <rdar://problem/8197701>
        Add notification of when the BackForwardList changes
        to aid invalidation of Back/Forward related UI elements.

        * MiniBrowser/mac/BrowserWindowController.m:
        (_didStartProvisionalLoadForFrame):
        (_didCommitLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (_didChangeBackForwardList):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] <input type=number> UI implementation for Windows
        https://bugs.webkit.org/show_bug.cgi?id=42259

        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
        (WebThemeEngineDRT::paintSpinButton):
         Added. Check state consistency and use existing arrow painting code.
        * DumpRenderTree/chromium/WebThemeEngineDRT.h:

2010-07-16  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42430
        Make WebKitTestRunner on Windows actually load and run a test

        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp: Export WKBundleInitialize.
        (WKBundleInitialize):
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj: Added.  Output is a dll.
        * WebKitTestRunner/TestInvocation.cpp: Create a Windows-style path on Windows
        (WTR::createWKURL):
        * WebKitTestRunner/WebKitTestRunnerPrefix.h: Change check for Windows platform to match
        other existing checks, and avoid including Platform.h
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::registerWindowClass): Added.
        (WTR::PlatformWebView::PlatformWebView): Implemented.
        (WTR::PlatformWebView::~PlatformWebView): Implemented.
        (WTR::PlatformWebView::page): Implemented.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeInjectedBundlePath): Implemented. Provide build 
        configuration specific path to InjectedBundle.dll.
        * WebKitTestRunner/win/TestInvocationWin.cpp:
        (WTR::TestInvocation::runUntil): Implemented.
        * WebKitTestRunner/win/WebKitTestRunner.sln: Added InjectedBundle project.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Cleaned up unnecessary dependencies.

2010-07-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Make revalidation of back/forward work a little better with page loads
        https://bugs.webkit.org/show_bug.cgi?id=42470

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController validateToolbar]):
        (_didStartProvisionalLoadForFrame):
        (_didCommitLoadForFrame):
        (_didFailLoadWithErrorForFrame):

2010-07-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Add possibility to dumpAsText and generate a pixel test result
        https://bugs.webkit.org/show_bug.cgi?id=42374

        Add optional parameter to setDumpAsText() to allow generating a pixel test result even if dumpAsText mode.
        setDumpAsText(true) will also generate a pixel test result now, when running run-webkit-tests --pixel-tests.

        This is needed for the svg/dynamic-updates tests, which don't want render tree dumps but text dumps + a pixel test result.
        At some point DRT changed to not generate pixel test results when using dumpAsText - which makes sense, but breaks the svg/dynamic-updates test.

        Implemented for all DRT platforms, except Qt, as it's not clear how arguments to functions like "setDumpAsText" are handled.
        (Qt always dumps pixel tests when using --pixel-tests mode, so it does not break anything)

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpAsTextAndPixelsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpAsTextAndPixels):
        (LayoutTestController::setDumpAsTextAndPixels):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpAsTextAndPixels):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldDumpAsTextAndPixels):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (dump):

2010-07-16  Kent Hansen  <kent.hansen@nokia.com>

        Unreviewed. Adding myself as committer.

        * Scripts/webkitpy/common/config/committers.py:

2010-07-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Another uneviewed attempt to fix build.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createPagedBitmapContext):

2010-07-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed tiger build fix.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContext):
        (createBitmapContextFromWebView):

2010-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed build fix.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):

2010-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/PixelDumpSupport.h:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContext): This function was added to share bitmap context creation code.
        (createBitmapContextFromWebView):
        (createPagedBitmapContext):

2010-07-15  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        Pull in pywebsocket-0.5.1
        https://bugs.webkit.org/show_bug.cgi?id=42353

        pywebsocket-0.5.1 contains a small bug fix (*) that should fix a worker test
        in Chromium. There is no other functional change.

        (*) http://code.google.com/p/pywebsocket/source/detail?r=265

        * Scripts/webkitpy/thirdparty/__init__.py: Bump pywebsocket version to 0.5.1.

2010-07-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add toolbar and toolbar item validation for MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=42422

        * MiniBrowser/MBToolbarItem.h: Added.
        * MiniBrowser/MBToolbarItem.m: Added.
        (-[MBToolbarItem validate]):

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController validateUserInterfaceItem:]):

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/BrowserWindow.xib:

2010-07-15  Victor Wang  <victorw@chromium.org>

        Unreviewed, add victorw irc nickname to committer list.

        * Scripts/webkitpy/common/config/committers.py:

2010-07-15  Adam Roben  <aroben@apple.com>

        Make killing Apache more reliable (on both Mac and Windows)

        We previously had two ways of determining whether we had succeeded in
        killing Apache:
          1) checking the return value of kill(0, $apachePID)
          2) checking whether Apache's PID file still exists

        On Cygwin, Apache doesn't always delete its PID file when it exits,
        making (2) unreliable. We unfortunately misdiagnosed this as an
        impotency of Perl's kill function, which led to r63177 and r63355.

        Now that we know that the real problem is that Apache doesn't always
        delete its PID file on Windows, we can make a much better fix: always
        use method (1) to determine whether we've killed Apache.

        Fixes <http://webkit.org/b/42415> Killing Apache is unreliable,
        leading to regression test failures (and general annoyance).

        Reviewed by Anders Carlsson.

        * Scripts/webkitperl/httpd.pm:
        (openHTTPD): Moved killing code from here to killHTTPD. Added a call
        to delete the PID file in case Apache doesn't do this itself when
        killed. Our later logic relies on the PID file being deleted after
        this point.
        (closeHTTPD): Removed killing logic and changed to just call killHTTPD
        instead. killHTTPD's logic is a bit different from the logic we had
        here, for the reasons stated above.
        (killHTTPD): Added. Code came from openHTTPD.
        (handleInterrupt): Bonus fix for Mac: don't hang when pressing Ctrl-C!
        On Mac, don't try to kill Apache when we receive a signal, as Apache
        will already have been killed by this point (though for some reason
        this isn't detected by our killing logic in killHTTPD). On Cygwin, we
        still need to kill Apache manually.

2010-07-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42399
        Update MiniBrowser for WKFrameNavigationType 

        * MiniBrowser/mac/BrowserWindowController.m:
        (_decidePolicyForNavigationAction):
        (_decidePolicyForNewWindowAction):

2010-07-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        http://bugs.webkit.org/show_bug.cgi?id=42406
        Make SunSpider work better with roots.

        * Scripts/sunspider-compare-results: fix argument bug
        * Scripts/webkitdirs.pm: look inside JavaScriptCore if jsc isn't top-level.

2010-07-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Hook up back/forward in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=42397

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController goBack:]):
        (-[BrowserWindowController goForward:]):

2010-07-15  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        [Mac] Implement LayoutTestController::markerTextForListItem()
        https://bugs.webkit.org/show_bug.cgi?id=37929

        Implements DRT support for markerTextForListItem in the Mac port.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::markerTextForListItem): Implemented.

2010-07-15  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Update the port names to be more specific.  Before this patch,
        port-specific results for Mac would end up in the wrong place.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2010-07-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        WebKit needs a rebaselining tool (finally)
        https://bugs.webkit.org/show_bug.cgi?id=42339

        This is a very basic rebaselining tool.  It's not
        quite as fancy as chromium's as it will only handle
        updating failing results.  It cannot yet handle adding new
        results, or updating results where the results should not
        replace existing results.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py: Added.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Added.

2010-07-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63352.
        http://trac.webkit.org/changeset/63352
        https://bugs.webkit.org/show_bug.cgi?id=42341

        Broke plugin-initiate-popup-window.html and plugin-javascript-
        access.html on snow leopard (Requested by abarth on #webkit).

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (handleEventCarbon):
        (handleEventCocoa):

2010-07-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        Lower WebKitTestRunner notifyDone timeout to 6.0 for now, to make it easier to grind through the failures.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:

2010-07-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63346.
        http://trac.webkit.org/changeset/63346
        https://bugs.webkit.org/show_bug.cgi?id=42295

        Broke lots of tests, some of which probably just need new
        results (Requested by aroben on #webkit).

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult):

2010-07-14  Adam Roben  <aroben@apple.com>

        Speed up killing of Apache on Windows

        Fixes <http://webkit.org/b/42289> Killing Apache (and thus quitting
        run-webkit-tests) takes a long time on Windows

        Reviewed by Darin Adler and Jon Honeycutt.

        * Scripts/webkitperl/httpd.pm:
        (closeHTTPD): Use taskkill to kill Apache and its child processes.
        Perl's kill seems ineffectual. We were already using taskkill, but
        only after trying kill 20 times. Since kill never works, let's just
        skip it entirely.

2010-07-14  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=41292
        Add a new parameter to the test plugin to allow to specify a script and a
        mouse/keyboard event. The specified script will be evaluated in the browser
        when the specified event is received by the plugin.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (handleEventCarbon):
        (handleEventCocoa):

2010-07-14  Adam Roben  <aroben@apple.com>

        Make urlSuitableForTestResult work for http: URLs, too

        Fixes <http://webkit.org/b/42276>
        http/tests/loading/preload-slow-loading.php and
        http/tests/mime/uppercase-mime-type.html fail on Windows.

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult): Don't bail if the URL starts with http://.
        We want this function to work for those URLs, too!

2010-07-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Add placebo versions of some repaint test functions to WebKitTestRunner - good enough for non-pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=42227

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize new bool
        members.
        (WTR::LayoutTestController::display): Dummy method.
        (WTR::displayCallback): Call the dummy.
        (WTR::repaintSweepHorizontallyCallback): ditto
        (WTR::testRepaintCallback): ditto
        (WTR::LayoutTestController::staticFunctions): Expose new methods.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::setTestRepaint): Set the flag (which currently does
        nothing).
        (WTR::LayoutTestController::setTestRepaintSweepHorizontally): ditto

2010-07-13  Andreas Kling  <andreas.kling@nokia.com>

        Unreviewed. Adding myself as committer.

        * Scripts/webkitpy/common/config/committers.py:

2010-07-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Darin Adler.

        Prevent assertion/duplicate loads for non-deferred subtitute-data loads

        https://bugs.webkit.org/show_bug.cgi?id=30879

        MainResourceLoader uses the member m_initialRequest to store requests for future
        deferred loads. When doing the actual load in handleDataLoadNow(), we therefore
        have to clear this request so that subsequent entries into the loader will not
        start yet another load.

        This can happen as a result of a PageGroupLoadDeferrer going out of scope when
        returning from Chrome::runJavaScriptAlert(), which calls setDeferredLoading(false),
        but only in the case of using both substitute-data and non-deferred main resource
        load together. That's why two new DRT functions were added:

         * queueLoadHTMLString()
         * setDeferMainResourceLoad()

        The change adds DRT hooks for Mac, Win and Qt for these two functions. For Mac
        and Win the hook uses new SPI in WebDataSource. For Qt a new static member was
        added to the FrameLoaderClientQt and accessed though DumpRenderTreeSupportQt.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (queueLoadHTMLStringCallback):
        (setDeferMainResourceDataLoadCallback):
        (LayoutTestController::staticFunctions):
        (LayoutTestController::queueLoadHTMLString):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::deferMainResourceDataLoad):
        (LayoutTestController::setDeferMainResourceDataLoad):
        * DumpRenderTree/WorkQueueItem.h:
        (LoadHTMLStringItem::LoadHTMLStringItem):
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * DumpRenderTree/mac/WorkQueueItemMac.mm:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setDeferMainResourceDataLoad):
        (LayoutTestController::queueLoadHTMLString):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/WorkQueueItemQt.cpp:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/qt/WorkQueueItemQt.h:
        (LoadHTMLStringItem::LoadHTMLStringItem):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::willSendRequest):
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/wx/WorkQueueItemWx.cpp:
        (LoadHTMLStringItem::invoke):

2010-07-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Nikolas Zimmermann.

        Activate test fonts for layout tests in WebKitTestRunner (on Mac)
        https://bugs.webkit.org/show_bug.cgi?id=42153

        * WebKitTestRunner/InjectedBundle/ActivateFonts.h: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize): Activate fonts on startup.
        * WebKitTestRunner/InjectedBundle/mac: Added.
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm: Added.
        (WTR::activateFonts): Activate our fonts.
        * WebKitTestRunner/InjectedBundle/win: Added.
        * WebKitTestRunner/InjectedBundle/win/ActivateFonts.cpp: Added.
        (WTR::activateFonts): Dummy version.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Copy fonts to bundle;
        add more files.
        * WebKitTestRunner/fonts: Added.
        * WebKitTestRunner/fonts/AHEM____.TTF: Added.
        * WebKitTestRunner/fonts/ColorBits-A.png: Added.
        * WebKitTestRunner/fonts/ColorBits.ttf: Added.
        * WebKitTestRunner/fonts/WebKit Layout Tests 2.ttf: Added.
        * WebKitTestRunner/fonts/WebKit Layout Tests.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher100.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher200.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher300.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher400.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher500.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher600.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher700.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher800.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher900.ttf: Added.

2010-07-13  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Remove check-header-includes, as it didn't turn out to be very useful.
        https://bugs.webkit.org/show_bug.cgi?id=41970

        * Scripts/check-header-includes: Removed.

2010-07-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej Stachowiak.

        Make WebKit2 be built by build-webkit (so it will be built by build.webkit.org bots)
        https://bugs.webkit.org/show_bug.cgi?id=40922
        
        Always build WebKit2 on Windows. Necessary since our WebKit build on
        Windows is packaged into a DLL with WebKit2.

        * Scripts/build-webkit: Always build WebKit2 on Windows.

2010-07-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        One http test timing out on Windows can cause all future tests to time out
        https://bugs.webkit.org/show_bug.cgi?id=42146
        
        There have been multiple times on the Windows bots where one http test timing out causes all future
        http tests to time out. This is because the httpd process becomes unresponsive. When an http test
        times out, we should restart httpd on Cygwin to prevent this.

        * Scripts/old-run-webkit-tests: If an http test timed out on Cygwin, close httpd and restart it.
        * Scripts/webkitperl/httpd.pm: Add additional logic to closeHTTPD to teach it about taskkill if
            using kill fails.

2010-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Remove use of auto_ptr in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42134
        
        Replaced auto_ptr with PassOwnPtr / OwnPtr.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::WKStringToUTF8):
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::addMessageToConsole):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::WKStringToUTF8):
        (WTR::TestInvocation::didRecieveMessageFromInjectedBundle):

2010-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        Need support for a WebKit2-specific Skipped list (and initially add accessibility tests to it)
        https://bugs.webkit.org/show_bug.cgi?id=42132

        * Scripts/old-run-webkit-tests: In --webkit-test-runner mode, add mac-wk2 to list of
        platform directories.

2010-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        Make WebKitTestRunner resize the view specially for the W3C SVG tests.
        https://bugs.webkit.org/show_bug.cgi?id=42126

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation): Store the path as a C
        string for later use.
        (WTR::TestInvocation::~TestInvocation):
        (WTR::sizeWebViewForCurrentTest): Resize the WebView to the proper
        size, depending on whether this is a W3C SVG test.
        (WTR::TestInvocation::invoke): Call the size function.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::resizeTo): Implement.
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::resizeTo): Placeholder.

2010-07-12  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        Ensure DRT loads GAIL (Gtk+ module), for a11y tests
        https://bugs.webkit.org/show_bug.cgi?id=38648

        Add the GTK_MODULES envvar (set to "gail") to the clean
        environment when running DRT for the Gtk+ port

        * Scripts/old-run-webkit-tests:

2010-07-12  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [GTK] Support pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=31518

        Finish support for pixel tests on GTK+.

        * DumpRenderTree/PixelDumpSupport.cpp: Remove unecessary RetainPtr include (only
        works on CoreFoundation systems) and add missing cstdio include.
        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp: Switch to using the MD5 support found
        in JSC library. MD5.cpp and MD5.h are only available for the Windows build.
        (computeMD5HashStringForBitmapContext): The number of bytes per row should be the row stride
        of the image, not the row stride multiplied by the width. Use JSC MD5 implementation to calculate
        the MD5 hash here. According to glibc manpages, using snprintf to build a string in unsupported
        by the ANSI standard and this fails on Linux, so unroll the loop here.
        * DumpRenderTree/cairo/PixelDumpSupportCairo.h: Correct some constructor misbehavior.
        (BitmapContext::BitmapContext): There is no reason to check the value of the
        m_context member in the constructor and it certainly should not be freed. Instead
        just initialize it with the incoming value.
        * DumpRenderTree/gtk/DumpRenderTree.cpp: Fix the order of includes.
        (dump): Actually call dumpWebViewAsPixelsAndCompareWithExpected when it is time to
        dump pixels.
        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp: Added.
        (createBitmapContextFromWebView):
        * GNUmakefile.am: Add new files to the build.

2010-07-12  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Remove stray "raise e" that got included in a previous patch.  This
        caused the EWS bots to turn red instead of purple when a patch failed
        to apply.

        * Scripts/webkitpy/tool/commands/stepsequence.py:

2010-07-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63101.
        http://trac.webkit.org/changeset/63101
        https://bugs.webkit.org/show_bug.cgi?id=42103

        Broke one API test (Requested by xan_ on #webkit).

        * Scripts/old-run-webkit-tests:

2010-07-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=13075
        XMLHttpRequest with failed authentication should set status to 401

        https://bugs.webkit.org/show_bug.cgi?id=6871
        <rdar://problem/3363403> 401 error page is never shown

        Fix crashes in Windows DumpRenderTree.

        * DumpRenderTree/win/ResourceLoadDelegate.cpp: (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        If we return an error, WebKit will call continueWithoutCredentialForAuthenticationChallenge()
        again on a destroyed sender.

2010-07-12  Adam Roben  <aroben@apple.com>

        Windows failure-to-launch fix

        * DumpRenderTree/win/DumpRenderTree.vcproj: Copy CoreVideo.dll and
        CoreVideo.pdb into WebKitOutputDir in the post-build event, too, like
        we already do for CoreFoundation, CFNetwork, etc.

2010-07-12  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        Ensure DRT loads GAIL (Gtk+ module), for a11y tests
        https://bugs.webkit.org/show_bug.cgi?id=38648

        Add the GTK_MODULES envvar (set to "gail") to the clean
        environment when running DRT for the Gtk+ port

        * Scripts/old-run-webkit-tests:

2010-07-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=13075
        XMLHttpRequest with failed authentication should set status to 401

        https://bugs.webkit.org/show_bug.cgi?id=6871
        <rdar://problem/3363403> 401 error page is never shown

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        Do respond even if handlesAuthenticationChallenges() is false. Pretend that the user pressed
        the Cancel button.

2010-07-12  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Add location bar (Ctrl+L) shortcut in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=42082

        * QtTestBrowser/main.cpp:
        (LauncherWindow::createChrome):
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::openLocation):
        * QtTestBrowser/mainwindow.h:

2010-07-12  Adam Roben  <aroben@apple.com>

        Make the Python autoinstaller not use a dead SourceForge server

        Fixes <http://webkit.org/b/42080> webkit-patch is broken due to
        offline SourceForge server

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/thirdparty/__init__.py: Use
        surfnet.dl.sourceforge.net instead of hivelocity.dl.sourceforge.net,
        which seems to be down.

2010-07-12  Adam Roben  <aroben@apple.com>

        Make run-webkit-tests print how many tests timed out when exiting
        early

        The number of timed-out tests is taken into account when deciding
        whether to exit early. Leaving it out of the output just makes the
        script look buggy (because it might say something like "Exiting early
        after 0 crashes.").

        Fixes <http://webkit.org/b/42077> run-webkit-tests prints confusing
        messages when exiting early due to crashes and time-outs

        Reviewed by Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (stopRunningTestsEarlyIfNeeded): When stopping, print the number of
        timed-out tests, too.

2010-07-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Implement animation-related methods for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42053
        
        Implemented numberOfActiveAnimatiosn and pauseAnimationAtTimeOnElementWithId. Many
        animation tests were hanging otherwise.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::numberOfActiveAnimations):
        (WTR::LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (WTR::numberOfActiveAnimationsCallback):
        (WTR::pauseAnimationAtTimeOnElementWithIdCallback):
        (WTR::LayoutTestController::staticFunctions):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-07-11  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        Enable executable support for svn-apply and svn-unapply
        https://bugs.webkit.org/show_bug.cgi?id=39409

        Connect up the Git and SVN executable bit support in parseDiff() so that
        executable bit changes are propagated via the returned diff hash to the
        patch function in svn-apply and svn-unapply.

        * Scripts/VCSUtils.pm:
          - Modified parseDiff() to call parseSvnDiffProperties when
            it finds the start of an SVN property change diff.
          - Removed FIXME comment above parseSvnDiffProperties() since
            it is now being used by parseDiff().
          - Export method scmToggleExecutableBit() now that we added the
            executableBitDelta hash key. (This should have been exported
            when we added this function in Bug #38423 <https://bugs.webkit.org/show_bug.cgi?id=38423>).
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Updated results for:
            "rename (with executable bit change)"
              - Test value of executableBitDelta (now that we have support).
            "SVN: binary file (isBinary true)"
              - Remove the property change diff from svnConvertedText. We plan
                to remove svnConvertedText in the future. So, we decided
                against adding such support to any new code, such as the
                property parsing routines. Therefore, we do not keep SVN
                converted text for property change diffs.
          - Added unit tests:
            "SVN: file change diff with property change diff"
            "SVN: file change diff, followed by property change diff on different file"
            "SVN: property diff, followed by file change diff"
            "SVN: copied file with property change"
            "SVN: two consecutive property diffs"
            "SVN: binary file with executable bit change"
            "SVN: binary file followed by property change on different file"
            "SVN: binary file followed by file change on different file"
            "SVN: file change diff with property change, followed by property change diff"
            "SVN: file change diff with property change, followed by file change diff"

2010-07-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Implement waitUntilDone and notifyDone for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42049

        With this fix, most of the DOM tests pass.
        
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage): Track the main page. Not
        a great way to do it in the future case where we may get multiple
        pages - we really need a way to send it over from the ui process.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::page): A way to get the main page.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Initialize m_isLoading to false.
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame): Track that we
        are loading.
        (WTR::InjectedBundlePage::dump): Factor into a method so this can be
        called by the layout test controller. Also, cancel any pending watchdogs.
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Note that we are done loading.
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame): Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (WTR::InjectedBundlePage::isLoading): A way to track if we are loading.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize m_waitToDump
        to false.
        (WTR::LayoutTestController::invalidateWaitToDumpWatchdog): Invalidate 
        the watchdog.
        (WTR::waitUntilDoneWatchdogFired): Static helper for the watchdog timer.
        (WTR::LayoutTestController::setWaitToDump): Set the flag.
        (WTR::LayoutTestController::waitToDumpWatchdogTimerFired): Handle the case
        where waitUntilDone times out.
        (WTR::LayoutTestController::notifyDone): Dump, if loading is done.
        (WTR::waitUntilDoneCallback): JS glue for waitUntilDone.
        (WTR::notifyDoneCallback): JS glue for notifyDone.
        (WTR::LayoutTestController::staticFunctions): Add waitUntilDone and notifyDone
        to the layoutController.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::waitToDump): Inline method to get the wait state.

2010-07-09  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Dan Bernstein.

        Windows testers running Windows 7 were hanging during test_kill_process. Changing the
        number of attempts from 3 to 10 fixes the problem on the new bots (and doesn't seem to
        slow down the tests).

        * Scripts/webkitpy/common/system/executive.py:

2010-07-09  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Mac build fix
        https://bugs.webkit.org/show_bug.cgi?id=41967

        Adding file PluginObjectMac.mm and frameworks Cocoa and QuartzCore.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-09  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] [WebKit2] Add navigation actions to MiniBrowser toolbar
        https://bugs.webkit.org/show_bug.cgi?id=41966

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):

2010-07-09  Leon Clarke  <leonclarke@google.com>

        Reviewed by Adam Barth.

        add support for link prefetching
        https://bugs.webkit.org/show_bug.cgi?id=3652

        * Scripts/build-webkit:

2010-07-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        r63004 broke some python tests
        https://bugs.webkit.org/show_bug.cgi?id=42007

        AbstractStep now checks options.no_squash and options.squash, so
        they needed to have real values. Mock would return an object for those,
        which would then act as if the values were True.

        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
        * Scripts/webkitpy/tool/steps/validatereviewer_unittest.py:

2010-07-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        --squash should go away and become the default
        https://bugs.webkit.org/show_bug.cgi?id=39624

        If there are local commits and working copy changes, then prompt the user
        whether to continue. Setting git config webkit-patch.commit_should_always_squash
        true bypasses the prompt.

        --git-commit=HEAD.. operates on working copy changes only.
        --git-commit=committish operates on a range of commits as a single commit.
            e.g. --git-commit=HEAD only operates on the HEAD commit.
            --git-commit=HEAD~4..HEAD~2 will operate on HEAD~3 and HEAD~2 as a single commit.

        --no-squash and --squash are left in with descriptive error messages if used.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/api_unittest.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/common/net/rietveld.py:
        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/style/optparser.py:
        * Scripts/webkitpy/style_references.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/checkstyle_unittest.py: Removed.
        * Scripts/webkitpy/tool/steps/commit.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

2010-07-09  Mark Rowe  <mrowe@apple.com>

        Add two new Windows test build slaves.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2010-07-09  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        rebaseline_chromium_webkit_tests missing --use_drt option on linux
        https://bugs.webkit.org/show_bug.cgi?id=41985

        This adds in the --use_drt option for rebaseline_chromium_webkit_tests
        so that it works on linux. This is essentially a "compile-fix" for the
        script.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-07-09  Nico Weber  <thakis@chromium.org>

        Unreviewed. Adding myself as committer.

        * Scripts/webkitpy/common/config/committers.py:

2010-07-09  David Kilzer  <ddkilzer@apple.com>

        Revert "<http://webkit.org/b/41788> commit-log-editor: wrong ChangeLog read when invoked from subdir with git"

        This reverts commit r62692.

        * Scripts/commit-log-editor:

2010-07-08  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        cleanup json_results_generator dependencies so that non-layout-tests can also use it safely
        https://bugs.webkit.org/show_bug.cgi?id=38693

        Introduced a new base class JSONResultsGeneratorBase that doesn't
        have any dependency on layout_tests packages.
        Turned JSONResultsGenerator into a wrapper class of the base class
        so that the old code can work with it during the cleanup.

        Added json_results_generator_unittest.py.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py: Added

2010-07-09  Abhishek Arya  <inferno@chromium.org>

        Unreviewed.

        Marking myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2010-07-09  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        Implement MiniBrowser for Qt.
        https://bugs.webkit.org/show_bug.cgi?id=40233

        * MiniBrowser/qt/BrowserWindow.cpp: Added.
        (createNewPage):
        (BrowserView::BrowserView):
        (BrowserView::resizeEvent):
        (BrowserView::load):
        (BrowserView::view):
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::load):
        (BrowserWindow::changeLocation):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h: Added.
        (BrowserView::~BrowserView):
        * MiniBrowser/qt/MiniBrowser.pro: Added.
        * MiniBrowser/qt/main.cpp: Added.
        (main):

2010-07-09  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Introduce the Qt autotest launcher.

        Qt autotests should be executed more frequently, ideally by the Qt
        build bot. This is the first step to provide the tests more accessible.

        [Qt] It should be easier to run all Qt's autotests.
        https://bugs.webkit.org/show_bug.cgi?id=31625

        * Scripts/run-qtwebkit-tests: Added.

2010-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue should merge to TOT when checkout needs update
        https://bugs.webkit.org/show_bug.cgi?id=41944

        There are a bunch of different designs that are possible here.  This
        one merges to top of tree by cleaning out the working copy and
        re-applying the patch.  Once you decide to merge that way, you need to
        decide who's going to retry.  In this patch, we retry in the child
        process instead of plumbing the failure reason to the master process.

        This patch is difficult to test end-to-end, but hopefully it will work.
        :)

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/multicommandtool.py:
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:

2010-07-09  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Add a script to check for unnecessary includes in header files.
        https://bugs.webkit.org/show_bug.cgi?id=41894

        * Scripts/check-header-includes: Added.

2010-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add --html5-treebuilder option to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=41922

        We're down to one or two regressions in the HTML5lib test suite.  It's
        getting to be time to look at fixing LayoutTests.

        * Scripts/old-run-webkit-tests:

2010-07-08  Simon Fraser  <simon.fraser@apple.com>

        Fix Tiger plugin test failures; the #ifdefs were incorrect, resulting
        in the drawing model never getting set on Tiger.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):

2010-07-08  Aaron Boodman  <aa@chromium.org>

        Reviewed by Timothy Hatcher.

        Add the ability for user scripts and user styles to affect just the top frame.

        https://bugs.webkit.org/show_bug.cgi?id=41529

        * DumpRenderTree/LayoutTestController.h: Added new allFrames param.
        * DumpRenderTree/LayoutTestController.cpp: Ditto.
        (addUserScriptCallback):
        (addUserStyleSheetCallback):
        * DumpRenderTree/chromium/LayoutTestController.cpp: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):

2010-07-08  Adele Peterson  <adele@apple.com>

        Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler.

        Test infrastructure for https://bugs.webkit.org/show_bug.cgi?id=41721
        <rdar://problem/8158561> Missing plug-in indicator should have a pressed state

        Log when the missing plugin button is pressed.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:didPressMissingPluginButton:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::QueryInterface):
        (UIDelegate::createWebViewWithRequest):
        (UIDelegate::drawBackground):
        (UIDelegate::decidePolicyForGeolocationRequest):
        (UIDelegate::didPressMissingPluginButton):
        * DumpRenderTree/win/UIDelegate.h:

2010-07-08  Simon Fraser  <simon.fraser@apple.com>

        Fix the Tiger build.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):

2010-07-08  Simon Fraser  <simon.fraser@apple.com>

        Fix windows build.

        #ifdef code for Mac.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):

2010-07-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Allow the TestPlugin to use Core Animation rendering for testing
        https://bugs.webkit.org/show_bug.cgi?id=41872
        
        Add the ability for the TestPlugin to use the CoreAnimation rendering model
        when available, based on the "drawingmodel" attribute of the embed tag:
            drawingmodel="coreanimation"

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Add PluginObjectMac.mm
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Add some macros so we can detect
        when building on Tiger. Add a void* coreAnimationLayer member.
        
        * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm: Added.
        (createCoreAnimationLayer): Obj-C method to create the CALayer.
        
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New): Look for the drawingmodel attribute to decide which drawing
        model to use.
        (NPP_Destroy): Release the CALayer if we have one.
        (NPP_GetValue): Return the retained CALayer.

2010-07-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Support pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=31518

        Convert this file from CRLF to NL line endings. It will soon
        be used on more than just the WinCairo platform.

        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp:
        (writeFunction):
        (printPNG):
        (computeMD5HashStringForBitmapContext):
        (dumpBitmap):

2010-07-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Enable Data Execution Prevention for our test harnesses on Windows
        https://bugs.webkit.org/show_bug.cgi?id=41882

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:

2010-07-07  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add DRT support for pageProperty etc.

        https://bugs.webkit.org/show_bug.cgi?id=41584

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageSizeAndMarginsInPixels):
        (LayoutTestController::pageProperty):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-07-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Remove a warnings from the ImageDiff build by using the proper
        printf format string for the gsize data type.

        * DumpRenderTree/gtk/ImageDiff.cpp:
        (printImage): Use the proper printf format string for the gsize data type.

2010-07-08  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=41653
        Add new WebKitTestRunner project for Windows

        * WebKitTestRunner/WebKitTestRunnerPrefix.h: 
        Similar to how it's done in DumpRenderTree, define max and min early
        on so that they don't get replaced by a macro requiring 2 arguments.

        * WebKitTestRunner/win: Added.
        * WebKitTestRunner/win/WebKitTestRunner.sln: Added.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Added.
        * WebKitTestRunner/win/main.cpp: Added.
        (main): Implemented

        Added these files with stubbed out functions:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp: Added.
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::page):
        * WebKitTestRunner/win/TestControllerWin.cpp: Added.
        (WTR::TestController::initializeInjectedBundlePath):
        * WebKitTestRunner/win/TestInvocationWin.cpp: Added.
        (WTR::TestInvocation::runUntil):

2010-07-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Implement ImageDiff and add it to the build system
        https://bugs.webkit.org/show_bug.cgi?id=41779

        Add the initial implementation of the ImageDiff tool for the GTK+
        port. This is an essential tool for doing pixel tests. The implementation
        is based on the Mac and Chromium ports.

        * DumpRenderTree/gtk/ImageDiff.cpp: Added.
        (readPixbufFromStdin): Added.
        (differenceImageFromDifferenceBuffer): Ditto.
        (calculateDifference): Ditto.
        (printImage): Ditto.
        (printImageDifferences): Ditto.
        (main): Ditto.
        * GNUmakefile.am: Add ImageDiff to the WebKitTools build scripts.

2010-07-08  Jay Civelli  <jcivelli@chromium.org>

        Unreviewed. Adding myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2010-07-08  Adam Roben  <aroben@apple.com>

        Make Windows stop running tests from platform/mac

        r62742 made a change (at my suggestion!) that caused us to start
        looking for tests in platform/mac, rather than just looking for
        expected results in platform/mac. This patch just undoes that part of
        r62742.

        Fixes <http://webkit.org/b/41855> REGRESSION (r62742): Windows runs
        tests from platform/mac, but shouldn't

        Reviewed by Antti Koivisto and Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (top level): Removed "mac-snowleopard" and "mac" from @winPlatforms,
        so we won't look in those directories for tests to run.
        (expectedDirectoryForTest): Added back code from pre-r62742 to look in
        platform/mac-snowleopard and platform/mac for expected results.

2010-07-08  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed. Adding myself as a reviewer.

        * Scripts/webkitpy/common/config/committers.py:

2010-07-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Update my e-mail in committers.py

        * Scripts/webkitpy/common/config/committers.py:

2010-07-07  Daniel Bates  <dbates@rim.com>

        Reviewed by Dumitru Daniliuc.

        VCSUtils.pm complains about uninitialized value $newLine
        https://bugs.webkit.org/show_bug.cgi?id=41333

        Fixes an issue where VCSUtils::fixChangeLogPatch() may read off the end of
        an array when fixing a change log entry that overlaps with an earlier
        entry. In particular, when a patch contains a change log entry inserted
        earlier in the change log file, but after an entry with the same author
        and date.

        * Scripts/VCSUtils.pm:
            - Added for-loop constraint to fixChangeLogPatch() so that it does not
              read off the end of the @overlappingLines array.
        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl: Added unit test.

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Comment out a part of TestNetscapePlugin that caused tests to fail on Tiger and Leopard.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):

2010-07-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        [DRT/Chromium] Support for indeterminate checkbox
        https://bugs.webkit.org/show_bug.cgi?id=41747

        Import http://src.chromium.org/viewvc/chrome?view=rev&revision=51499

        * DumpRenderTree/chromium/WebThemeControlDRT.cpp:
        (WebThemeControlDRT::draw):
        * DumpRenderTree/chromium/WebThemeControlDRT.h:
        (WebThemeControlDRT::):
        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
        (WebThemeEngineDRT::paintButton):

2010-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Clean up MiniBrowser Xcode project.

        - Use xcconfig files.
        - Rename plists to canonical Info.plist
        - Remove localizations.

        * MiniBrowser/Configurations: Added.
        * MiniBrowser/Configurations/Base.xcconfig: Added.
        * MiniBrowser/Configurations/DebugRelease.xcconfig: Added.
        * MiniBrowser/Configurations/MiniBrowser.xcconfig: Added.
        * MiniBrowser/Configurations/WebBundle.xcconfig: Added.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/WebBundle-Info.plist: Removed.
        * MiniBrowser/mac/BrowserStatisticsWindowController.m:
        (-[BrowserStatisticsWindowController initWithThreadedWKContextRef:processWKContextRef:]):
        * MiniBrowser/mac/BrowserWindow.xib: Added.
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithPageNamespace:]):
        * MiniBrowser/mac/English.lproj: Removed.
        * MiniBrowser/mac/English.lproj/BrowserWindow.xib: Removed.
        * MiniBrowser/mac/English.lproj/InfoPlist.strings: Removed.
        * MiniBrowser/mac/English.lproj/MainMenu.xib: Removed.
        * MiniBrowser/mac/Info.plist: Copied from MiniBrowser/mac/MiniBrowser-Info.plist.
        * MiniBrowser/mac/MainMenu.xib: Added.
        * MiniBrowser/mac/MiniBrowser-Info.plist: Removed.
        * MiniBrowser/mac/WebBundle/Info.plist: Copied from MiniBrowser/WebBundle-Info.plist.

2010-07-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Fix two regressions
        https://bugs.webkit.org/show_bug.cgi?id=41745

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):
         Repaint three times to fix svg/W3C-SVG-1.1/struct-use-01-t.svg
         and svg/custom/use-on-g-containing-foreignObject-and-image.svg
         though test_shell does it twice. Probably DRT needs it because
         DRT delays painting as possible.

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Try to fix build.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_destroy_stream):

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Try to fix the GTK+ and Qt test failures by merging the newly added code from TestNetscapePlugin/main.cpp

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_stream):
        (webkit_test_plugin_destroy_stream):
        (webkit_test_plugin_write_ready):
        (webkit_test_plugin_write):

2010-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Don't hard code the Mac OS X 10.6 SDK for MiniBrowser. 

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Use the correct XP_MACOSX define instead of XP_MAC. This was causing test failures on some platforms.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (NPP_HandleEvent):

2010-07-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Need to have a way to specify different results for Windows XP and 7
        https://bugs.webkit.org/show_bug.cgi?id=41776
        
        Add the ability to have platform/win-xp, platform/win-vista, and platform/win-7
        subdirectories, so we can have different results for tests on Windows XP, Windows
        Vista, and Windows 7.

        Windows XP will try the order: win-xp, win-vista, win-7, win, mac-snowleopard, mac.
        Windows Vista will try the order: win-vista, win-7, win, mac-snowleopard, mac.
        Windows 7 will try the order: win-7, win, mac-snowleopard, mac.

        This matches the behavior of the mac.

        * Scripts/old-run-webkit-tests: Add multiple platforms for Windows, and if we are on XP
            or Vista, try looking in other win-* subdirectories before win.
        * Scripts/webkitdirs.pm: Add some helper functions to determine what version of Windows
            we are running.

2010-07-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove ASSERT_NOT_REACHED in some functions
        https://bugs.webkit.org/show_bug.cgi?id=41753

        The original code of the following functions in
        test_shell_devtools_client.cc have NOTIMPLEMENTED(), not
        ASSERT_NOT_REACHED(). The program shouldn't stop at these
        functions.

        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::activateWindow):
        (DRTDevToolsClient::closeWindow):
        (DRTDevToolsClient::dockWindow):
        (DRTDevToolsClient::undockWindow):

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Test that we call NPP_DestroyStream if a plug-in returns -1 from its NPP_Write function
        https://bugs.webkit.org/show_bug.cgi?id=41821

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginGetProperty):
        (pluginSetProperty):
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        Add and initialize the returnNegativeOneFromWrite property.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_NewStream):
        Set the stream type to NP_NORMAL so we'll get write callbacks.

        (NPP_DestroyStream):
        Treat the onstreamdestroy attribute as a function name and not a string.

        (NPP_WriteReady):
        Have this return a nonzero value.

        (NPP_Write):
        If returnNegativeOneFromWrite is true return -1.

2010-07-07  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for machines with both MSVC 2005 and 2008 installed. Ensures the
        latest version is selected by default, and allows the version to be specified.

        * wx/build/settings.py:

2010-07-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: TextArea should return AXSelectedTextRange of 0,0 if the cursor is not in the text area
        https://bugs.webkit.org/show_bug.cgi?id=41810

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::selectedTextRange):

2010-07-07  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Build fix after r62700.

        * GNUmakefile.am: Update the source list to reflect the new TestNetscapePlugIn
        source file locations.

2010-07-07  Ojan Vafai  <ojan@chromium.org>

        Reviewed by David Levin.

        change --exit-after-n-crashes to --exit-after-n-crashes-or-timeouts
        https://bugs.webkit.org/show_bug.cgi?id=41814

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/old-run-webkit-tests:

2010-07-07  Ojan Vafai  <ojan@chromium.org>

        Reviewed by David Levin.

        add --exit-after-n-crashes to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=41811

        Change the bots at build.webkit.org to use --exit-after-n-crashes
        instead of --exit-after-n-failures since we want to be able to have
        more than 20 failures on those bots, but more than 20 crashes means
        something should be rolled out.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-07-07  Brian Weinstein  <bweinstein@apple.com>

        Fix the Windows build by removing win/TestNetscapePlugin/main.cpp from the
        TestNetscapePlugin project, because this was removed from the tree.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Unify Mac and Windows TestNetscapePlugin main.cpp files
        https://bugs.webkit.org/show_bug.cgi?id=41798
        
        * DumpRenderTree/DumpRenderTree.sln:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (strcasecmp):
        (NP_Initialize):
        (NP_GetEntryPoints):
        (NP_Shutdown):
        (NPP_New):
        (NPP_Destroy):
        (NPP_HandleEvent):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp: Removed.

2010-07-07  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix. pageProperty needs to return a value.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::pageProperty):

2010-07-07  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/41788> commit-log-editor: wrong ChangeLog read when invoked from subdir with git

        Reviewed by Anders Carlsson.

        For both svn and git, commit-log-editor is invoked from the root
        of the working directory.  Unlike svn, git returns a list of
        changed files that are relative to the directory where the
        command was invoked.  This caused the ChangeLog file in the root
        directory to be read instead of the ChangeLog in the current
        directory.

        The fix is to use $ENV{PWD} as the base directory when fixing
        the path to the ChangeLog files.  With svn, this has no net
        effect since $ENV{PWD} is the root of the working directory and
        the ChangeLog paths are already relative to that directory.
        With git, $ENV{PWD} is the directory that the commit was invoked
        from, which fixes the ChangeLog paths so that the correct files
        are read when creating the commit log entry.

        Note that the call to makeFilePathRelative() was supposed to
        address this issue, but it doesn't because (a) it does nothing
        with svn working directories by design, and (b) it does nothing
        with git working directories because it's invoked when the
        current directory is the root of the working directory, thus
        giving no relative path.

        * Scripts/commit-log-editor: Removed call to
        makeFilePathRelative() since since it does nothing.  Moved code
        to fix up $changeLog path so that it's fixed before trying to
        open the file, and use $ENV{PWD} as the base path.  Also use
        canonicalizePath() to clean up paths with "../" in them.

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Qt build.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Try to fix Qt build.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Rename TestNetscapePlugin.subproj and move platform specific files to subdirectories
        https://bugs.webkit.org/show_bug.cgi?id=41781

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp.
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h.
        * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp.
        * DumpRenderTree/TestNetscapePlugIn/TestObject.h: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h.
        * DumpRenderTree/TestNetscapePlugIn/mac/Info.plist: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist.
        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.def: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.def.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin_debug.def: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin_debug.def.
        * DumpRenderTree/TestNetscapePlugIn/win/resource.h: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/resource.h.
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj: Removed.

2010-07-07  Andras Becsi  <abecsi@webkit.org>

        Unreviewed trivial fix.

        Remove DUMPRENDERTREE_TEMP environment variable from NRWT
        which was checked in accidentally in r62635.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-07-07  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        Pass port specific environment to server process.
        https://bugs.webkit.org/show_bug.cgi?id=41593

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-07-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Fix a wrong dup detection of rebaseline-chromium-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=41644

        rebaseline-chromium-webkit-tests used ImageDiff with 0.1%
        tolerance. We don't need tolerance for rebaseline.

        * Scripts/webkitpy/layout_tests/port/base.py:
          Add optional tolerance parameter to diff_image().
        * Scripts/webkitpy/layout_tests/port/test.py:
          Add optional tolerance parameter to diff_image().
        * Scripts/webkitpy/layout_tests/port/webkit.py:
          Add optional tolerance parameter to diff_image(), and pass it to ImageDiff command.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
          diff_files() always calls diff_image() with tolerance=0.
          diff_files() is used only by rebaseline-chromium-webkit-tests.

2010-07-06  Sam Weinig  <sam@webkit.org>

        Fix MiniBrowser build.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:

2010-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add support for dumping the contents of messages to the console to WebKitTestRunner

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::_addMessageToConsole):
        (WTR::InjectedBundlePage::addMessageToConsole):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41708
        Add dumpAsText support for WebKitTestRunner

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::reset): Reset the LayoutTestController for each test.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Use the new WKBundleFrameCopyInnerText
        API to dump the main frames text.

2010-07-06  Darin Adler  <darin@apple.com>

        Fix Chromium build.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didCreateDataSource): Call leakPtr instead of release.
        (WebViewHost::didNavigateWithinPage): Ditto.
        (WebViewHost::updateURL): Ditto.

2010-07-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] build-webkit should not run autogen.sh unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=41704

        * Scripts/webkitdirs.pm: Only run autogen.sh during a build if GNUmakefile
        doesn't exist. Autotools should re-run autogen.sh when necessary. Also do
        some very minor cleanup.

2010-07-06  Darin Adler  <darin@apple.com>

        Try to fix Chromium build.

        * DumpRenderTree/chromium/WebViewHost.cpp: Added include of PassOwnPtr.h.

2010-07-06  Darin Adler  <darin@apple.com>

        Fix build.

        * WebKitAPITest/TestsController.cpp:
        (WebKitAPITest::TestsController::addTest): Use leakPtr instead of release.

2010-07-06  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 40558 - [DRT/Chromium] Upstream TestShellDevTools for Chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=40558

        Upstream DevTools for Chromium DRT.
        (original Chromium files rev. 51287)

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp: Added.
        (DRTDevToolsAgent::DRTDevToolsAgent):
        (DRTDevToolsAgent::setWebView):
        (DRTDevToolsAgent::sendMessageToFrontend):
        (DRTDevToolsAgent::forceRepaint):
        (DRTDevToolsAgent::runtimeFeatureStateChanged):
        (DRTDevToolsAgent::injectedScriptSource):
        (DRTDevToolsAgent::injectedScriptDispatcherSource):
        (DRTDevToolsAgent::debuggerScriptSource):
        (DRTDevToolsAgent::asyncCall):
        (DRTDevToolsAgent::call):
        (DRTDevToolsAgent::webDevToolsAgent):
        (DRTDevToolsAgent::attach):
        (DRTDevToolsAgent::detach):
        (DRTDevToolsAgent::setTimelineProfilingEnabled):
        (DRTDevToolsAgent::evaluateInWebInspector):
        (DRTDevToolsAgent::dispatchMessageLoop):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h: Added.
        (DRTDevToolsAgent::~DRTDevToolsAgent):
        (DRTDevToolsAgent::hostIdentifier):
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp:
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.h:
        (DRTDevToolsCallArgs::DRTDevToolsCallArgs):
        (DRTDevToolsCallArgs::~DRTDevToolsCallArgs):
        (DRTDevToolsCallArgs::callsCount):
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp: Added.
        (DRTDevToolsClient::DRTDevToolsClient):
        (DRTDevToolsClient::~DRTDevToolsClient):
        (DRTDevToolsClient::sendMessageToAgent):
        (DRTDevToolsClient::sendDebuggerCommandToAgent):
        (DRTDevToolsClient::activateWindow):
        (DRTDevToolsClient::closeWindow):
        (DRTDevToolsClient::dockWindow):
        (DRTDevToolsClient::undockWindow):
        (DRTDevToolsClient::asyncCall):
        (DRTDevToolsClient::call):
        (DRTDevToolsClient::allMessagesProcessed):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/EventSender.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::setTimelineProfilingEnabled):
        (LayoutTestController::evaluateInWebInspector):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::~TestShell):
        (TestShell::createDRTDevToolsClient):
        (TestShell::showDevTools):
        (TestShell::closeDevTools):
        (TestShell::runFileTest):
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::drtDevToolsAgent):
        (TestShell::drtDevToolsClient):
        * DumpRenderTree/chromium/config.h:

2010-07-06  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        Don't pass image hash to DRT when pixel tests are disabled.
        https://bugs.webkit.org/show_bug.cgi?id=41597

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:

2010-07-05  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION(r60652): WebKitTools/Scripts/ensure-valid-python should cleanup temporary directory
        https://bugs.webkit.org/show_bug.cgi?id=41612

        * Scripts/ensure-valid-python: File::Temp::tempdir call fixed.

2010-07-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        We should be able to specify a bug to block for webkit-patch upload
        https://bugs.webkit.org/show_bug.cgi?id=41648

        This will be useful for working on the HTML5 parser.

        * Scripts/webkitpy/tool/steps/createbug.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-07-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        The style checker exempts gtk2drawing.h when it should exempt gtkdrawing.h
        https://bugs.webkit.org/show_bug.cgi?id=41017

        * Scripts/webkitpy/style/checker.py: Exempt gtkdrawing.h instead of gtk2drawing.h
        * Scripts/webkitpy/style/checker_unittest.py: Update the unit test to reflect the change.

2010-07-04  MORITA Hajime  <morrita@google.com>

        rebaseline-chromium-webkit-tests: UnicodeDecodeError
        https://bugs.webkit.org/show_bug.cgi?id=41589

        * run() method can result non-utf-8 bytes, that causes utf-8
          decoding fail.  Fixed to disable decoding.
        * Fixed Git.find_checkout_root() to make a test pass.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-07-03  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix DumpRenderTree userStyleSheet handling.
        https://bugs.webkit.org/show_bug.cgi?id=41570

        DumpRenderTree did only set the userStyleSheet at
        layoutTestController.setUserStyleSheetEnabled().

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setUserStyleSheetEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-07-03  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] support dumpChildFrameScrollPositions

        https://bugs.webkit.org/show_bug.cgi?id=41088

        Unskip:

        http/tests/navigation/anchor-subframeload.html
        http/tests/navigation/relativeanchor-frames.html

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpFrameScrollPosition):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::shouldDumpChildFrameScrollPositions):
        (LayoutTestController::dumpChildFrameScrollPositions):

2010-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Rename new scripts so that they don't make autocompleting run-webkit-tests annoying.

        * Scripts/debug-test-runner: Copied from Scripts/debug-webkittestrunner.
        * Scripts/debug-webkittestrunner: Removed.
        * Scripts/run-test-runner: Copied from Scripts/run-webkittestrunner.
        * Scripts/run-webkittestrunner: Removed.

2010-07-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        Some http tests fail on Windows with Cygwin 1.7
        https://bugs.webkit.org/show_bug.cgi?id=41537
        
        With Cygwin 1.7, the registry key at SOFTWARE\\Cygnus Solutions\\Cygwin\\mounts v2\\/
        doesn't exist anymore, because the mount points are stored in /etc/fstab. However, we
        just need root mount point, which is defined in SOFTWARE\\Cygwin\\setup.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (resolveCygwinPath): Fall back to SOFTWARE\\Cygwin\\setup if 
            SOFTWARE\\Cygnus Solutions\\Cygwin\\mounts v2\\/ doesn't work.

2010-06-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Separate DerivedSources per-project
        https://bugs.webkit.org/show_bug.cgi?id=41109

        The JavaScriptCore cppflags used to include the top-level DerivedSources directory
        allowing the tools to build as a side-effect. Now that the top-level directory
        is no longer in the list of JavaScriptCore includes, include it explicitly.

        * GNUmakefile.am:

2010-07-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make context menus show up in the right place in QTestBrowser

        Context menus were shown at scene-relative coordinates for
        QGraphicsWebView while QMenu expects them to be global. The
        change to the QWidget case was to get rid of the mapToGlobal.

        * QtTestBrowser/webview.cpp:

2010-07-01  Robert Hogan <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] dump frames in ascending alphabetical order of title

        https://bugs.webkit.org/show_bug.cgi?id=41261

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::dumpHistoryItem):

2010-07-01  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed. 

        Fix the GTK+ build after r62278.

        * Scripts/webkitdirs.pm: If the make arguments have already been specified,
        let them override the automatic CPU detection for autotools builds.

2010-07-01  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Fix the Windows build after r62278.

        * Scripts/num-cpus: Use FindBin to add the Scripts directory to the list of library directories.

2010-07-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] build-webkit does not detect the number of CPUs
        https://bugs.webkit.org/show_bug.cgi?id=41469

        Pass the appropriate -j<#> flag to make when building autotools builds.
        This causes make to spawn that many number of child processes for doing
        parallel builds.

        * Scripts/num-cpus: Use the newly abstracted numberOfCPUs to return the number
        of CPUs. This makes the script work across more platforms.
        * Scripts/webkitdirs.pm: Create a numberOfCPUs/determineNumberOfCPUs to determine the
        number of CPUs across several platforms. Use this new function to determine the appropriate
        arguments to pass to make for doing parallel builds with autotools build files.

2010-07-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Laszlo Gombos.

        [Qt][Symbian] Bumped up the maximum heap size to 96MB

        * QtTestBrowser/QtTestBrowser.pro: Removed explicit heap size declaration
        and use the one from WebKit.pri instead.

2010-07-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Promote webkit-patch land-safely to main help
        https://bugs.webkit.org/show_bug.cgi?id=41446

        I've been using this command a bunch and recommending it to folks.  We
        should show it in main help as it's past the experimental phase.

        * Scripts/webkitpy/tool/commands/upload.py:

2010-06-28  MORITA Hajime  <morrita@google.com>

        Reviewed by Shinichiro Hamaji.

        rebaseline-chromium-webkit-tests doesn't do diffs right with a Git checkout of WebKit
        https://bugs.webkit.org/show_bug.cgi?id=38775

        - Introduced SCM.show_head() and SCM.diff_for_file().
        - Replaced direct svn invocations with newly implement SCM methods.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-06-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Allow MiniBrowser to open local files
        https://bugs.webkit.org/show_bug.cgi?id=41104

        Wire up the openDocument: message with an NSOpenPanel, so we can open
        local files.
        
        Also change the xib so that the window remembers its size.
        
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate frontmostBrowserWindowController]):
        (-[BrowserAppDelegate openDocument:]):
        (-[BrowserAppDelegate openPanelDidEnd:returnCode:contextInfo:]):
        * MiniBrowser/mac/English.lproj/BrowserWindow.xib:

2010-06-30  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Anders Carlsson.

        Add debug-webkittestrunner and cleanup related scripts.

        * Scripts/debug-webkittestrunner: Added.
        * Scripts/run-webkittestrunner:
        * Scripts/webkitdirs.pm:

2010-06-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after recent changes to LayoutTestController.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::pageSizeAndMarginsInPixels):

2010-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41389
        Make WebKitTestRunner work with more than one test at a time.

        This converts WebKitTestRunner to a similar model as DumpRenderTree,
        where there is a single WKView and each test is run it, rather than
        the design I was using where each test got its own WKView.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didRecieveMessage):
        (WTR::InjectedBundle::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        (WTR::TestController::_didRecieveMessageFromInjectedBundle):
        (WTR::TestController::didRecieveMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::mainWebView):
        (WTR::TestController::pageNamespace):
        (WTR::TestController::context):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::~TestInvocation):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didRecieveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

2010-06-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian] Only 10 websites can be loaded consecutively when using QtWebkit 2.0
        https://bugs.webkit.org/show_bug.cgi?id=40446

        We quickly run out of memory on Symbian when loading web pages. This is
        caused by the default heap size, which is not suited for a web browser.

        This change bumps the max heap size to 32MB.

        * QtTestBrowser/QtTestBrowser.pro:

2010-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch land allow the user to continue even if the builders are red
        https://bugs.webkit.org/show_bug.cgi?id=41395

        I don't think it's good that we've been teaching people
        to always pass --ignore-builders.  At least land is now
        useable w/o --ignore-builders.

        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py:

2010-06-29  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] support dumpResourceResponseMIMETypes
        https://bugs.webkit.org/show_bug.cgi?id=41260

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpResourceResponseMIMETypes):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-06-29  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Resize scene when Qt DRT WebPage receives a geometry change request
        https://bugs.webkit.org/show_bug.cgi?id=41173

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::setViewGeometry):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:

2010-06-29  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Deal with postEvent in case of graphics based DRT
        https://bugs.webkit.org/show_bug.cgi?id=41174

        QGraphicsScene does not have a postEvent method, so make scene
        send the event, in case of graphics based DRT, and delete it after that.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::scheduleAsynchronousClick):
        (EventSender::replaySavedEvents):
        (EventSender::postEvent):
        * DumpRenderTree/qt/EventSenderQt.h:

2010-06-29  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make switchFocus() method works with QGraphicsWebView in Qt DRT
        https://bugs.webkit.org/show_bug.cgi?id=41172

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::switchFocus):

2010-06-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Make DRT more coherent with other ports to allow reusing more tests
        https://bugs.webkit.org/show_bug.cgi?id=40009

        Make sure "AXRole: ", "AXTitle: " and "AXDescription: " prefixes
        are used when returning those values, for coherency with other ports.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):

2010-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62106.
        http://trac.webkit.org/changeset/62106
        https://bugs.webkit.org/show_bug.cgi?id=41346

        "Broke editing tests" (Requested by xan_ on #webkit).

        * Scripts/old-run-webkit-tests:

2010-06-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        Ensure DRT loads GAIL (Gtk+ module), for a11y tests
        https://bugs.webkit.org/show_bug.cgi?id=38648

        Add the GTK_MODULES envvar (set to "gail") to the clean
        environment when running DRT for the Gtk+ port

        * Scripts/old-run-webkit-tests:

2010-06-28  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Switch test-html5-parser back to using runner.html.

        * Scripts/test-html5-parser:

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Restore webkit-runner.html for use with new tree builder
        https://bugs.webkit.org/show_bug.cgi?id=41317

        For now, we just want to run webkit-runner when we test-html5-parser.

        * Scripts/test-html5-parser:

2010-06-23  John Gregg  <johnnyg@google.com>

        Reviewed by Kent Tamura.

        add ENABLE_DIRECTORY_UPLOAD build support
        https://bugs.webkit.org/show_bug.cgi?id=41100

        * Scripts/build-webkit:

2010-06-28  Gustavo Noronha Silva  <gns@gnome.org>

        Rubber-stamped by Xan Lopez.

        Update webkitdirs's knowledge of our library's name.

        * Scripts/webkitdirs.pm:

2010-06-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41299
        Build up WebKitTestRunner output in the InjectedBundle

        Simplify WebKitTestRunner by building up the output in the InjectedBundle
        and sending it over postMessage when done, instead of using the async
        WKPageRenderTreeExternalRepresentation.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):
        (WTR::InjectedBundle::didRecieveMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::os):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::WKStringToUTF8):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::WKStringToUTF8):
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::initializeMainWebView):
        (WTR::TestInvocation::_didRecieveMessageFromInjectedBundle):
        (WTR::TestInvocation::didRecieveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

2010-06-28  Robert Hogan  <robert@webkit.org>

        Unreviewed, rolling out r62021.
        http://trac.webkit.org/changeset/62021
        https://bugs.webkit.org/show_bug.cgi?id=41261

        Broke http/navigation tests among other

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpFramesAsText):

2010-06-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add run-webkittestrunner to run WebKitTestRunner with the appropriate
        environment.

        * Scripts/run-webkittestrunner: Added.
        * Scripts/webkitdirs.pm:

2010-06-28  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] dump frames in ascending alphabetical order of title

        https://bugs.webkit.org/show_bug.cgi?id=41261

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpFramesAsText):

2010-06-28  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] dump bf history of child windows

        https://bugs.webkit.org/show_bug.cgi?id=41266

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpBackForwardList):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:

2010-06-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41288
        WebKit2: Add frame API for InjectedBundle code

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindowForFrame):

2010-06-28  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser does not have a "Load" button ; therefore, unable to load pages on touch only symbian devices (portrait mode).
        https://bugs.webkit.org/show_bug.cgi?id=38597

        Fix behavior so reload button really acts as a load and a reload button.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::changeLocation):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Does not compile with -DGSEAL_ENABLE
        https://bugs.webkit.org/show_bug.cgi?id=37851

        Fix build with GSEAL enabled.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gtk_widget_get_window):
        (prepareMouseButtonEvent):
        (mouseMoveToCallback):
        (mouseWheelToCallback):
        (keyDownCallback):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add support for GTK+3
        https://bugs.webkit.org/show_bug.cgi?id=41253

        Adapt build system for 3.x support.

        * GNUmakefile.am:

2010-06-10  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Simon Hausmann.

        [QT][S60] build-webkit scripts picks wrong make spec for windows build
        https://bugs.webkit.org/show_bug.cgi?id=41198

        Instead of checking for existence of %EPOCROOT% on windows, mandatory use of --symbian flag for symbian builds. 

        * Scripts/webkitdirs.pm:
        (determineIsSymbian): remove check for %EPOCROOT% as one can build for windows port of QT as well

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to test the new HTML5 TreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41276

        Adam was concerned that someone might make their port
        depend on this setting (I guess we had some trouble with that
        with the HTML5Parser setting), so I littered the code with warnings.

        test-html5-parser now tests this code path.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (initializeGlobalsFromCommandLineOptions):
        * Scripts/test-html5-parser:

2010-06-27  MORITA Hajime  <morrita@google.com>

        Unreviewed. 
        
        Some never-called @staticmethods touched self. 
        Fixed it to replace these self with a class.

        * Scripts/webkitpy/common/checkout/scm.py:

2010-06-27  MORITA Hajime  <morrita@google.com>

        Unreviewed.
        
        Fixed exception raising syntax that is pointed out at
        https://bugs.webkit.org/show_bug.cgi?id=41153

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py: 
          Removed a bad line that I accidentally checked-in at last revision.

2010-06-24  MORITA Hajime  <morrita@google.com>

        Reviewed by Eric Seidel.

        rebaseline-chromium-webkit-tests should add or remove files to local git repository
        https://bugs.webkit.org/show_bug.cgi?id=41153

        - Added SCM.add() and SCM.remove()
        - Replaced "svn add" and "svn remove"
          rebaseline_chromium_webkit_tests.py: in with SCM method equivalents.
        - add "-U" and "-q" options to rebaseline_chromium_webkit_tests.py
          for debugging purpose.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-06-25  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Improve default value handling for page format properties.
        https://bugs.webkit.org/show_bug.cgi?id=41150

        * DumpRenderTree/LayoutTestController.cpp:
        (parsePageNumber):
        (parsePageNumberSizeMarings):
        (pageSizeAndMarginsInPixelsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pageSizeAndMarginsInPixels):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pageSizeAndMarginsInPixels):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pageSizeAndMarginsInPixels):

2010-06-21  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT Support for setCustomPolicyDelegate

        https://bugs.webkit.org/show_bug.cgi?id=39564

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-06-26  Robert Hogan  <robert@webkit.org>

        Unreviewed, Qt build fix following http://trac.webkit.org/changeset/61879
        
        Remove qwebscriptworld.h from LayoutTestControllerQt.cpp - it is no longer
        exported.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:

2010-06-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add a build-webkit option for enabling Web Timing support.
        https://bugs.webkit.org/show_bug.cgi?id=38924

        * Scripts/build-webkit:

2010-06-25  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser does not have a "Load" button ; therefore, unable to load pages on touch only symbian devices (portrait mode).
        https://bugs.webkit.org/show_bug.cgi?id=38597

        Make the reload button act as a load button as well.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):
        (MainWindow::changeLocation):

2010-06-25  Prasad Tammana  <prasadt@chromium.org>

        Reviewed by Dmitry Titov.

        Add empty abortModal() method to all platforms.
        https://bugs.webkit.org/show_bug.cgi?id=40864

        Add an empty abortModal() stub to LayoutTestController on all platforms to get rid of platform specific #ifs in
        platform independent LayoutTestController code.  Without this change, layout tests using LayoutTestController tests
        that use abortModal will become mac specific which is not desirable.

        * DumpRenderTree/LayoutTestController.cpp:
        (abortModalCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::abortModal):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::abortModal):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::abortModal):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::abortModal):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::abortModal):

2010-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41226
        Flesh out injected bundle code for WebKitTestRunner and add basic LayoutTestController.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: Added.
        (WTR::InjectedBundle::shared):
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::_didCreatePage):
        (WTR::InjectedBundle::_willDestroyPage):
        (WTR::InjectedBundle::_didRecieveMessage):
        (WTR::InjectedBundle::initialize):
        (WTR::InjectedBundle::didCreatePage):
        (WTR::InjectedBundle::willDestroyPage):
        (WTR::InjectedBundle::didRecieveMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Added.
        (WTR::InjectedBundle::layoutTestController):
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        (WKBundleInitialize):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: Added.
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::~InjectedBundlePage):
        (WTR::InjectedBundlePage::_didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::_didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::_didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::_didCommitLoadForFrame):
        (WTR::InjectedBundlePage::_didFinishLoadForFrame):
        (WTR::InjectedBundlePage::_didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::_didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::_didClearWindowForFrame):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didCommitLoadForFrame):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Added.
        (WTR::InjectedBundlePage::page):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: Added.
        (WTR::LayoutTestController::create):
        (WTR::LayoutTestController::LayoutTestController):
        (WTR::LayoutTestController::~LayoutTestController):
        (WTR::dumpAsTextCallback):
        (WTR::layoutTestControllerObjectFinalize):
        (WTR::LayoutTestController::makeWindowObject):
        (WTR::LayoutTestController::getJSClass):
        (WTR::LayoutTestController::staticFunctions):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Added.
        (WTR::LayoutTestController::dumpAsText):
        (WTR::LayoutTestController::setDumpAsText):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Make WebKitTestRunner really work with run-webkit-tests. 

        - Add Forwarding headers to allow some cleanup.

        * WebKitTestRunner/ForwardingHeaders: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/ASCIICType.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Assertions.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Atomics.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/FastMalloc.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/HashMap.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/HashSet.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/HashTraits.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Locker.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/MainThread.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/MathExtras.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/OwnPtrCommon.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/PassOwnPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/PassRefPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Platform.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/RefCounted.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/RefPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/RetainPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/StringExtras.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/ThreadSafeShared.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Threading.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/ThreadingPrimitives.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Vector.h: Added.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dump): Dump the right number of #EOFs.
        * WebKitTestRunner/TestInvocation.h:

2010-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add support for WebKitTestRunner to old-run-webkit-tests

        - Also adds a script to build WebKitTestRunner for old-run-webkit-tests to use.

        * Scripts/build-webkittestrunner: Added.
        * Scripts/old-run-webkit-tests:

2010-06-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Incremental build failed on Chromium ews
        https://bugs.webkit.org/show_bug.cgi?id=41011

        The division of responsibility between update-webkit --chromium and
        build-webkit --chromium is slightly unclear.  In this patch, we make
        build-webkit --chromium also update DEPS and re-run GYP in case the
        developer has changed either since they updated.

        This change is also helpful for the EWS, which wants to update DEPS and
        re-run GYP after applying patches, but the EWS doesn't want to run
        update-webkit --chromium because it has a dirty working copy.

        * Scripts/webkitdirs.pm:

2010-06-25  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Support evaluateScriptInIsolatedWorld()

        https://bugs.webkit.org/show_bug.cgi?id=40079

        Remove evaluateScriptInIsolatedWorld() from QtWebKit API.
        Remove QWebScriptWorld from exported headers.
        Confine support to DumpRenderTreeSupportQt so that the tests can pass.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-06-25  Anders Carlsson  <andersca@apple.com>

        Revert accidental part and add a newline.

        * MiniBrowser/mac/AppDelegate.m:
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2010-06-25  Anders Carlsson  <andersca@apple.com>

        Rubber-stamped by Dan Bernstein.

        Add a LOG macro that expands to a no-op by default.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/AppDelegate.m:
        (_didRecieveMessageFromInjectedBundle):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowShouldClose:]):
        (_didStartProvisionalLoadForFrame):
        (_didReceiveServerRedirectForProvisionalLoadForFrame):
        (_didFailProvisionalLoadWithErrorForFrame):
        (_didCommitLoadForFrame):
        (_didFinishLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (_didReceiveTitleForFrame):
        (_didFirstLayoutForFrame):
        (_didFirstVisuallyNonEmptyLayoutForFrame):
        (_didBecomeUnresponsive):
        (_didBecomeResponsive):
        (_decidePolicyForNavigationAction):
        (_decidePolicyForNewWindowAction):
        (_createNewPage):
        (_showPage):
        (_closePage):
        (_didNavigateWithNavigationData):
        (_didPerformClientRedirect):
        (_didPerformServerRedirect):
        (_didUpdateHistoryTitle):
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindowForFrame):
        (_didCreatePage):
        (_willDestroyPage):
        (_didRecieveMessage):

2010-06-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue is taking too long to land patches because of red trees
        https://bugs.webkit.org/show_bug.cgi?id=41194

        Instead of checking for the tree to be green, we'll just spin hot
        trying to land patches.  This is probably too extreme in ignoring the
        tree, but I think we should try it for a while to see if we have
        trouble.  That will help us find the right balance.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-06-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Clean up the use of gdk_window_get_root_coords in EventSender
        https://bugs.webkit.org/show_bug.cgi?id=40843

        Define the version for old GTK+s in a way that is forward-compatible
        and clean up the logic a bit.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gdk_window_get_root_coords): Renamed and cleaned up.
        (prepareMouseButtonEvent): Remove #ifdefs.
        (mouseMoveToCallback): Remove #ifdefs.

2010-06-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Fix NewRunWebKitTests to work on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=41180

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added "perl" as first arguments,
            because Windows fails to understand what we're asking of it.

2010-06-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] The url passed to the WebView during layout tests is invalid
        https://bugs.webkit.org/show_bug.cgi?id=40832

        Set the test URL to the full real file URL and do a small cleanup.
        Previously a URL like file://relative/path/to/test.html was passed
        to the WebView. This malformed file URL would be returned by
        webkit_web_view_get_url and webkit_web_frame_get_url.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (shouldLogFrameLoadDelegates): Change to take a const string& as the argument.
        (shouldOpenWebInspector): Change to take a const string& as the argument.
        (shouldEnableDeveloperExtras): Change to take a const string& as the argument.
        (runTest): Pass the full file:// URL to the view. Remove the superfluous url variable.

2010-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix WebKitTestRunner Makefile typos.

        * WebKitTestRunner/Makefile:

2010-06-24  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Carlson.

        DumpRenderTree part of testing <rdar://problem/8093680> "Paste and Match Style" should fire paste events
        https://bugs.webkit.org/show_bug.cgi?id=41085

        * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebViewToConsistentStateBeforeTesting):
        Clear the general pasteboard in between tests so Cut,Copy, and setData on ClipboardData won't have lasting effects.

2010-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41086
        Add new WebKitTestRunner project (ie. DRT for WebKit2).

        - Mac only.
        - run-webkit-tests has not been modified to call it yet.
        - Only dumps the render tree at this time. 

        * WebKitTestRunner: Added.
        * WebKitTestRunner/Configurations: Added.
        * WebKitTestRunner/Configurations/Base.xcconfig: Added.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig: Added.
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig: Added.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig: Added.
        * WebKitTestRunner/InjectedBundle: Added.
        * WebKitTestRunner/InjectedBundle-Info.plist: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp: Added.
        (_didStartProvisionalLoadForFrame):
        (_didReceiveServerRedirectForProvisionalLoadForFrame):
        (_didFailProvisionalLoadWithErrorForFrame):
        (_didCommitLoadForFrame):
        (_didFinishLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (_didReceiveTitleForFrame):
        (_didClearWindow):
        (_didCreatePage):
        (_willDestroyPage):
        (_didRecieveMessage):
        (WKBundleInitialize):
        * WebKitTestRunner/Makefile: Added.
        * WebKitTestRunner/PlatformWebView.h: Added.
        (WTR::PlatformWebView::platformView):
        * WebKitTestRunner/TestController.cpp: Added.
        (WTR::TestController::shared):
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        (WTR::TestController::runTestingServerLoop):
        (WTR::TestController::run):
        * WebKitTestRunner/TestController.h: Added.
        (WTR::TestController::verbose):
        (WTR::TestController::injectedBundlePath):
        * WebKitTestRunner/TestInvocation.cpp: Added.
        (WTR::createWKURL):
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::~TestInvocation):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump):
        (WTR::TestInvocation::initializeMainWebView):
        (WTR::TestInvocation::didStartProvisionalLoadForFrame):
        (WTR::TestInvocation::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::TestInvocation::didFailProvisionalLoadWithErrorForFrame):
        (WTR::TestInvocation::didCommitLoadForFrame):
        (WTR::TestInvocation::didFinishLoadForFrame):
        (WTR::TestInvocation::didFailLoadForFrame):
        (WTR::TestInvocation::renderTreeExternalRepresentationFunction):
        (WTR::TestInvocation::renderTreeExternalRepresentationDisposeFunction):
        * WebKitTestRunner/TestInvocation.h: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Added.
        * WebKitTestRunner/WebKitTestRunnerPrefix.h: Added.
        * WebKitTestRunner/mac: Added.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm: Added.
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::page):
        * WebKitTestRunner/mac/TestInvocationMac.mm: Added.
        (WTR::TestInvocation::runUntil):
        * WebKitTestRunner/mac/main.mm: Added.
        (main):

2010-06-24  Luiz Agostini  <luiz.agostini@openbossa.org>

        Unreviewed. Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-06-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, adding new LayoutTestController methods and enabling SVG_FOREIGN_OBJECT.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageAreaRectInPixels):
        (LayoutTestController::preferredPageSizeInPixels):
        * wx/build/settings.py:

2010-06-23  James Robinson  <jamesr@chromium.org>

        Unreviewed.  Add my IRC handle to committers.py so the sheriffbot can yell at me.

        * Scripts/webkitpy/common/config/committers.py:

2010-06-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Correct Chromium test configuration
        https://bugs.webkit.org/show_bug.cgi?id=41057

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
         - Add "--use-drt" option for NRWT. It is required for Chromium and
           ignored for other platforms.
         - Skip JSC test on Chromium
        * BuildSlaveSupport/test-result-archive:
          Add Chromium support.

2010-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=41073
        WebKit2: Flesh out more of the InjectedBundle client API

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didStartProvisionalLoadForFrame):
        (_didReceiveServerRedirectForProvisionalLoadForFrame):
        (_didFailProvisionalLoadWithErrorForFrame):
        (_didCommitLoadForFrame):
        (_didFinishLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (_didReceiveTitleForFrame):
        (_didClearWindowForFrame):
        (_didCreatePage):
        (_willDestroyPage):
        (WKBundleInitialize):

2010-06-23  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement page format data programming interface.
        Add methods for testing.
        https://bugs.webkit.org/show_bug.cgi?id=37538

        * DumpRenderTree/LayoutTestController.cpp:
        (parsePageNumber):
        (isPageBoxVisibleCallback):
        (pageAreaRectInPixelsCallback):
        (preferredPageSizeInPixelsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageAreaRectInPixels):
        (LayoutTestController::preferredPageSizeInPixels):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageAreaRectInPixels):
        (LayoutTestController::preferredPageSizeInPixels):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageAreaRectInPixels):
        (LayoutTestController::preferredPageSizeInPixels):

2010-06-23  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Shinichiro Hamaji.

        Follow proper convention for if/switch/while as I've discovered
        them to be through my review processes.
        https://bugs.webkit.org/show_bug.cgi?id=40723

        Modified test so that if( foo ) is not allowed as it appears not
        to be the accepted convention.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Run clean-header-guards to fix some header guards
        https://bugs.webkit.org/show_bug.cgi?id=41044

        No functional changes, thus no tests.

        This entire change was generated by running
        clean-header-guards, and then reverting changes
        to files which shouldn't be changed.  Those which
        are left all should be updated.

        Some of these changes are just fixing 755 permissions
        to be 644, since it seems various files have the wrong
        execute bit which don't need it.  clean-header-guards
        made those (welcome) permission fixes unintentionally.

        * DumpRenderTree/chromium/WebThemeControlDRT.h:
        * DumpRenderTree/chromium/WebThemeEngineDRT.h:
        * QtTestBrowser/fpstimer.h:

2010-06-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename HTMLDocumentParser to LegacyHTMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=41043

        Update the hash.

        * Scripts/do-webcore-rename:

2010-06-22  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Shinichiro Hamaji.

        Follow proper convention for variable declaration spacing.
        https://bugs.webkit.org/show_bug.cgi?id=40724

        Modified test so that 'int   a;' is not allowed.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-06-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Add Tony Gentilcore now that he's a committer.

        * Scripts/webkitpy/common/config/committers.py:

2010-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove Gtk 64-Release bot from core since it's broken
        https://bugs.webkit.org/show_bug.cgi?id=41022

        This bot alone has been responsible for more than 72 hours of
        commit-queue blockage in the last week.  The bot is broken -- keeps
        losing its display server or similar.  Until the Gtk folks can fix the
        bot, we need to remove it from core.  The WebKit community can't keep
        it green as is.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:

2010-06-21  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Fix the Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=40972

        * DumpRenderTree/win/ImageDiff.vcproj:

2010-06-21  Prasad Tammana  <prasadt@chromium.org>

        Reviewed by Darin Adler, Dmitry Titov.

        DumpRenderTree should allow tests with modal dialogs
        https://bugs.webkit.org/show_bug.cgi?id=35350

        * DumpRenderTree/LayoutTestController.cpp:
        (abortModalCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::abortModal):
        Add abortModal method to LayoutTestController and make it available from script.

        * DumpRenderTree/mac/UIDelegate.mm: Add support for showModalDialog.
        (-[UIDelegate modalWindowWillClose:]): Observer for NSWindowWillCloseNotifications to call
        abortModal from when modal window closes.
        (-[UIDelegate webViewRunModal:]): Delegate method for showModalDialog to run the modal loop.

2010-06-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.
        
        Rename DrawingAreaProxyUpdateChunk to ChunkedUpdateDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=40948
        
        Have the script look in WebKit2.

        * Scripts/do-webcore-rename:

2010-06-21  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Unskip plugins/get-url-that-the-resource-load-delegate-will-disallow.html

        It's a Mac-specific test so just add the required LayoutTestController
        function as a no-op to avoid failing. Similar approach adopted by other
        ports.

        https://bugs.webkit.org/show_bug.cgi?id=33344

        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::addDisallowedURL):

2010-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=40940
        Add message passing support to the WebKit2 API.

        - Add some test messages.

        * MiniBrowser/mac/AppDelegate.m:
        (_didRecieveMessageFromInjectedBundle):
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindow):
        (_didCreatePage):
        (_didRecieveMessage):
        (WKBundleInitialize):

2010-06-21  Drew Wilson  <atwilson@chromium.org>

        Unreviewed.

        Rolling back 61551 and 61555 due to test failures.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/mac/UIDelegate.mm:

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make DumpRenderTree build with clang++

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        (-[LocalPasteboard setPropertyList:forType:]):
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow keyDown:]):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):
        (LayoutTestController::isCommandEnabled):

2010-06-21  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Speech Input Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=40878

        * Scripts/build-webkit:

2010-06-21  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Initialization for http/tests/loading/
        https://bugs.webkit.org/show_bug.cgi?id=40902

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):

2010-06-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Unreviewed.

        Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-06-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add --allow-external-pages option
        https://bugs.webkit.org/show_bug.cgi?id=40762

        Add --allow-external-pages introduced by Chromium r45403.
        http://src.chromium.org/viewvc/chrome?view=rev&revision=45403

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::allowExternalPages):
        (TestShell::setAllowExternalPages):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willSendRequest):

2010-06-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Adam Barth.

        Sheriffbot: Should allow "r" in SVN_REVISION
        https://bugs.webkit.org/show_bug.cgi?id=40889

        * Scripts/webkitpy/tool/bot/irc_command.py: remove a leading "r" from SVN_REVISION if it exists
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: test an SVN_REVISION with a leading r.

2010-06-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Dimitri Glazkov.

        Python Tests Fail after r61508
        https://bugs.webkit.org/show_bug.cgi?id=40891

        Test's regex list needed to be updated to match the new
        regex list in the source code. Added new bots to the
        example_buildbots list.

        Regex list fixed in r61512. Updated bot list.

        * Scripts/webkitpy/common/net/buildbot_unittest.py:

2010-06-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Tweak test regexp list to match the change in http://trac.webkit.org/changeset/61508.

        * Scripts/webkitpy/common/net/buildbot_unittest.py: Tweaked regexp.

2010-06-19  Justin Schuh  <jschuh@chromium.org>

        Unreviewed.

        Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-06-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=40882
        Add ability to have a WebProcess per WebContext.

        Move to use new shared contexts API.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate getCurrentPageNamespace]):
        (-[BrowserAppDelegate validateMenuItem:]):
        (-[BrowserAppDelegate _setProcessModel:]):
        (-[BrowserAppDelegate setSharedProcessProcessModel:]):
        (-[BrowserAppDelegate setSharedThreadProcessModel:]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2010-06-02  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        [Qt] Support evaluateScriptInIsolatedWorld()

        https://bugs.webkit.org/show_bug.cgi?id=40079

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-06-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add three more non-core Chromium builders to start testing DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=40335

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added 3 builders.

2010-06-18  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Plumbing for top-level frame names
        https://bugs.webkit.org/show_bug.cgi?id=40430

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):
        Changed obsolete call to clearName() to use setName(WebString()) instead.

2010-06-18  Sam Weinig  <weinig@apple.com>

        Rolling http://trac.webkit.org/changeset/61297 back in.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/WebBundle/WebBundleMain.c: Removed.
        * MiniBrowser/mac/WebBundle/WebBundleMain.m: Added.
        (_didClearWindow):
        (_didCreatePage):
        (WKBundleInitialize):

2010-06-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=40803
        TestNetscapePlugin has an incorrect implementation of "property" property

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: (pluginGetProperty): Don't
        pass a static string back, it's going to be released by NPAPI implementation.

2010-06-18  Leandro Pereira  <leandro@profusion.mobi>

        Unreviewed.

        Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2010-06-17  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] cleanup redundant DEPS value and remove buildbot cleanup code
        https://bugs.webkit.org/show_bug.cgi?id=40615

        * Scripts/update-webkit-chromium: remove directory removal of third_party in old checkouts

2010-06-17  Ada Chan  <adachan@apple.com>

        Rolling out http://trac.webkit.org/changeset/61297 due to build errors.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/WebBundle/WebBundleMain.c: Copied from MiniBrowser/mac/WebBundle/WebBundleMain.c.
        * MiniBrowser/mac/WebBundle/WebBundleMain.m: Removed.

2010-06-17  Darin Adler  <darin@apple.com>

        One more try at fix for Chromium build.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell): Use set again instead of =.

2010-06-17  Darin Adler  <darin@apple.com>

        Fix Chromium build.

        I didn't realize that neither Chromium nor Qt share the DumpRenderTree
        code with all the other platforms! Wow, that should be fixed at some point.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell): Changed back to using "new".
        * DumpRenderTree/chromium/TestShell.h: Changed back to OwnPtr.

2010-06-17  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix.

        LayoutTestController in the Qt DRT is not using refs :)

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2010-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Use adoptRef and create functions in more code paths
        https://bugs.webkit.org/show_bug.cgi?id=40760

        * DumpRenderTree/DumpRenderTree.h: Change gLayoutTestController to a RefPtr.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::create): Added.
        * DumpRenderTree/LayoutTestController.h: Declare the create function.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell): Use create instead of new.
        * DumpRenderTree/chromium/TestShell.h: Use RefPtr instead of OwnPtr.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest): Use RefPtr and create instead of OwnPtr and new.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest): Use RefPtr and create instead of OwnPtr and new.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Use create and releaseRef
        instead of new.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Use RefPtr and create instead of OwnPtr and new.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (runTest): Use RefPtr and create instead of OwnPtr and new.
        (MyApp::OnInit): Removed unneeded code to delete the layout
        test controller. This is done during each test.

2010-06-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [DRT/Chromium] Fix a bug of Windows pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=40763

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestShellPrinter::handleImage):

2010-06-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [DRT/Chromium] Fix crash on Mac Release
        https://bugs.webkit.org/show_bug.cgi?id=40759

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintRect): We should not use m_canvas directly because
          it is created lazily in canvas().

2010-06-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after new method addition.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::pageProperty):

2010-06-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Set current working directory for each of tests
        https://bugs.webkit.org/show_bug.cgi?id=40668

        This change fixes tests with eventSender.beginDragWithFiles().

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest):

2010-06-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] r60803 broke media/controls-drag-timebar.html
        https://bugs.webkit.org/show_bug.cgi?id=40269

        Only queue events while the mouse button is down, if drag mode is enabled. Some
        tests may disable drag mode, to prevent the queuing of events in this situation.

        * DumpRenderTree/gtk/EventSender.cpp:
        (sendOrQueueEvent): Only queue events here if dragMode is true.

2010-06-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Remove the abuse of GDK_CURRENT_TIME in the DRT
        https://bugs.webkit.org/show_bug.cgi?id=40600

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Remove logic adding an offset to GDK_CURRENT_TIME.

2010-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add a hidden land-cowboy command to webkit-patch to help land quick
        build fixes.

        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2010-06-16  Adam Roben  <aroben@apple.com>

        Convert console messages to UTF-8 before printing them

        Speculative fix for <http://webkit.org/b/40731> REGRESSION (r61234):
        http/tests/security/xssAuditor/embed-tag-null-char.html and
        http/tests/security/xssAuditor/object-embed-tag-null-char.html fail on
        Windows. (I can't test the fix because Apache is crashing on my
        computer.)

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (toUTF8): Extracted the code into an overload that takes a wide string
        and a length, then added an overload that takes a wstring.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Declare the new toUTF8
        overload.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole): Use toUTF8 to convert to
        UTF-8 instead of letting printf convert to the current code page.

2010-06-16  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] Plumbing for top-level frame names
        https://bugs.webkit.org/show_bug.cgi?id=40430

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):
        Migrate to new createView() API.
        * DumpRenderTree/chromium/WebViewHost.h:
        Remove obsolete createView() methods, add new createView() API that takes a frameName parameter.

2010-06-16  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Scroll wheel event support to graphics based DRT
        https://bugs.webkit.org/show_bug.cgi?id=40577

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::continuousMouseScrollBy):
        (EventSender::createGraphicsSceneWheelEvent):
        * DumpRenderTree/qt/EventSenderQt.h:

2010-06-16  Adam Roben  <aroben@apple.com>

        Remove a stray newline from the Windows version of TestNetscapePlugin

        Reviewed by Alexey Proskuryakov.

        Fixes <http://webkit.org/b/40728>
        plugins/geturlnotify-during-document-teardown.html fails on Windows

        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_Destroy): Removed extra newline that the Mac version doesn't
        have.

2010-06-16  Adam Roben  <aroben@apple.com>

        Respect LayoutTestController::isPrinting on Windows

        This gets some printing tests closer to passing (like
        printing/page-rule-in-media-query.html).

        Fixes <http://webkit.org/b/40727>.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump): Pass LayoutTestController::isPrinting to
        IWebFramePrivate::renderTreeAsExternalRepresentation.

2010-06-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Enable HTML5 lexer
        https://bugs.webkit.org/show_bug.cgi?id=40650

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):

2010-06-10  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement render style selection for pages to support CSS3 Paged Media.
        https://bugs.webkit.org/show_bug.cgi?id=35961

        * DumpRenderTree/LayoutTestController.cpp:
        (parsePagePropertyParameters):
        (pagePropertyCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pageProperty):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pageProperty):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pageProperty):

2010-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=40630
        WebKit2: Add mechanism to inject code into the WebProcess on startup

        Add initial InjectedBundle support.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/WebBundle-Info.plist: Added.
        Add test InjectedBundle to the project.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        Get the path to the WebBundle from the the main bundle and pass it to the new
        WKContextCreateWithInjectedBundlePath function.

        * MiniBrowser/mac/BrowserWindowController.m:
        (_didChangeProgress):
        Fix the build.  This has been broken for a while.

        * MiniBrowser/mac/WebBundle: Added.
        * MiniBrowser/mac/WebBundle/WebBundleMain.c: Added.
        (_didCreatePage):
        (WKBundleInitialize):
        Add really basic InjectedBundle.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        Switch from WKContextCreateWithProcessModel to WKContextCreate and remove commented out code.

2010-06-15  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Adding myself to the reviewers list.
        https://bugs.webkit.org/show_bug.cgi?id=40693

        * Scripts/webkitpy/common/config/committers.py:

2010-06-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Switch to using GIO methods instead of realpath in GtkLauncher to determine
        the file URI. This should remove warnings about realpath being undefined
        when compiling with '-ansi'.

        * GtkLauncher/main.c:
        (filenameToURL): Use GIO instead of realpath to determine file URI.

2010-06-15  Adam Roben  <aroben@apple.com>

        Remove the redundant set-apple-windows-environment-variables script

        Apparently update-webkit does this for you these days.

        Rubber-stamped by Steve Falkenburg.

        * Scripts/set-apple-windows-environment-variables: Removed.

2010-06-14  Adam Roben  <aroben@apple.com>

        Add a script to set the WebKitOutputDir and WebKitLibrariesDir
        environment variables

        Fixes <http://webkit.org/b/40595>.

        Reviewed by Steve Falkenburg.

        * Scripts/set-apple-windows-environment-variables: Added.
        (to_windows_path): Passes the passed-in path through cygpath to
        generate a Windows-style path.
        (main): Sets the WebKitOutputDir and WebKitLibrariesDir environment
        variables to their defaults, if they aren't already set.

2010-06-14  Adam Roben  <aroben@apple.com>

        Speed up run-safari/debug-safari on Windows

        Fixes <http://webkit.org/b/40586>.

        Reviewed by Steve Falkenburg.

        * Scripts/webkitdirs.pm:
        (runSafari): When debugging, set up the environment to run Safari
        using the built WebKit.dll, then use "devenv /debugexe Safari.exe" to
        actually launch the debugger. When not debugging, just run WebKit.exe
        and it will do the rest for us.

2010-06-15  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT EventSender support to graphics context events
        https://bugs.webkit.org/show_bug.cgi?id=40324

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::contextClick):

2010-06-14  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] checkout chromium third_party directly
        https://bugs.webkit.org/show_bug.cgi?id=40556

        * Scripts/update-webkit-chromium: some migration code for the bots

2010-06-14  Alexey Proskuryakov  <ap@apple.com>

        Chromium build fix.

        * DumpRenderTree/chromium/EventSender.cpp: (EventSender::keyDown): Chromium uses differently
        named constants for Windows virtual key codes, replacing VK_DELETE with VKEY_DELETE.

2010-06-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=40529
        eventSender.keyDown("delete") incorrectly sends a backspace on some platforms

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]): We were sending a broken
        event for "delete" - it had virtual key code from forward delete, and text from backspace.
        Fixed "delete" to mean forward delete.

        * DumpRenderTree/chromium/EventSender.cpp: (EventSender::keyDown):
        * DumpRenderTree/gtk/EventSender.cpp: (keyDownCallback):
        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback):
        Mac DRT confusion has propagated to other platforms, fixing those.

2010-06-14  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Small GtkLauncher build fix for some systems.

        * GtkLauncher/main.c: Add <limit.h> include.

2010-06-14  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] navigator.geolocation support for Qt port
        https://bugs.webkit.org/show_bug.cgi?id=39724

        Implementation for geolocation cases to DumpRenderTreeQt

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::allowGeolocationRequest):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setMockGeolocationPosition):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::isGeolocationPermissionSet):
        (LayoutTestController::geolocationPermission):

2010-06-13  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Darin Adler.

        Outside of Xcode (make or WebKitTools/Scripts), there doesn't seem to
        be a way of overwriting the Xcode system path.  Making
        $WEBKITOUTPUTDIR take precedence over the system default would make
        this possible.

        * Scripts/webkitdirs.pm:

2010-06-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: link won't return linked element if URL contains #
        https://bugs.webkit.org/show_bug.cgi?id=40192

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (linkedUIElementAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::linkedUIElementAtIndex):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::linkedUIElementAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::linkedUIElementAtIndex):

2010-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        webkit-patch should add a bug URL to ChangeLogs if they don't have one yet
        https://bugs.webkit.org/show_bug.cgi?id=39550

        This can cause an extra request to bugs.webkit.org durig upload, but it
        shouldn't be too bad.  Also, this won't work if you remove the
        boilerplate created by prepare-ChangeLog.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py: Added.

2010-06-08  Robert Hogan  <robert@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] Add support for callShouldCloseOnWebView() to DRT
        https://bugs.webkit.org/show_bug.cgi?id=40330

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::callShouldCloseOnWebView):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::setCallCloseOnWebViews):

2010-06-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Daniel Bates.

        do-webcore-rename should have a --verbose option
        https://bugs.webkit.org/show_bug.cgi?id=40497

        * Scripts/do-webcore-rename:
         - Unified how we handle skipping files/directories
           this will allow us to "black list" certain files and
           directories when performing renames.
         - Made do-webcore-rename log what it's skipping when passed --verbose.

2010-06-12  Darin Adler  <darin@apple.com>

        * Scripts/run-bindings-tests: Fixed a typo in a message.

2010-06-12  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] new-run-webkit-tests --use-drt should work with Chromium checkout
        https://bugs.webkit.org/show_bug.cgi?id=40402

        _build_path() of each Chromium port check existence of build path
        of Chromium checkout first, then check existence of build path of
        WebKit-only checkout.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2010-06-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Back-forward list dumping is incorrect

        https://bugs.webkit.org/show_bug.cgi?id=36392

        Support dumping child history items in DRT.

        Unskip:

        fast/loader/frame-src-change-added-to-history.html
        fast/loader/frame-src-change-not-added-to-history.html
        fast/loader/frame-location-change-not-added-to-history.html

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::dumpHistoryItem):

2010-06-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        upload all patches that lack in-rietveld to rietveld
        https://bugs.webkit.org/show_bug.cgi?id=40444

        If it's a patch, then we'll try to upload it as long as it
        doesn't have in-rietveld set. No longer set in-rietveld? since
        it's not needed.

        * Scripts/webkitpy/common/net/bugzilla.py:

2010-06-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Fisher.

        Fix rietveld upload when message length > 100 characters
        https://bugs.webkit.org/show_bug.cgi?id=40457

        * Scripts/webkitpy/common/net/rietveld.py:

2010-06-11  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] There should be a way to enable popups in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=40427

        * QtTestBrowser/main.cpp:
        (LauncherWindow::toggleJavascriptCanOpenWindows):
        (LauncherWindow::createChrome):

2010-06-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Make SheriffBot more chatty
        https://bugs.webkit.org/show_bug.cgi?id=40463

        People seem to like to talk to SheriffBot, so let's make him chat back.

        * Scripts/webkitpy/thirdparty/__init__.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py: Added.
        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2010-06-10  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Fix the Windows buildbot when WebKitAuxiliaryLibs.zip cannot be found on our server.
        
        Robustify update-webkit-auxiliary-libs to be able to handle the case when WebKitAuxiliaryLibs.zip doesn't exist,
        and allow the script to fall back to an existing file, only failing if there is no fallback file. Also switch to checking
        WEXITSTATUS on $result instead of just comparing $result to 0.

        * Scripts/update-webkit-auxiliary-libs:

2010-06-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Alexey Proskuryakov.

        don't use Exception.message as it's deprecated in python 2.6+
        https://bugs.webkit.org/show_bug.cgi?id=40449

        * Scripts/webkitpy/tool/commands/queues.py:

2010-06-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        fix handle_script_error in rietveld upload queue and add testing for handle_script_error
        https://bugs.webkit.org/show_bug.cgi?id=40436

        * Scripts/webkitpy/common/system/outputcapture.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-06-10  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] *All* WebGL layout tests fail!
        https://bugs.webkit.org/show_bug.cgi?id=40296

        Added test for WebKitWebGLEnabled to
        LayoutTestController::overridePreference().

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2010-06-10  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT EventSender support to graphics mouse events activation
        https://bugs.webkit.org/show_bug.cgi?id=40017

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::keyDown):
        (EventSender::contextClick):
        (EventSender::sendTouchEvent):
        (EventSender::sendOrQueueEvent):
        (EventSender::eventFilter):
        (EventSender::createGraphicsSceneMouseEvent):
        (EventSender::sendEvent):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender::isGraphicsBased):

2010-06-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Ojan Vafai.

        webkit-patch upload fails for security bugs because there's no rietveld flag
        https://bugs.webkit.org/show_bug.cgi?id=40309

        There's probably a more elegant way of seeing whether the form control
        exists, but this seems to work.

        * Scripts/webkitpy/common/net/bugzilla.py:

2010-06-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        make rietveld upload faster and avoid posting to bug on errors
        https://bugs.webkit.org/show_bug.cgi?id=40389

        Only grab the first item of the upload queue instead of trying
        to compute the whole list upfront (which is O(n) bugzilla lookups!).

        Also, don't post comments to the bug when uploading fails.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-06-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        Rietveld upload queue fails when setting in-rietveld flag
        https://bugs.webkit.org/show_bug.cgi?id=40371

        Make the comment arguments to set_flag_on_attachment optional
        and add it to the MockBugzilla.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-06-09  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Rename FloatArray to Float32Array
        https://bugs.webkit.org/show_bug.cgi?id=40323

        Used do-webcore-rename to perform renaming. Manually undid
        incorrect changes to WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp,
        WebCore/manual-tests/resources/ArrayParameterTestApplet.java and
        ArrayParameterTestApplet.class. Updated LayoutTests. Built and ran
        all layout tests on Safari; built Chromium and ran selected WebGL
        tests.

        * Scripts/do-webcore-rename:

2010-06-08  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] compile linux chromium in WebKit/out instead of WebKit/WebKit/chromium/out
        https://bugs.webkit.org/show_bug.cgi?id=40285

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2010-06-03  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Tamura Kent.

        Bug 40052 - [DRT/Chromium] Upstream test_shell_webthemeengine as WebThemeEngineDRT
        https://bugs.webkit.org/show_bug.cgi?id=40052
        
        Add WebThemeEngineDRT and WebThemeControlDRT ported from Chromium rev. 48907

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit):
        * DumpRenderTree/chromium/WebThemeControlDRT.cpp: Added.
        (WebKit::):
        (WebKit::WebThemeControlDRT::WebThemeControlDRT):
        (WebKit::WebThemeControlDRT::~WebThemeControlDRT):
        (WebKit::WebThemeControlDRT::box):
        (WebKit::WebThemeControlDRT::line):
        (WebKit::WebThemeControlDRT::triangle):
        (WebKit::WebThemeControlDRT::roundRect):
        (WebKit::WebThemeControlDRT::oval):
        (WebKit::WebThemeControlDRT::circle):
        (WebKit::WebThemeControlDRT::nestedBoxes):
        (WebKit::WebThemeControlDRT::markState):
        (WebKit::WebThemeControlDRT::draw):
        (WebKit::WebThemeControlDRT::drawTextField):
        (WebKit::WebThemeControlDRT::drawProgressBar):
        * DumpRenderTree/chromium/WebThemeControlDRT.h: Added.
        (WebKit::WebThemeControlDRT::):
        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp: Added.
        (WebKit::):
        (WebKit::WebThemeEngineDRT::paintButton):
        (WebKit::WebThemeEngineDRT::paintMenuList):
        (WebKit::WebThemeEngineDRT::paintScrollbarArrow):
        (WebKit::WebThemeEngineDRT::paintScrollbarThumb):
        (WebKit::WebThemeEngineDRT::paintScrollbarTrack):
        (WebKit::WebThemeEngineDRT::paintTextField):
        (WebKit::WebThemeEngineDRT::paintTrackbar):
        (WebKit::WebThemeEngineDRT::paintProgressBar):
        * DumpRenderTree/chromium/WebThemeEngineDRT.h: Added.
        (WebKit::WebThemeEngineDRT::WebThemeEngineDRT):

2010-06-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60878.
        http://trac.webkit.org/changeset/60878
        https://bugs.webkit.org/show_bug.cgi?id=40349

        broke linux build (Requested by tony^work on #webkit).

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2010-06-08  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] compile linux chromium in WebKit/out instead of WebKit/WebKit/chromium/out
        https://bugs.webkit.org/show_bug.cgi?id=40285

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2010-06-08  Kenneth Russell  <kbr@google.com>

        Unreviewed, build fix.

        Fix build breakage from 38145
        https://bugs.webkit.org/show_bug.cgi?id=40346

        The fix for bug 38145 broke the Chromium Win build because
        Microsoft's cmath doesn't define log2. Suggested fix by zmo is to
        change log2(x) to log(x) / log(2). Built and ran WebGL layout
        tests in Safari on Mac OS X. Changed download mirrors for
        python-irclib to working ones.

        * Scripts/webkitpy/thirdparty/__init__.py:

2010-06-08  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        old-run-webkit-tests should use ensure-valid-python to check if it can run the websockets tests
        https://bugs.webkit.org/show_bug.cgi?id=39058

        * Scripts/old-run-webkit-tests:
         use sourceDir() to find ensure-valid-python in checkPythonVersion()

2010-06-08  Andras Becsi  <abecsi@webkit.org>

        Unreviewed buildfix after r60479.

        [GTK] Move the declaration of getRootCoords higher up to fix the build on GTK
        versions other than 2.17.3.

        * DumpRenderTree/gtk/EventSender.cpp:
        (getRootCoords):

2010-06-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] Mouse movement should not trigger a replay of saved events in the event sender
        https://bugs.webkit.org/show_bug.cgi?id=40267

        When a mouse button is down, automatically queue mouse motion events and
        do not play them back until the mouse button is released. This matches the
        behavior of other ports' EventSenders.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseMoveToCallback): Don't automatically replaySavedEvents for mouse motion.
        (sendOrQueueEvent): Add a shouldReplaySavedEvents argument defaulting to true.

2010-06-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Sam Weinig.

        Add CPP bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=38279

        Integrate CPP bindings in run-bindings-tests.

        * Scripts/run-bindings-tests:

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Ojan Vafai.

        Rename 'svn_merge_base' -> 'remote_merge_base'. This was left out of r60633.
        https://bugs.webkit.org/show_bug.cgi?id=40183

        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2010-06-04  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Add my new email and IRC nick to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2010-06-04  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed.

        Revert changes in json_results_generator.py's _get_svn_revision.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-06-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GtkLauncher should support relative file paths
        https://bugs.webkit.org/show_bug.cgi?id=39944

        Allow GtkLauncher to handle relative file paths passed via command-line arguments.

        * GtkLauncher/main.c:
        (filename_to_url): Added.
        (main): Try to resolve arguments as relative file URLs first.

2010-06-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] EventSender should call gtk_main_do_event instead of invoking signal handlers directly
        https://bugs.webkit.org/show_bug.cgi?id=40182

        Instead of invoking signal handlers directly via g_signal_emit_by_name, call
        gtk_main_do_event. This will allow us to call gtk_get_current_event() in WebKit
        without breaking DRT.

        * DumpRenderTree/gtk/EventSender.cpp:
        (dispatchEvent): Use gtk_main_do_event instead of invoking signal handlers directly.
        (keyDownCallback): Use dispatchEvent here which now uses gtk_main_do_event.

2010-06-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Make the editing/spelling/context-menu-suggestions.html test more robust
        https://bugs.webkit.org/show_bug.cgi?id=40178

        Change the contextClick method to return an array of strings describing the context menu items.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController contextClick]):

2010-06-03  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Clean up chromium-specific code from json_results_generator.py.
        https://bugs.webkit.org/show_bug.cgi?id=39665

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Utilize new takeFirst() method where appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=40089

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::replaySavedEvents):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::WorkQueue::processWork):
        (LayoutTestController::WorkQueue::reset):

2010-06-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtTestLauncher should allow notifications by default.
        https://bugs.webkit.org/show_bug.cgi?id=40078

        * QtTestBrowser/main.cpp:
        (NotificationsPermissionController::NotificationsPermissionController):
        (NotificationsPermissionController::checkPermission):
        (NotificationsPermissionController::requestPermission):
        (LauncherWindow::LauncherWindow):

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Detect whether the user's environment can open a browser.
        https://bugs.webkit.org/show_bug.cgi?id=40136

        Some environments like cygwin silently fail webbrowser.open() causing
        webkit-patch upload not to display any diff. This detects environments
        where webbrowser.open() would fail by testing if webbrowser.get()
        raises an exception.

        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/confirmdiff.py:

2010-06-03  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by David Levin.

        Add dependencies required to link with VS Express 2005.
        https://bugs.webkit.org/show_bug.cgi?id=40038

        Visual Studio implicitly links against these libs.
        VC++ Express does not.

        * WebKitAPITest/WebKitAPITestCommon.vsprops:
        * WinLauncher/WinLauncher.vcproj:

2010-06-03  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        bad codecs.open in webkitpy/layout_tests/ports/websocket_server.py
        https://bugs.webkit.org/show_bug.cgi?id=40105

        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        - kill pywebsocket process when url is not alive and the process is not
          terminated, not to leave pywebsocket server running.
        - fix codecs.open parameters.

2010-06-03  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        old-run-webkit-tests should use ensure-valid-python to check if it can run the websockets tests
        https://bugs.webkit.org/show_bug.cgi?id=39058

        * Scripts/ensure-valid-python:
          - Perl 5.8 doesn't have File::Temp->newdir().  Use File::Temp->tempdir() instead.
          - Add --check-only and --help option.
          - --check-only option only checks python version and don't try to install Python 2.5.
          - Set executable bit.
        * Scripts/old-run-webkit-tests:
          - Check if it can run the websocket tests by calling ensure-valid-python --check-only.

2010-05-14  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        add a RietveldUploadQueue to upload in-rietveld? patches to rietveld
        https://bugs.webkit.org/show_bug.cgi?id=38918

        Patches with in-rietveld? get uploaded to rietveld and get marked
        in-rietveld+. If the upload fails, they are marked in-rietveld-
        and an error is logged to the bug, like the commit-queue.

        Also, get rid of --fancy-review and the ability to upload to rietveld
        using webkit-patch upload/post.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/postcodereview.py:

2010-05-24  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Chris Jerdonek.

        many webkit-patch commands fail in a non-svn tracking git checkout
        https://bugs.webkit.org/show_bug.cgi?id=38156

        If the svn-tracking-branch (trunk) doesn't exist, fallback to the git remote-tracking-branch (master).
        If neither exists, then error out. This makes webkit-patch work
        for anyone that follows the intructions at http://trac.webkit.org/wiki/UsingGitWithWebKit
        to checkout webkit. The fallback to master is for people who don't
        do the steps on that page for tracking svn.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-06-03  Mike Fenton  <mifenton@rim.com>

        Unreviewed.

        Reverse e-mail for myself in committers.py to correspond with bugzilla account.

        * Scripts/webkitpy/common/config/committers.py:

2010-06-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: a number of fixes that make InspectorController
        happy with null redirects.

        https://bugs.webkit.org/show_bug.cgi?id=40109

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

2010-06-02  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Shinichiro Hamaji.

        [Qt] Fix compilation with QT_NO_PROPERTIES
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * QtTestBrowser/main.cpp:
        (LauncherWindow::init):

2010-06-02  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make possible run DRT with QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=40016

        Make possible to use a environment variable for switching backend.
        Usage: QT_DRT_WEBVIEW_MODE=graphics WebKitTools/Scripts/run-webkit-tests --qt

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebViewGraphicsBased::WebViewGraphicsBased):
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::setGraphicsBased):
        (WebCore::DumpRenderTree::isGraphicsBased):
        (WebCore::WebViewGraphicsBased::graphicsView):
        (WebCore::WebViewGraphicsBased::setPage):
        * Scripts/old-run-webkit-tests:

2010-06-02  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Seidel.

        Slave lost shouldn't be recognized as build failed.
        https://bugs.webkit.org/show_bug.cgi?id=39282

        * Scripts/webkitpy/common/net/buildbot.py: Treat slave lost as green.
        * Scripts/webkitpy/common/net/buildbot_unittest.py: Add unit test for slave lost.

2010-06-01  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix the lifecycle of notification objects
        https://bugs.webkit.org/show_bug.cgi?id=40003

        Remove the dependency of notifications on QWebPage.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::requestPermissionCallback):
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::requestPermission):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:

2010-06-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60559.
        http://trac.webkit.org/changeset/60559
        https://bugs.webkit.org/show_bug.cgi?id=40055

        It broke python unit test (Requested by Ossy on #webkit).

        * Scripts/webkitpy/common/net/buildbot.py:

2010-06-02  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Seidel.

        Slave lost shouldn't be recognized as build failed.
        https://bugs.webkit.org/show_bug.cgi?id=39282

        * Scripts/webkitpy/common/net/buildbot.py:

2010-06-02  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Fix crash caused when assigned_to is disabled
        https://bugs.webkit.org/show_bug.cgi?id=40039

        * Scripts/webkitpy/common/net/bugzilla.py:

2010-06-02  Sterling Swigart  <sswigart@google.com>

        Reviewed by David Levin.

        Image Resizer Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=39906

        * Scripts/build-webkit:

2010-06-01  Raine Makelainen  <raine.makelainen@nokia.com>

        Reviewed by Simon Hausmann.

        Fixed tests to use QWebSettings::JavascriptCanAccessClipboard instead of QWebSettings::JavaScriptCanAccessClipboard.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        A nicer Tiger build fix.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        Enable GCC_OBJC_CALL_CXX_CDTORS via .xcconfig.

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        A real Tiger build fix.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Enable GCC_OBJC_CALL_CXX_CDTORS
        for all configurations, not just debug.

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        Tiger build fix.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Enable GCC_OBJC_CALL_CXX_CDTORS.

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Get more mouse tests passing
        https://bugs.webkit.org/show_bug.cgi?id=39040

        Reproduce the logic from the Windows EventSender for mapping
        button numbers to GDK button numbers. Move this logic to the
        prepareMouseButtonEvent helper.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Reproduce Windows logic.
        (contextClickCallback): Move mapping logic to prepareMouseButtonEvent.
        (mouseDownCallback): Ditto.
        (mouseUpCallback): Ditto.

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=39434
        REGRESSION (r59811): Geolocation callbacks cannot be created

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added MockGeolocationProvider.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Tell the view to use MockGeolocationProvider. 
        (resetWebViewToConsistentStateBeforeTesting): Make sure that mock notifications don't leak
        into subsequent tests.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockGeolocationPosition): Changed to use MockGeolocationProvider.
        (LayoutTestController::setMockGeolocationError): Ditto.

        * DumpRenderTree/mac/MockGeolocationProvider.h: Added.
        * DumpRenderTree/mac/MockGeolocationProvider.mm: Added.
        (+[MockGeolocationProvider shared]):
        (-[MockGeolocationProvider dealloc]):
        (-[MockGeolocationProvider setPosition:]):
        (-[MockGeolocationProvider setError:]):
        (-[MockGeolocationProvider registerWebView:]):
        (-[MockGeolocationProvider unregisterWebView:]):
        (-[MockGeolocationProvider lastPosition]):
        (-[MockGeolocationProvider stopTimer]):
        (-[MockGeolocationProvider timerFired]):

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:]):
        This delegate method must send a response. I'm not sure what the two-stage check is supposed
        to achieve, it seems unnecessary.

2010-05-12  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Double clicks cause three button press events
        https://bugs.webkit.org/show_bug.cgi?id=38853

        WebKit now filters the extra GDK_BUTTON_PRESS before GDK_2BUTTON_PRESS
        and GDK_3BUTTON_PRESS via gdk_event_peek(). Since EventSender bypasses
        the GDK event queue entirely, we simply do not send the extra event.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseDownCallback): Do not send extra event. Send GDK_3BUTTON_PRESS appropriately.
        (dispatchEvent): Properly handle GDK_3BUTTON_PRESS.

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Not reviewed. Build fix.

        Fix GTK+ build caused by a bad merge.

        * DumpRenderTree/gtk/EventSender.cpp: 
        (prepareMouseButtonEvent): Use the GdkEvent union as a pointer here.

2010-06-01  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Xan Lopez.

        [GTK] Double clicks cause three button press events
        https://bugs.webkit.org/show_bug.cgi?id=38853

        Small EventSender cleanups. Consolidate some common code. Style fixes.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Added.
        (contextClickCallback): Use prepareMouseButtonEvent.
        (mouseDownCallback): Use prepareMouseButtonEvent.
        (mouseUpCallback): Use prepareMouseButtonEvent.
        (mouseMoveToCallback): Small style fix.

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Double clicks cause three button press events
        https://bugs.webkit.org/show_bug.cgi?id=38853

        Add rudimentary leapForward support to the GTK+ DRT. leapForward allows a test
        to pause for a specified amount of time. It is used in the processing of drag-
        -and-drop data as well as to separate distinct mouse double-clicks in some tests.
        This patch enables tests that rely on the latter behavior to pass.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewWindowObjectCleared): Only initialize the EventSender when loading the top frame.
        * DumpRenderTree/gtk/EventSender.cpp:
        (leapForwardCallback): Add support for adjusting the time offset on leapForward().
        (contextClickCallback): Use sendOrQueueEvent.
        (updateClickCount): Take the time offset into account when counting clicks.
        (mouseDownCallback): Use sendOrQueueEvent.
        (getStateFlags): Change down/currentEventButton into buttonCurrentlyDown/lastClickButton.
        (mouseUpCallback): Use sendOrQueueEvent.
        (mouseMoveToCallback): Ditto.
        (mouseWheelToCallback): Ditto.
        (sendOrQueueEvent): Added.
        (dispatchEvent): Added.
        (replaySavedEvents): Pause when an event has a delay and defer to dispatchEvent.
        (makeEventSender): Only initialize the EventSender when loading the top frame.
        * DumpRenderTree/gtk/EventSender.h: Ditto.

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] css1/color_and_background/background_attachment.html fails on the 32-bit debug bot
        https://bugs.webkit.org/show_bug.cgi?id=39101

        Work around timing issues for render tree dumps by pumping the
        main loop before doing the dump. Resize events are asynchronous
        in GTK+, so sometimes resize requests are still pending when DRT
        dumps the tree.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump): Pump the main loop before dumping the render tree.

2010-05-31  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Fix crash of a test after another test with multiple windows
        https://bugs.webkit.org/show_bug.cgi?id=39942

        If a test opens multiple windows, focuses on non-main window, and
        the focused window is closed, TestShell::m_focusedWidget points a
        deleted object.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::closeWindow): Clear m_focusedWidget.

2010-05-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        new-run-webkit-tests: Support DRT on Chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=39810

        Add --test-shell flag to DRT/Chromium, and it changes DRT so that
        it behaves like test_shell about command analysis, printing
        format, pixel dumping, and timeout handling.

        chromium.py and chromium_win.py supports the --test-shell flag and
        DRT/Chromium-win binary names.
        
        * DumpRenderTree/DumpRenderTree.gypi: Add new files.
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest): Support for test_shell-style command.
        (main): Introduce --test-shell.
        * DumpRenderTree/chromium/TestEventPrinter.cpp: Added.
        * DumpRenderTree/chromium/TestEventPrinter.h: Added.
          TestEventPrinter class manages stdio output and image output.
          TestEventPrinter.cpp has two implementations; DRTPrinter and
          TestShellPrinter.
        * DumpRenderTree/chromium/TestShell.cpp:
          Some changes for TestEventPrinter.
        (TestShell::TestShell):
        (TestShell::runFileTest):
        (TestShell::testTimedOut):
        (TestShell::dump):
        (TestShell::dumpImage):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::printer):
        (TestShell::layoutTestTimeout):
        (TestShell::layoutTestTimeoutForWatchDog):
        (TestShell::setLayoutTestTimeout):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (watchDogThread): Use TestShell::layoutTestTimeoutForWatchDog().
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2010-05-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enhance Qt DRT implementation to support platform scroll wheel events.

        https://bugs.webkit.org/show_bug.cgi?id=36004

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender): QApplication::setWheelScrollLines(2) in order to match
                                    Scrollbar::pixelsPerLineStep() for DRT testing.
        (EventSender::mouseScrollBy): Added
        (EventSender::continuousMouseScrollBy): Added
        * DumpRenderTree/qt/EventSenderQt.h:

2010-05-28  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        webkit-patch should support CHANGE_LOG_EDIT_APPLICATION
        https://bugs.webkit.org/show_bug.cgi?id=39546

        One sublty is that we want to wait for the user to finish editing the
        ChangeLog before moving on to the next step.  That means we want to pass
        -W to open.  However, if the user is using Xcode to edit the ChangeLog,
        we don't want them to have to exit the Xcode application.  For this reason,
        we create a new instance of the application with -n.
        
        Overall, xed seems like a better solution, so we recommend that too.

        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:

2010-05-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: fix handling of Ctrl-C to exit even if some
        threads are wedged. Also, the script will print the results of the
        tests completed when the interrupt occurs.

        https://bugs.webkit.org/show_bug.cgi?id=33238

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-05-28  Darin Adler  <darin@apple.com>

        Ignore more Python messiness.

        * Scripts/webkitpy/layout_tests/data/platform/test: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/layout_package: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/test_types: Added property svn:ignore.
        * Scripts/webkitpy/test: Added property svn:ignore.
        * Scripts/webkitpy/thirdparty/simplejson: Added property svn:ignore.

2010-05-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Adding myself as a reviewer.

        * Scripts/webkitpy/common/config/committers.py:

2010-05-28  Chris Fleizach  <cfleizach@apple.com>

        Build fix. No review.

        AX: need to catch NSAccessibilityExceptions in DRT
        https://bugs.webkit.org/show_bug.cgi?id=39881

        It looks like Tiger doesn't like seeing a NSMakeRange inside a @try.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::selectedTextRange):

2010-05-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: need to catch NSAccessibilityExceptions in DRT
        https://bugs.webkit.org/show_bug.cgi?id=39881

        Normally, accessibility exceptions are caught in the AX Runtime on the Mac, but 
        because DRT is its own AX client, no one is there to catch these otherwise innocuous exceptions.
  
        So DRT should wrap exception handlers around its AX related calls.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (attributesOfElement):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getDocumentLinks):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::getChildrenWithRange):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::boolAttributeValue):
        (AccessibilityUIElement::isAttributeSettable):
        (AccessibilityUIElement::isAttributeSupported):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::subrole):
        (AccessibilityUIElement::roleDescription):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::orientation):
        (AccessibilityUIElement::stringValue):
        (AccessibilityUIElement::language):
        (AccessibilityUIElement::helpText):
        (AccessibilityUIElement::x):
        (AccessibilityUIElement::y):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        (AccessibilityUIElement::valueDescription):
        (AccessibilityUIElement::insertionPointLineNumber):
        (AccessibilityUIElement::isActionSupported):
        (AccessibilityUIElement::isEnabled):
        (AccessibilityUIElement::isRequired):
        (AccessibilityUIElement::isSelected):
        (AccessibilityUIElement::isExpanded):
        (AccessibilityUIElement::hierarchicalLevel):
        (AccessibilityUIElement::ariaIsGrabbed):
        (AccessibilityUIElement::ariaDropEffects):
        (AccessibilityUIElement::lineForIndex):
        (AccessibilityUIElement::boundsForRange):
        (AccessibilityUIElement::stringForRange):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfColumns):
        (AccessibilityUIElement::attributesOfRows):
        (AccessibilityUIElement::attributesOfVisibleCells):
        (AccessibilityUIElement::attributesOfHeader):
        (AccessibilityUIElement::rowCount):
        (AccessibilityUIElement::columnCount):
        (AccessibilityUIElement::indexInTable):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::selectedTextRange):
        (AccessibilityUIElement::setSelectedTextRange):
        (AccessibilityUIElement::increment):
        (AccessibilityUIElement::decrement):
        (AccessibilityUIElement::showMenu):
        (AccessibilityUIElement::press):
        (AccessibilityUIElement::url):
        (AccessibilityUIElement::hasPopup):

2010-05-28  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Pass all web notification layout tests
        https://bugs.webkit.org/show_bug.cgi?id=39146

        Mimic Chromium's test_shell security model in Qt's DRT.
        It makes a list of origins which were granted permission to display
        notifications, and only those origins can display notifications.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::checkPermissionCallback):
        (WebCore::requestPermissionCallback):
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::checkPermission):
        (WebCore::DumpRenderTree::requestPermission):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::grantDesktopNotificationPermission):
        (LayoutTestController::checkDesktopNotificationPermission):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-05-27  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style complains about use of NULL in GTK function calls that require sentinels
        https://bugs.webkit.org/show_bug.cgi?id=39372

        Don't warn about NULL in g_*() calls. Zero can't be used instead
        for calls like g_build_filename and g_object_get/set.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-05-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Platform plugin example
        https://bugs.webkit.org/show_bug.cgi?id=39489

        Exempting directory WebKit/qt/examples/ from style guide.

        * Scripts/webkitpy/style/checker.py:

2010-05-26  Philippe Normand  <pnormand@igalia.com>

        Reviewed by David Levin.

        [style] Allow usage of NULL in gst_*_many()
        https://bugs.webkit.org/show_bug.cgi?id=39740

        Don't warn if NULL is used by gst_*_many() functions. Zero can't
        be used for the reason explained in Bug 32858.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-05-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update script to run the normal version of the parser tests.

        * Scripts/test-html5-parser:

2010-05-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add HTML5 parser support to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=39815

        * Scripts/old-run-webkit-tests:

2010-05-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5 lexer not ASSERT when resuming partial parses
        https://bugs.webkit.org/show_bug.cgi?id=39755

        Add webkit-resumer.html to the HTML5 parser test suite.

        * Scripts/test-html5-parser:

2010-05-24  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] setup fonts on chromium linux DRT
        https://bugs.webkit.org/show_bug.cgi?id=39644

        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (setupFontconfig):
        (platformInit):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintRect):  Fix a bug where in release builds, we didn't initialize m_canvas.
        * DumpRenderTree/chromium/fonts.conf: Added.

2010-05-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Re-commit r58765 - it had been rolled out to see if it was causing
        a perf regression (in r59787 and r59789), but that does not seem to
        have been the case.

        https://bugs.webkit.org/show_bug.cgi?id=39605

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::show):

2010-05-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Chris Jerdonek.

        remove suppression of rietveld logging
        https://bugs.webkit.org/show_bug.cgi?id=39693

        Now that we only upload to rietveld explicitly, e.g. on the bot
        or via webkit-patch post-attachment-to-rietveld, we should print
        all the rietveld logging. It was suppressed before to avoid making
        webkit-patch upload too noisy.

        * Scripts/webkitpy/common/net/rietveld.py:

2010-05-25  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ojan Vafai.

        [Qt] Expose the editing behavior setting in DRT to test all editing code paths
        https://bugs.webkit.org/show_bug.cgi?id=39680

        Implement LayoutTestController::setEditingBehavior in Qt's DRT.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setEditingBehavior):

2010-05-25  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after API change and addition of WebCore/platform/text/transcoder dir. 

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setEditingBehavior):
        * wx/build/settings.py:

2010-05-24  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Eric Seidel and Kent Tamura (for the Chromium part).

        editingBehavior settings needs to be set back to a reasonable default between tests
        https://bugs.webkit.org/show_bug.cgi?id=39433

        Similarly to r59861, hard code the default setting during reset for Gtk and Chromium,
        so that the serialized version of the setting stays in sync with expectations.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2010-05-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch land calls scm.changed_files 4 times!
        https://bugs.webkit.org/show_bug.cgi?id=39584

        * Scripts/webkitpy/tool/commands/download_unittest.py:
         - Assert that we don't call modified_changelogs too often.
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
         - Use cached changelogs list instead of calling modified_changelogs directly.
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
         - ditto.

2010-05-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Import layout_test_helper for Windows
        https://bugs.webkit.org/show_bug.cgi?id=39581

        Import Chromium win/layout_test_helper.cc as LayoutTestHelperWin.cpp.
        http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/test_shell/win/layout_test_helper.cc

        * DumpRenderTree/chromium/LayoutTestHelperWin.cpp: Added.

2010-05-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Reset frame name
        https://bugs.webkit.org/show_bug.cgi?id=39586

        This change fixes about 70 unexpected results.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):

2010-05-24  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Adds WebGeolocationServiceMockImpl to remove public dependency on wtf/HashMap.h
        https://bugs.webkit.org/show_bug.cgi?id=39587

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::geolocationService):

2010-05-24  Robert Hogan  <robert@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] DRT Support for removeOriginAccessWhitelistEntry

        Unskips http/tests/xmlhttprequest/origin-whitelisting-removal.html

        [Qt] DRT Support for removeOriginAccessWhitelistEntry
        https://bugs.webkit.org/show_bug.cgi?id=39565

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::removeOriginAccessWhitelistEntry):

2010-05-24  Marcus Bulach  <bulach@google.com>

        Reviewed by Ojan Vafai.

        _svn_branch_has_extra_commits needs to check for ^HEAD instead of ^head.
        https://bugs.webkit.org/show_bug.cgi?id=39603

        * Scripts/webkitpy/common/checkout/scm.py:

== Rolled over to ChangeLog-2010-05-24 ==
