2009-03-12  David Kilzer  <ddkilzer@apple.com>

        Bug 24378: resolve-ChangeLogs should use git status or svn status to find and fix unmerged ChangeLogs

        <https://bugs.webkit.org/show_bug.cgi?id=24378>

        Reviewed by Adam Roben.

        * Scripts/resolve-ChangeLogs: If -f|--fix-merged is not passed
        and no file or directory names are specified on the command-line
        then try to find unmerged ChangeLog files based on 'svn stat' or
        'git diff'.  Added global $isGit and $isSVN variables so that
        isGit() and isSVN() only have to be called once.
        (findUnmergedChangeLogs): Added.

2009-03-11  David Kilzer  <ddkilzer@apple.com>

        Clarify comments regarding order of FEATURE_DEFINES

        Rubber-stamped by Mark Rowe.

        * Scripts/build-webkit: Added warning about keeping
        FEATURE_DEFINES in order and the consequences when they are not.

2009-03-11  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        Gtk] Implement LayoutTestControllerGtk::setPrivateBrowsingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=24487

        Also reset WebSettings to its default state for JavaScript
        profiling, Developer Extras and Private Browsing before running
        the test (can be after each test but we want to be consistent with
        other ports in this regard)

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setPrivateBrowsingEnabled):

2009-03-11  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [GTK]DumpRenderTree doesn't compile for non-X11 GTK ports anymore
        https://bugs.webkit.org/show_bug.cgi?id=2260

        Add plugin support only for X11 builds

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (setDefaultsToConsistentStateValuesForTesting):
        * GNUmakefile.am:

2009-03-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        Implement setJavaScriptProfilingEnabled by enabling the Developer
        Extras and the JavaScript profiling on the WebKitWebInspector. After
        this change we pass the three enabled tests in fast/profiler.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest): Reset setJavaScriptProfilingEnabled after each test run
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled):

2009-03-07  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [Gtk] Enable http history tests
        https://bugs.webkit.org/show_bug.cgi?id=24394

        Get the index of the current item from the list of (history) items
        to print before adding the back history items to the list. This
        will make the 'curr' pointer point to the correct item in the
        actual results, therefore, passing some of the http/tests/history
        tests.

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

2009-03-06  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        When building QtWebKit in release mode make sure that QT_SHARED is defined
        otherwise none of the public API will be exported.  This leads to missing
        symbols and link errors if hidden-visibility is used.

        * Scripts/webkitdirs.pm:

2009-03-06  Adam Roben  <aroben@apple.com>

        Change the isCygwin check in update-webkit to isAppleWinWebKit

        This matches a similar check in build-webkit, and is more correct.

        Reviewed by Alexey Proskuryakov.

        * Scripts/update-webkit: Only call update-webkit-auxiliary-libs if
        isAppleWinWebKit is true.

2009-03-06  Adam Roben  <aroben@apple.com>

        Make update-webkit-support-libs fail if WebKitSupportLibrary.zip is
        present but out of date

        Reviewed by Alexey Proskuryakov.

        * Scripts/update-webkit-support-libs: Changed to use
        dieAndInstructToDownload when the zip file doesn't exist. Added an MD5
        check to make sure the file is up-to-date. If it is out of date, print
        an error message and quit.
        (sub dieAndInstructToDownload): Added. Prints an error message and
        quits with an error.

2009-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=22884
        <rdar://problem/6449783>
        modified layout test crashes Safari

        Add destroyNullStream test function to the test plug-in.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (destroyNullStream):
        (pluginInvoke):

2009-03-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Support layout test covering <rdar://problem/6616664>

        Change NSURLRequest/IWebURLRequest dumping to include the mainDocumentURL

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSURLRequest _drt_descriptionSuitableForTestResult]): Return both the request URL and the 
          mainDocumentURL.
        
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (descriptionSuitableForTestResult): Return both the request URL and the mainDocumentURL.

2009-03-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Enable Geolocation (except on Tiger and Leopard).

        * Scripts/build-webkit:

2009-03-02  Kevin Ollivier  <kevino@theolliviers.com>

        Build fixes for wxWidgets Mac trunk build.

        * wx/build-wxwebkit:

2009-03-02  Timothy Hatcher  <timothy@apple.com>

        Allow for multiline quoted text in JavaScript files when looking for function names.

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

        Reviewed by David Kilzer.

        * Scripts/prepare-ChangeLog:

2009-03-02  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Eric Seidel.

        Add three new drt helper functions that enable all of the tests in
        LayoutTests/animation/* and LayoutTests/transitions/* to now pass.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::numberOfActiveAnimations):
        * DumpRenderTree/qt/jsobjects.h:

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

        Windows build fix after r41349

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::getChildrenWithRange):

2009-03-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 24282: AX Palindrome error when asking for a specific index of the AXChildren array

        Change getChildAtIndex() to get a range of children instead of all the children.
        This exercises code in WebCore that returns elements when asked for from a range.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::getChildrenWithRange):
        (AccessibilityUIElement::getChildAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::getChildrenWithRange):

2009-03-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

         [Gtk] get the HTTP layout tests going
         https://bugs.webkit.org/show_bug.cgi?id=24259

        Determine the frame's response and decide whether to dump as text
        or the render tree

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

2009-03-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [Gtk] get the HTTP layout tests going
        https://bugs.webkit.org/show_bug.cgi?id=24259

         Implement dumping of WebKitWebBackForwardList and its history
         items.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (compareHistoryItems):
        (dumpHistoryItem):
        (dumpBackForwardListForWebView):
        (dump):
        (runTest):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::clearBackForwardList):
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (BackForwardItem::invoke):

2009-02-28  Zan Dobersek  <zandobersek@gmail.com>

         Reviewed by Holger Freyther.

         Set the resolution for the default screen to 72.0.
         This way, setting font sizes results in expected values.

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

2009-02-28  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        Adds a WebKitMakeArguments environment variable to enable passing
        of arguments such as '-j2' to make for the autotools build.

        * Scripts/webkitdirs.pm:

2009-02-28  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        Add a GTK+-only option to enable GNOME Keyring when building.

        * Scripts/build-webkit:

2009-02-28  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [Gtk] webkitdirs.pm modify path in when detecting 3D transforms and accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=24076

        Refactor gtk lib detection and put it in builtDylibPathForName

        * Scripts/webkitdirs.pm:

2009-02-28  Christian Dywan  <christian@twotoasts.de>

        Rubber-stamped by Holger Freyther.

        * GtkLauncher/main.c:
        (activate_uri_entry_cb):
        (main): Use the new webkit_web_view_load_uri to open URIs.

2009-02-27  Xan Lopez  <xan@gnome.org>

        Rubber-stamped by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24222
        [GTK] Remove checks for old glib versions

        libsoup, which is a hard dependency, needs at least glib 2.15.3,
        so remove all glib checks for versions older than that.

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

2009-02-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Fix spew about a WebView being deallocated while key value observers are
        still registered with it by making sure that we always stop observing
        _isUsingAcceleratedCompositing in -[DumpRenderTreeWindow close].
        
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow close]):

2009-02-25  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Do not queue the calls to 'DumpRenderTree::dump()' as this can result
        in more than one call as a test that calls 'notifyDone()' can then be
        subsequently fully loaded and initiate a second dump.  Also make sure
        to stop any existing page load that is happening before running the next
        test.  Combined this serves to produce 217 more passing tests for the
        Qt port or roughly 5% at this point.

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

2009-02-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        Have the DumpRenderTreeWindow observe the -_isUsingAcceleratedCompositing
        property of the WebView, and use that to turn -autodisplay on and off.
        This is necessary so that accelerated animations start correctly.
        We can thus remove the -display hack in createBitmapContextFromWebView().

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (dumpRenderTree):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow close]):
        (-[DumpRenderTreeWindow webView]):
        (-[DumpRenderTreeWindow startObservingWebView]):
        (-[DumpRenderTreeWindow stopObservingWebView]):
        (-[DumpRenderTreeWindow observeValueForKeyPath:ofObject:change:context:]):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):

2009-02-25  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Zack Rusin.

        https://bugs.webkit.org/show_bug.cgi?id=24158
        Implement the queue*() methods of the layoutTestController and begin
        implementing the dump of the back/forward list.  This results in 2% more
        tests passing as well as 23 currently skipped tests now passing.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::dumpBackForwardList):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/jsobjects.cpp:
        (findFrameNamed):
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):
        (LayoutTestController::reset):
        (LayoutTestController::processWork):
        (LayoutTestController::maybeDump):
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):
        (LayoutTestController::queueLoad):
        (LayoutTestController::queueReload):
        (LayoutTestController::queueScript):
        * DumpRenderTree/qt/jsobjects.h:
        (LayoutTestController::shouldDumpBackForwardList):
        (LayoutTestController::dumpBackForwardList):

2009-02-24  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Don't print out that you are generating new results if you are not in fact
        generating new results and disable generating new results by default for
        the all ports other than the canonical Apple Mac port since this can litter
        the source directory with hundreds of new results since other ports
        are not as up to date.

        * Scripts/run-webkit-tests:

2009-02-24  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Cameron Zwarich.

        The Qt port does not support these yet nor does the nm check work with
        QMake based build.

        * Scripts/webkitdirs.pm:

2009-02-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Alexey Proskuryakov.

        [Gtk] add options for 3D transforms and HTML5 channel messaging to the build
        https://bugs.webkit.org/show_bug.cgi?id=24072

        Allow toggling of 3D transforms and HTML5 channel messaging
        support for the Autotools (Gtk) build.

        Also add '--gtk' in the build-webkit help doc and fix autotools
        option for web-workers support.

        * Scripts/build-webkit:

2009-02-23  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22624
        [SOUP][GTK] Need API to get SoupSession from WebKit.

        Add soup flags now that dependency is explicit.

        * GNUmakefile.am:

2009-02-22  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Fix assertion failures in editing/pasteboard/paste-RTFD.html and editing/pasteboard/paste-TIFF.html in 64-bit.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (swizzleAllMethods): When adding a new method to a class, use the implementation and type of the new method rather
        than of an arbitrary existing method on the class.

2009-02-13  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by Alexey Proskuryakov.

        Add a few ignores to make-js-test-wrappers.

        * Scripts/make-js-test-wrappers:

2009-02-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alexey Proskuryakov.

        Prepend file:// to the test result filename to make
        GtkLauncher display the result page.

        * Scripts/run-webkit-tests:

2009-02-16  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Adam Roben

        Actually use the installation prefix defined in WebKitInstallationPrefix,
        in autotools builds.

        * Scripts/webkitdirs.pm:

2009-02-12  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Remove debugging code which was committed by mistake.

        * Scripts/run-webkit-tests:

2009-02-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben

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

        Add detection of accelerated compositing and 3d transforms,
        and add various directories to $ignoredDirectories when these
        features are off.

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2009-02-12  Adam Roben  <aroben@apple.com>

        Fix Bug 23922: Warning message from run-webkit-tests when Skipped file
        contains non-existent tests is confusing and is given for disabled
        tests

        <https://bugs.webkit.org/show_bug.cgi?id=23922>

        We now no longer warn about disabled tests. The warning now reads:

        Skipped list contained '$item', but no file of that name could be
        found

        Reviewed by John Sullivan.

        * Scripts/run-webkit-tests:
        (top level): Pass the list name to processIgnoreTests so it can print
        out a reasonable warning message.
        (processIgnoreTests): Take a list name as a second parameter and use
        it to display a better warning message. Also check for a "-disabled"
        version of the test before warning about it not existing.

2009-02-11  Adam Roben  <aroben@apple.com>

        Windows fix for Bug 22239: Implement missing animation & transition
        APIs on LayoutTestController for non-mac platforms

        <https://bugs.webkit.org/show_bug.cgi?id=22239>

        Reviewed by Simon Fraser.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::numberOfActiveAnimations):
        Implemented these by calling through to IWebFramePrivate.

2009-02-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        * Scripts/build-webkit:

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

        Added support --3d-transforms. Defaults to off

2009-02-11  Adam Roben  <aroben@apple.com>

        Fix crashes in http/tests/history/redirect-301.pl and friends on
        Windows

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::webHistoryItemCount): Null-check the shared
        WebHistory instance before dereferencing it.

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

        Fix Bug 23869: Pixel tests can't be run on Windows

        <https://bugs.webkit.org/show_bug.cgi?id=23869>

        This patch gets the pixel tests limping along on Windows again.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/DumpRenderTree.sln: Changed to use the new
        Debug_Internal configuration of ImageDiff in the Debug_Internal
        configuration of this solution.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG): Changed to call fwrite in a loop, since this call was
        failing due to the buffer being too large on Windows.
        (dumpWebViewAsPixelsAndCompareWithExpected): Removed an unnecessary
        #if PLATFORM(MAC)/#endif.

        * DumpRenderTree/win/ImageDiff.vcproj: Added a Debug_Internal
        configuration that matches the Debug configuration but also references
        debug_internal.vsprops.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Renamed from
        getBitmapContextFromWebView to match the name used in the
        cross-platform code.

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

        Robustify DumpRenderTree/win a little

        DumpRenderTree was previously not holding a ref to the WebViews it
        created via window.open. It was getting away with this because
        WebViews get reffed by being preference notification observers and by
        registering for drag-n-drop messages. Now DRT does hold a ref, in case
        this situation changes in the future.

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpBackForwardListForAllWindows): Added a .get().
        (windowToWebViewMap): Changed to use the WindowToWebViewMap typedef.
        * DumpRenderTree/win/DumpRenderTreeWin.h: Changed the
        windowToWebViewMap() to hold a ref to the WebViews it contains.

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Fix the #include file order, per review comments.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        If the WebHTMLView uses accelerated compositing, we need for force
        the on-screen capture path and also force animations to start with -display
        since the DRT window has autodisplay disabled.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):

2009-02-03  miggilin  <mr.diggilin@gmail.com>

        Reviewed by Darin Adler.

        Change the way wxWidgets build gets arguments.
        Change "checkForArgumentAndRemoveFromARGV" in build-webkit to check if the
        argument passed matches one in ARGV exactly (allows, ie, --wx-args not to be
        removed when --wx is checked for).

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

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

2009-01-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Catch exceptions thrown by AppKit when accessing an attribute than an element
        doesn't return.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (attributesOfElement):

2009-01-29  David Kilzer  <ddkilzer@apple.com>

        Remove semi-colons from the end of ObjC method implementations

        Rubber-stamped by Adam Roben.

        $ find WebKitTools -name \*.m -o -name \*.mm -exec perl -e 'undef $/; $s = <>; while ($s =~ m/[\n\r][-+].*;[\s\r\n]+\{/g) { print "$ARGV: $&\n"; }' {} \;

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):
        (-[FrameLoadDelegate webView:didHandleOnloadEventsForFrame:]):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webViewFrame:]):

2009-01-28  Geoffrey Garen  <ggaren@apple.com>

        Build fix for GTK.

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

2009-01-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added support for querying how many history items were created during a
        layout test.

        * DumpRenderTree/LayoutTestController.cpp:
        (getWebHistoryItemCountCallback):
        (LayoutTestController::staticValues):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::webHistoryItemCount):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::webHistoryItemCount):

2009-01-26  Pierre-Olivier Latour  <pol@apple.com>

        Tweaked again earlier fix, this time just to print a warning and not abort if
        attempting to generate pixel results and Perian is installed.

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

        * Scripts/run-webkit-tests:

2009-01-26  Christian Dywan  <christian@twotoasts.de>

        Rubber stamped by Holger Freyther.

        * GtkLauncher/main.c:
        (main): Initialize threads, which is required for libSoup.

2009-01-23  David Kilzer  <ddkilzer@apple.com>

        * Scripts/do-webcore-rename: Removed 10 header guard renames that
        had already been fixed, and updated 4 renames whose original values
        had changed.

2009-01-22  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:

2009-01-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Clean up the test plug-in code. We now always use the CG drawing model and the
        Cocoa event model. It is however possible to revert to the old Carbon event model by
        specifying forcecarbon=true in the embed/object tag.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (handleEventCarbon):
        (handleEventCocoa):
        (NPP_HandleEvent):

2009-01-21  Pierre-Olivier Latour  <pol@apple.com>

        Tweaked earlier fix to only print a warning when Perian is installed,
        and fail completely only if attempting to generate new pixel test results.

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Alexey Proskuryakov.

        Bug 23450: string leaks seen in DumpRenderTree accessibility test code
        https://bugs.webkit.org/show_bug.cgi?id=23450

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (isAttributeSettableCallback): Add the missing JSStringRelease call.
        (attributeValueCallback): Ditto.

2009-01-20  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Darin Adler.

        Print warning regarding display color profile change in run-webkit-tests instead of DRT.

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

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (setupMainDisplayColorProfile):
        * Scripts/run-webkit-tests:

2009-01-20  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Darin Adler.

        Changed run-webkit-tests to abort on the Mac if pixel tests are enabled and Perian is installed,
        in order to avoid result differences in some media tests.

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

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2009-01-19  Sam Weinig  <sam@webkit.org>

        * Scripts/do-webcore-rename: Add JSValuePtr and ProtectedJSValuePtr.

2009-01-16  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm: Added '--makeargs' parameter which can pass additional
        parameters to make command in QMake projects.

2009-01-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Add AX methods to retrieve the parent of an element.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (parentElementCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::parentElement):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::parentElement):

2009-01-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Set the count to the right number of elements.

        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp:
        (testEnumerate):

2009-01-14  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Use COM API on Windows in LayoutTestController::setIconDatabaseEnabled()

        Rubber-stamped by Alice Liu.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setIconDatabaseEnabled): Use COM API
        to get the shared WebIconDatabase.

2009-01-14  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        <https://bugs.webkit.org/show_bug.cgi?id=16829>
        Implement NPN_SetException()

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp:
        (initializeIdentifiers):
        (testHasMethod):
        (testInvoke):

2009-01-13  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=23304
        Fix svn-apply to match svn-unapply to recognize added files in 'git diff' patches.

        * Scripts/svn-apply: Added a check (similar to svn-unapply) to recognize added files.

2009-01-14  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Implement LayoutTestController::setIconDatabaseEnabled(bool) for GTK

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest): Added call to reset the icon database to match Mac
        and Windows ports.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setIconDatabaseEnabled): Implemented
        stub method.

2009-01-14  David Kilzer  <ddkilzer@apple.com>

        Bug 22795: favicons should be saved to webarchives

        <https://bugs.webkit.org/show_bug.cgi?id=22795>

        Reviewed by Darin Adler.

        * DumpRenderTree/LayoutTestController.cpp:
        (setIconDatabaseEnabledCallback): Added.
        (setJavaScriptProfilingEnabledCallback): Realphabetized.
        (LayoutTestController::staticFunctions): Added entry for calling
        LayoutTestController.setIconDatabaseEnabled(bool) from JavaScript.
        * DumpRenderTree/LayoutTestController.h:
        (setIconDatabaseEnabledCallback): Added declaration.
        (setJavaScriptProfilingEnabledCallback): Realphabetized.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest): Disable the icon database before each test.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setIconDatabaseEnabled): Added.
        (LayoutTestController::setJavaScriptProfilingEnabled): Realphabetized.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Disable the icon database before each test.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setIconDatabaseEnabled): Added.

2009-01-14  Steve Falkenburg  <sfalken@apple.com>

        Update copyright year in version resources.

        Reviewed by Adam Roben.

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc:

2009-01-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - update copyright

        * DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist:
        * WebKitLauncher/Info.plist:

2009-01-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add NPRuntime test.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testNPRuntime):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_GetValue):

2009-01-12  Mark Rowe  <mrowe@apple.com>

        Use the modern spelling of WebKit.

        * Scripts/find-extra-includes:
        * Scripts/report-include-statistics:
        * Scripts/run-webkit-app:
        * Scripts/svn-unapply:
        * Scripts/update-webkit:

2009-01-11  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Updated so it won't overwrite tests in the svg/dom
        directory that aren't using standard wrappers.

2009-01-11  Robert Blaut  <webkit@blaut.biz>

        Reviewed by Eric Seidel.

        <https://bugs.webkit.org/show_bug.cgi?id=23134>
        Update bisect-builds for Safari 3.2 to prevent crashes

        * Scripts/bisect-builds: Added Safari 3.2 and the corresponding minimal revision, r37348.

2009-01-08  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon Hausmann.

        Explicitly set these so that the layout tests do not break.

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

2009-01-07  Glenn Wilson  <gwilson@chromium.org>

        Reviewed by Eric Seidel.

        Changed DumpRenderTree to re-enable Javascript in web preferences on every test.
        This fixes the case when a user mistakenly disables Javascript, and all layout tests crash.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (testStringByEvaluatingJavaScriptFromString):
        (setDefaultsToConsistentValuesForTesting):

2009-01-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej Stachowiak.

        Implement numberOfActiveAnimations to fix the build

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

2009-01-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Fix unused variable warnings

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::javaScriptAlert):
        (WebCore::WebPage::javaScriptConfirm):
        (WebCore::WebPage::javaScriptPrompt):
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::maybeDump):
        * DumpRenderTree/qt/main.cpp:
        (get_backtrace):
        * DumpRenderTree/qt/testplugin.cpp:
        (TestPlugin::create):

2009-01-06  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Darin Adler.

        Added new JS API numberOfActiveAnimations() that returns the number of active CSS transitions & animations.
        This effectively exposes the new AnimationController::numberOfActiveAnimations() API from WebCore.

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

        * DumpRenderTree/LayoutTestController.cpp:
        (numberOfActiveAnimationsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::numberOfActiveAnimations):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::numberOfActiveAnimations):

2009-01-04  David Kilzer  <ddkilzer@apple.com>

        Don't install internal headers in WebKit framework

        Reviewed by Darin Adler.

        Since WebHTMLRepresentationInternal.h and WebTypesInternal.h are
        no longer installed in WebKit.framework/PrivateHeaders, use the
        special relationship of DumpRenderTree within the WebKit source
        tree to include the internal headers through relative paths.
        Created the concept of mac/InternalHeaders to hide the ugly
        paths.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Added
        mac/InternalHeaders to HEADER_SEARCH_PATHS.
        * DumpRenderTree/mac/InternalHeaders/WebKit/WebHTMLRepresentationInternal.h: Added.
        * DumpRenderTree/mac/InternalHeaders/WebKit/WebTypesInternal.h: Added.

2009-01-02  Adam Treat  <treat@kde.org>

        Reviewed by George Staikos.

        Add support for fixedLayoutSize to the qt DRT

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::setFixedLayoutSize):
        (LayoutTestController::setUseFixedLayout):
        * DumpRenderTree/qt/jsobjects.h:

2009-01-03  David D. Kilzer  <ddkilzer@webkit.org>

        Bug 23091: Some webarchive http tests intermittently fail due to Connection/Keep-Alive header differences

        <https://bugs.webkit.org/show_bug.cgi?id=23091>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (normalizeHTTPResponseHeaderFields): Remove Keep-Alive and
        Connection headers from webarchive results.

2008-12-31  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Holger Freyther.

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

        Prevent TestNetscapePlugin from installing system-wide.

        * GNUmakefile.am:

2008-12-31  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Holger Freyther.

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

        Move WebKitWebView's size allocation into a proper place.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump):
        (runTest):

2008-12-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Timothy Hatcher.

        Move the guts of determineCurrentSVNRevision to VCSUtils as svnRevisionForDirectory,
        and make it work for git too.

        * Scripts/VCSUtils.pm:
        * Scripts/webkitdirs.pm:

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        Ignore http/tests/wml, if no WML support is present.
        Add http/tests/wml to list of HTTP tests, allowed to access local resources.

        * Scripts/run-webkit-tests:

2008-12-19  David Levin  <levin@chromium.org>

        Reviewed by Mark Rowe.

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

        Make the git diff command used for preparing the change log avoid using any external diff tools.

        * Scripts/prepare-ChangeLog:

2008-12-19  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

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

        Added files which were missing from the TestNetscapePlugin
        directory to the SOURCES variable, so that they will be
        distributed in a make dist.

        * GNUMakefile.am:

2008-12-18  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Add tests for bug 21855: REGRESSION (r37323): Gmail complains about popup blocking when opening a link
        <https://bugs.webkit.org/show_bug.cgi?id=21855>
        <rdar://problem/6278244>

        Add support for scheduling asynchronous clicks to DumpRenderTree, but
        only on the Mac.

        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Expose
        scheduleAsynchronousClick to JavaScript.
        (-[EventSendingController scheduleAsynchronousClick]): Add.

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

        * Scripts/make-js-test-wrappers: Added another exception to avoid overwriting
        a custom-written test.

2008-12-15  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Implement setJavaScriptProfilingEnabled in the Qt DRT to pass fast/profiler.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled):
        * DumpRenderTree/qt/jsobjects.h:

2008-12-13  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Darin Adler.

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

        Implement animation and transition pausing.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):

2008-12-12  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

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

        Increase timeout in call to initWithURL so that people actually see
        new web pages when they type URLs rather than a blank screen.

        * WinLauncher/WinLauncher.cpp:
        (loadURL):  Increase timeout in initWithURL from 0 to 60 seconds.

2008-12-12  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Add a renaming idea.

2008-12-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Update the WebKit.qrc and add a script to automatically generate the file.

        With the way rcc and qmake work this can not be done at build time
        as the WebKit.qrc must sit inside the directory that contains the files
        and at build time we may not change the content of the source directory.

        * Scripts/generate-qt-inspector-resource: Added.

2008-12-11  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Mark Rowe.

        Roll out r39212 due to assertion failures during layout tests, multiple
        layout test failures, memory leaks, and obvious incorrectness.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):

2008-12-10  Glenn Wilson  <gwilson@google.com>

        Reviewed by Adam Roben.

        Changed LayoutTestController and DumpRenderTree to allow for manual
        overriding of default preferences at test time.  Also added support for
        resetting the preferences after each test.
        https://bugs.webkit.org/show_bug.cgi?id=20534

        * DumpRenderTree/LayoutTestController.cpp: Added callback method for overriding preferences
        * DumpRenderTree/LayoutTestController.h: Added signature for callback
        * DumpRenderTree/win/DumpRenderTree.cpp: Added calls to reset preferences after each test if necessary
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Added JS override function
        * DumpRenderTree/mac/DumpRenderTree.mm: Added calls to reset preferences after each test if necessary
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Added JS override function

2008-12-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Implement the new policy delegate (including navigation type and permissive mode) for DRT/win

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTreeWin.h:

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate):

        * DumpRenderTree/win/PolicyDelegate.cpp:
        (PolicyDelegate::PolicyDelegate):
        (PolicyDelegate::decidePolicyForNavigationAction):
        * DumpRenderTree/win/PolicyDelegate.h:
        (PolicyDelegate::setPermissive):

2008-12-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Change the custom policy delegate to actually allow navigation for tests that need it.
        The new behavior is opt-in and doesn't require any changes in old tests.

        * DumpRenderTree/LayoutTestController.cpp:
        (setCustomPolicyDelegateCallback):  Allow for a second boolean argument to set the permissive flag on the custom
          policy delegate, which will be false by default to maintain original behavior.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setCustomPolicyDelegate):

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate):  Partially stubbed out for now.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCustomPolicyDelegate):  Still stubbed out, but with new param.

        * DumpRenderTree/mac/PolicyDelegate.h:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):  If the permissive flag
          is set, allow the navigation.
        (-[PolicyDelegate setPermissive:]):  Change the behavior between "use" and "ignore" - allowing navigation or not.

2008-12-09  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Ada Chan.

        Fix gdb-safari on Tiger.

        gdb on Tiger does not take the -arch flag, so do not pass it.

        * Scripts/gdb-safari:

2008-12-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Ignore WML tests, if no WML support available.

        * Scripts/run-webkit-tests:

2008-12-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Added a shortcut for --jsDriver-args, which I use a lot.

        * Scripts/run-javascriptcore-tests:

2008-12-08  Stephanie Lewis  <slewis@apple.com>

        Fix Tiger build.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:

2008-12-08  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - test machinery for https://bugs.webkit.org/show_bug.cgi?id=22409
          REGRESSION: cmd-shift-left/right don't switch tabs, instead select text

        * DumpRenderTree/LayoutTestController.cpp:
        (isCommandEnabledCallback): Added.
        (LayoutTestController::staticFunctions): Added "isCommandEnabled".
        * DumpRenderTree/LayoutTestController.h: Ditto.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::isCommandEnabled): Ditto.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (-[CommandValidationTarget initWithAction:]): Added. Used to get the
        command validation system to tell us if a comment is enabled.
        (-[CommandValidationTarget action]): Ditto.
        (-[CommandValidationTarget tag]): Ditto.
        (LayoutTestController::isCommandEnabled): Ditto.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::isCommandEnabled): Ditto.

2008-12-08  David Kilzer  <ddkilzer@apple.com>

        Bug 22555: Sort "children" sections in Xcode project files

        <https://bugs.webkit.org/show_bug.cgi?id=22555>

        Reviewed by Eric Seidel.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj: Sorted.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Sorted.
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj: Sorted.

2008-12-08  David Kilzer  <ddkilzer@apple.com>

        Bug 22555: Sort "children" sections in Xcode project files

        <https://bugs.webkit.org/show_bug.cgi?id=22555>

        Reviewed by Timothy Hatcher.

        * Scripts/sort-Xcode-project-file: By popular request, don't sort
        the mainGroup in the project (the list of items below the top-level
        project file).

2008-12-05  David Kilzer  <ddkilzer@apple.com>

        Bug 22555: Sort "children" sections in Xcode project files

        <https://bugs.webkit.org/show_bug.cgi?id=22555>

        Reviewed by Darin Adler.

        Sort "children" sections alphabetically, moving groups (folders) to
        the top of each of the lists.  Files are assumed to have extensions,
        so %isFile is used to override this behavior.

        * Scripts/sort-Xcode-project-file:
        (sortChildrenByFileName): Added.
        (sortFilesByFileName): Renamed from sortByFileName().

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

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=22683
        Fix gtk and qt builds which depend on --qt and --gtk being removed from ARGV
        Add a new argumentsForConfiguration() function and clean up some old code to use it.
        Rename checkArgV to checkForArgumentAndRemoveFromARGV to be more self-documenting.

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-12-03  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Cameron Zwarich.

        Further preparations for WML layout tests.
        Ignore WMLTestCase.js, that's going to be in trunk soon.

        * Scripts/make-js-test-wrappers:

2008-12-03  Eric Seidel  <eric@webkit.org>

        Build fix for --gtk and --chromium, no review.

        Fix run-javascriptcore-tests to pass --gtk, --qt, --chromium, etc.
        through to build-jsc.

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

2008-12-03  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Remove support for build-webkit --svg-experimental.
        All of the "experimental" svg features have their own toggles anyway.
        I broke --svg-experimental in my last commit (which then broke clean builds)
        I can't find any use of --svg-experimental in our source tree, so removing it.

        * Scripts/build-webkit:

2008-12-02  Eric Seidel  <eric@webkit.org>

        Reviewed by David Hyatt (and Mark Rowe).

        Move --coverage support from build-webkit to webkitdirs.pm to share it with build-jsc
        Move --coverage support out of run-javascriptcore-tests and into build-jsc

        Finally add a buildXCodeProject function to webkitdirs.pm and move --clean support
        there from build-webkit (to allow future sharing with other build-* scripts)

        Change run-javascriptcore-tests to expect a --jsDriver-args= argument instead of
        picking through ARGV with a blacklist of what arguments weren't jsDriver args
        this makes run-javascriptcore-tests transparently support all arguments which
        webkitdirs.pm gives it support for.

        Make run-javascriptcore-tests actually print what commands it's running before running them.

        Add --help support to build-jsc and run-javascriptcore-tests!

        Make code to support --svg-experimental defaults take up half as many lines.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitdirs.pm:

2008-12-03  Adam Roben  <aroben@apple.com>

        Fix a leak in WinLauncher shutdown

        Reviewed by Sam Weinig.

        * WinLauncher/WinLauncher.cpp:
        (_tWinMain): Replaced a delete with a Release. We can't delete the
        WebView properly since we only have a pointer to one of its
        interfaces. We also shouldn't be deleting COM objects directly anyway,
        for a number of reasons.

2008-12-03  Adam Roben  <aroben@apple.com>

        Fix a crash on exit in WinLauncher

        Reviewed by Sam Weinig.

        * WinLauncher/WinLauncher.cpp:
        (_tWinMain): Call shutDownWebKit before exiting.

2008-12-03  Adam Roben  <aroben@apple.com>

        Add a Debug_Internal configuration to WinLauncher

        This matches our other projects.

        Reviewed by Sam Weinig.

        * WinLauncher/WinLauncher.vcproj: Added a Debug_Internal
        configuration, which is identical to Debug except that it also
        references debug_internal.vsprops. Also removed some settings that we
        should be picking up from the .vsprops files.

2008-12-02  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        Hack build-webkit --chromium to use Win32 python instead
        of using the default cygwin python.  Scons + CYGWIN tries
        to build with GCC by default, we force MSVC in our file
        but that just results in errors from Scons.  Until we can fix
        this latest round of errors, at least make build-webkit --chromium
        actually "work" under CYGWIN instead of forcing users to use
        a cmd shell directly.

        This is working around a Scons bug:
        http://scons.tigris.org/issues/show_bug.cgi?id=2266

        * Scripts/webkitdirs.pm:

2008-12-01  David Kilzer  <ddkilzer@apple.com>

        Bug 22466: REGRESSION (35867): Many resources missing when saving webarchive of webkit.org

        <https://bugs.webkit.org/show_bug.cgi?id=22466>
        <rdar://problem/6403593>

        Reviewed by Brady Eidson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (normalizeHTTPResponseHeaderFields): Added.  Normalizes Date, Etag,
        Keep-Alive, Last-Modified and Server header fields to prevent false
        positive test failures.
        (convertWebResourceResponseToDictionary): Call
        normalizeHTTPResponseHeaderFields() to noramlize HTTP response
        header fields.

2008-12-01  David D. Kilzer  <ddkilzer@webkit.org>

        Bug 22559: Report builds left to test in bisect-builds (like git-bisect)

        <https://bugs.webkit.org/show_bug.cgi?id=22559>

        Reviewed by Adam Roben.

        * Scripts/bisect-builds: Updated status message to report the
        maximum number of builds left to test after the current one.
        (max): Added.

2008-11-27  Alp Toker  <alp@nuanti.com>

        Build GtkLauncher and minidom with the '-ansi' compiler flag to detect
        API header breakage at build time.

        * GNUmakefile.am:

2008-11-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann and Mark Rowe.

        Add support for build-webkit --chromium
        https://bugs.webkit.org/show_bug.cgi?id=22515
        More cleanups changing isCygwin calls to isAppleWinWebKit and deploying isAppleWebKit where necessary.

        * Scripts/build-dumprendertree:
        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/gdb-safari:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-11-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Add support for build-webkit --chromium (tested on mac)
        https://bugs.webkit.org/show_bug.cgi?id=22515
        Also simplified some code using checkArgv

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

2008-11-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        More pre-work for adding a build-webkit --chromium which works on Mac and Windows
        https://bugs.webkit.org/show_bug.cgi?id=22515
        Change a few calls to isCygwin to isAppleWinWebKit and a few calls to isAppleMacWebKit to isDarwin
        in preparation for having a chromium cygwin and chromium mac build

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

2008-11-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Pre-work for getting build-webkit --chromium to work
        https://bugs.webkit.org/show_bug.cgi?id=22515
        Rename isOSX to isAppleMacWebKit to match what the code does, and add isChromium()

        * Scripts/build-dumprendertree:
        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/gdb-safari:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-11-26  David Kilzer  <ddkilzer@apple.com>

        Bug 22488: Make DRT smarter about charset encoding when post-processing webarchive content

        <https://bugs.webkit.org/show_bug.cgi?id=22488>

        Reviewed by Brady Eidson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (convertWebResourceDataToString): If an IANA charset encoding string
        is provided, convert it to a CFStringEncoding value and then to an
        NSStringEncoding value, else fall back to NSUTF8StringEncoding.  We
        also nil-check dataAsString, so the worst-case scenario is that the
        data won't be decoded to a string (versus crashing DumpRenderTree).

2008-11-26  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [Gtk] add/remove tests from Skipped and fix netscape plugin test
        https://bugs.webkit.org/show_bug.cgi?id=22484

        Remove print'ing to stderr

        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (NP_Initialize):
        (NP_Shutdown):

2008-11-25  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * DumpRenderTree/cg/PixelDumpSupportCG.h:

2008-11-25  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * DumpRenderTree/cg/ImageDiffCG.cpp:

2008-11-24  Darin Fisher  <darin@chromium.org>

        Fix bustage.

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

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

2008-11-24  Glenn Wilson  <gwilson@chromium.org>

        Reviewed by Alexey Proskuryakov.

        http://bugs.webkit.org/show_bug.cgi?id=15643

        Added support for changing the "trailing whitespace" work-around
        in LayoutTestController (so layout tests can verify this functionality)

        * DumpRenderTree/LayoutTestController.cpp:
        (setSelectTrailingWhitespaceEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setSelectTrailingWhitespaceEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setSelectTrailingWhitespaceEnabled):

2008-11-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        Add script that attempts to detect virtual methods
        whose signatures differ only by constness (which can
        indicate a programming error).

        * Scripts/detect-mismatched-virtual-const: Added.

2008-11-24  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Holger Freyther.

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

        [Gtk+] Implement TestNetscapePlugin for Gtk+ port and add it to the
        build.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (setDefaultsToConsistentStateValuesForTesting):
        * DumpRenderTree/gtk/TestNetscapePlugin/ForwardingHeaders/WebKit/npapi.h: Added.
        * DumpRenderTree/gtk/TestNetscapePlugin/ForwardingHeaders/WebKit/npfunctions.h: Added.
        * DumpRenderTree/gtk/TestNetscapePlugin/ForwardingHeaders/WebKit/npruntime.h: Added.
        * GNUmakefile.am:

2008-11-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        [Gtk+] Add configure option to enable Web Workers and enable it by default

        Add --enable-workers to the buildsystem (used by build-webkit) add
        the to be build files to the GNUmakefile.am and change build-webkit
        to enable Web Workers by default.

        * Scripts/build-webkit:

2008-11-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alexey Proskuryakov.

        Let gdb-safari accept the --debug and --release options once more.

        * Scripts/gdb-safari:

2008-11-23  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Holger Freyther. Landed by Jan Alonzo.

        Get SVG tests tested on GTK port.

        * Scripts/webkitdirs.pm:

2008-11-19  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        All static C++ objects that create atexit calls are gone. Update script
        to indicate how to fix the problem should a new one appear.

        * Scripts/check-for-exit-time-destructors:

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22337
        Enable workers by default

        * Scripts/build-webkit: Changed the default to enabled.

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22306
        Disable channel messaging support

        * Scripts/build-webkit: Add an option to enable channel messaging.

2008-11-17  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        Add --(no-)wml build flags.

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

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try to fix gtk build.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):

2008-11-17  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Maciej.

        Pixel tests should use a default tolerance of 0.1% on Leopard and 1.0%
        on Tiger.

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

        * Scripts/run-webkit-tests:

2008-11-17  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Sam Weinig.

        Added new JavaScript API on LayoutController to pause a running
        CSS transition or animation at a given time.

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

        * DumpRenderTree/LayoutTestController.cpp:
        (pauseAnimationAtTimeOnElementWithIdCallback):
        (pauseTransitionAtTimeOnElementWithIdCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):

2008-11-17  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        <https://bugs.webkit.org/show_bug.cgi?id=22309>
        Pass the remaining options to build system on Qt-port

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

2008-11-16  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Remove .o files from the exclude list that have had their exit-time destructors removed.
        Handle case when there is no current symbol.

        * Scripts/check-for-exit-time-destructors:

2008-11-16  Sam Weinig  <sam@webkit.org>

        * Scripts/do-webcore-rename: Remove now fixed renames.

2008-11-16  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Plan some future renames.

2008-11-15  Darin Adler  <darin@apple.com>

        Rubber stamped by Geoff Garen.

        - do the long-planned StructureID -> Structure rename

        * Scripts/check-for-global-initializers: Update name of StructureID.o.
        * Scripts/do-webcore-rename: Renaming script that I used.

2008-11-15  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid
        exit-time destructor. Update code that was changed to fix this issue that ran
        into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference
        in gcc build 5465). Also typdefs for template types needed to be added in some
        cases so the type could make it through the macro successfully.

        Basically code of the form:
        static T m;
        becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        Also any code of the form:
        static T& m = *new T;
        also becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        Remove .o files from the exclude list that have had their exit-time destructors removed.

        * Scripts/check-for-exit-time-destructors:

2008-11-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx mac buildbot fix. Also, make sure we don't keep hitting this problem.

        * wx/install-unix-extras:

2008-11-14  Alp Toker  <alp@nuanti.com>

        GTK DRT build fix for gcc 4.4 snapshot. Add missing stdio include.

        Fixes Debian bug #505723
        http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=505723

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:

2008-11-14  Krishna <krishnamurty.podipireddy@nokia.com>

        Reviewed by Simon Hausmann.

        Fix hanging DRT with Qt.

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

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::dump):
        Send empty pixel test data 'block', which is now
        expected by run-layout-tests.

2008-11-12  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

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

        * Scripts/build-webkit:
        Addes ENABLE_WORKERS to build-webkit so it's possible to build with workers enabled.

2008-11-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Backed out r38189 (and r38203) for Xcode 3.0.

        Apparently older versions of gcc have issues with this patch.
        Backing out a second time until the issues are resolved.

2008-11-06  David Kilzer  <ddkilzer@apple.com>

        BUILD WAS NOT BROKEN: Rolling r38189 back in.

        Please perform a clean build if you see crashes.

2008-11-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Backed out r38189 since it apparently broke the world.

2008-11-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Add ability to query an attribute's settable status and the
        ability to retrieve a single attribute from an AXObject

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (isAttributeSettableCallback):
        (attributeValueCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (+[NSString stringWithJSStringRef:]):
        (AccessibilityUIElement::attributeValue):
        (AccessibilityUIElement::isAttributeSettable):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::attributeValue):
        (AccessibilityUIElement::isAttributeSettable):

2008-11-06  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        Bug 21810: Remove use of static C++ objects that are destroyed at exit time (destructors)
        https://bugs.webkit.org/show_bug.cgi?id=21810

        Remove .o files from the exclude list that have had their exit-time destructors removed.

        * Scripts/check-for-exit-time-destructors:

2008-11-05  Alp Toker  <alp@nuanti.com>

        GTK build script tweak.

        Make the path relative since it will appear in all -I compiler flags.
        Long argument lists cause bizarre slowdowns in libtool and result
        in huge build logs.

        * Scripts/webkitdirs.pm:

2008-11-05  Anders Carlsson  <andersca@apple.com>

        Fix 64-bit build.

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

2008-11-04  Simon Fraser  <simon.fraser@apple.com>

        Add AccessibilityObject.o to the exclude list for the
        check for global destructors.

        * Scripts/check-for-exit-time-destructors:

2008-11-04  Darin Adler  <darin@apple.com>

        * Scripts/check-for-exit-time-destructors: Fix failures seen on the
        bot, but for some reason not on my computer.

2008-11-03  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - https://bugs.webkit.org/show_bug.cgi?id=22061
          create script to check for exit-time destructors

        * Scripts/check-for-exit-time-destructors: Added.
        Started as a copy of check-for-global-initializers.

        * Scripts/check-for-global-initializers: Added code to make
        this script rerun any time it's modified, and also to properly
        run again after the first time it reports an error.

2008-11-03  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Dan Bernstein.

        Fixed the override of the "AppleScrollBarVariant" system setting to also work with HIToolbox.

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

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

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        * Scripts/do-webcore-rename:

        Add some renames to contemplate for the future.

2008-10-31  Darin Adler  <darin@apple.com>

        Requested by Mark Rowe.

        * Scripts/check-for-global-initializers: s/Web Kit/WebKit/.

2008-10-31  David Kilzer  <ddkilzer@apple.com>

        Bug 21997: prepare-ChangeLog should filter out ChangeLog files

        <https://bugs.webkit.org/show_bug.cgi?id=21997>

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (generateFileList): Don't add ChangeLog files to %{$functionLists}.
        This prevents them from showing up in the new ChangeLog entry.  They
        were already excluded from @{$changedFiles}.

2008-10-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Homeycutt.

        Explicitly default to building for only the native architecture in debug and release builds.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:

2008-10-30  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Dan Bernstein.

        Fixed 64 bit build failure.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (setupMainDisplayColorProfile):
        (createBitmapContextFromWebView):

2008-10-28  Alp Toker  <alp@nuanti.com>

        Fix GTK DRT following build breakage in r37928.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump):
        (runTest):
        (main):

2008-10-28  Alp Toker  <alp@nuanti.com>

        Reviewed by Mark Rowe.

        Fix recently introduced double-free crashes in GTK DRT.

        LayoutTestController was made ref-counted in r36606 and Mac/Win DRT
        were updated to call ->deref() but GTK DRT was still deleting
        gLayoutTestController manually. This patch updates GTK to match the
        other ports and resolves the memory allocation issues.

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

2008-10-28  Alp Toker  <alp@nuanti.com>

        Reviewed by Mark Rowe.

        Fix GTK DRT hang when running the tests.

        Update output from the DRT tool to print an additional '#EOF' to match
        breaking changes that were made in r37434.

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

2008-10-28  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        Specify which Localizable.strings to update since we don't always want to update the file in the same
        directory where we're searching for the strings to localize.

        * Scripts/extract-localizable-strings:
        * Scripts/update-webkit-localizable-strings:

2008-10-28  Timothy Hatcher  <timothy@apple.com>

        Add support for enabling the profiler, so the profiling tests can continue
        work now that the profiler is not always enabled.

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

        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
        not slow down JavaScript all the time

        Reviewed by Darin Adler and Kevin McCullough.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Make the editor use spaces.
        * DumpRenderTree/LayoutTestController.cpp:
        (setJavaScriptProfilingEnabledCallback): Added. Calls LayoutTestController::setJavaScriptProfilingEnabled.
        (LayoutTestController::staticFunctions): Added setJavaScriptProfilingEnabled to the script class.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled): Stubbed out with a FIXME.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): Disables the developer extras and disables the profiler.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setJavaScriptProfilingEnabled): Toggles the developer extras and profiler.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting): Disables the developer extras and disables the profiler.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled): Toggles the developer extras and profiler.

2008-10-28  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Dan Bernstein

        Primary changes in DumpRenderTree:
        - Ensure font smoothing is disabled (this is also called LCD anti-aliasing and
        is different from regular font CG anti-aliasing) as font-smoothing settings
        depends on the display and can also be changed by the user
        - Use a new cleared buffer for each test instead of the reusing same one to
        avoid potential result corruption across tests
        - Can now receive the expected pixel hash as a suffix to the test path or
        url as "path'hash"
        - Make sure hash is computed in a endian-independent way
        - Improve the code that sets/restores the screen color profile
        - Make the code more cross-platformy with std::string goodness
        - Added an "on-screen" mode where the snapshot will take into account surfaces
        on the window (like OpenGL content): this uses the new CG APIs on 10.5 or
        reading from the display framebuffer on 10.4. This mode is not active by
        default for performance reason, but must be explicitly activated from the test
        file using the new "testOnscreen()" JS API.

        Primary changes in ImageDiff:
        - Provide a new comparison algorithm that is more tolerant to "acceptable"
        failures (i.e. very small differences in font rendering, which --threshold is
        not really good at handling)
        - Generate normalized intensity-only diff images

        Primary changes in run-webkit-tests:
        - Take advantage of hashes for pixel tests which makes them much faster by
        minimizing image comparisons
        - Removed repaint options as these should be set from within test files using
        JS API
        - Replaced "threshold" option in  by "tolerance" expressed in percents
        - Added more logging when in "verbose" mode

        https://bugs.webkit.org/show_bug.cgi?id=21322
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ForwardingHeaders/wtf/PassRefPtr.h: Copied from JavaScriptGlue/ForwardingHeaders/wtf/PassRefPtr.h.
        * DumpRenderTree/ForwardingHeaders/wtf/RefPtr.h: Copied from JavaScriptGlue/ForwardingHeaders/wtf/RefPtr.h.
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (testOnscreenCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::testOnscreen):
        (LayoutTestController::setTestOnscreen):
        (LayoutTestController::testPathOrURL):
        (LayoutTestController::expectedPixelHash):
        * DumpRenderTree/PixelDumpSupport.h:
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (strtof):
        (releaseMallocBuffer):
        (createDifferenceImage):
        (imageHasAlpha):
        (main):
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (computeMD5HashStringForBitmapContext):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        (BitmapContext::createByAdoptingBitmapAndContext):
        (BitmapContext::~BitmapContext):
        (BitmapContext::cgContext):
        (BitmapContext::BitmapContext):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldIgnoreWebCoreNodeLeaks):
        (setDefaultsToConsistentValuesForTesting):
        (crashHandler):
        (initializeGlobalsFromCommandLineOptions):
        (prepareConsistentTestingEnvironment):
        (dumpRenderTree):
        (sizeWebViewForCurrentTest):
        (dump):
        (runTest):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (restoreMainDisplayColorProfile):
        (setupMainDisplayColorProfile):
        (createBitmapContextFromWebView):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (runTest):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (getBitmapContextFromWebView):
        * Scripts/run-webkit-tests:

2008-10-27  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix on Linux/GTK. Enable support for #include <JavaScriptCore/XYZ.h> style includes.

        * wx/build-wxwebkit:

2008-10-24  Anders Carlsson  <andersca@apple.com>

        Try fixing the 64-bit build.

        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp:
        (testGetProperty):

2008-10-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/5440917> Support NPN_Construct

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testCallback):
        Fix a memory leak.

        (testConstruct):
        New test method that treats it first argument as a constructor and invokes it with the rest of the arguments.

        (pluginInvoke):
        Handle testConstruct.

        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp:
        (testGetProperty):
        Add objectPointer property.

        (testEnumerate):
        Only enumerate the two first properties.

        (testConstruct):
        Add a simple construct implementation that just returns the test object.

2008-10-24  David Kilzer  <ddkilzer@apple.com>

        Bug 21850: svn-apply and svn-unapply should preserve patch line endings

        <https://bugs.webkit.org/show_bug.cgi?id=21850>

        Reviewed by Adam Roben.

        * Scripts/svn-apply: Save end-of-line characters when stripping them
        off each line of a patch so that they may be restored after
        processing the line.
        * Scripts/svn-unapply: Ditto.

2008-10-23  David Kilzer  <ddkilzer@apple.com>

        Bug 21832: Fix scripts using 'new File::Temp' for Perl 5.10

        <https://bugs.webkit.org/show_bug.cgi?id=21832>

        Reviewed by Sam Weinig.

        * Scripts/bisect-builds: Use imported tempfile() from File::Temp
        instead of 'new File::Temp' to make the script work with Perl 5.10.
        * Scripts/sort-Xcode-project-file: Ditto.

2008-10-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        <rdar://6261773> - autocomplete="off" doesn't work on Windows

        Implement LayoutTestController::elementDoesAutoCompleteForElementWithId() on Windows

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:

2008-10-22  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming plans.

2008-10-21  Steve Falkenburg  <sfalken@apple.com>

        Exclude strings marked with UNLOCALIZED_STRING or UNLOCALIZED_LPCTSTR.

        * Scripts/extract-localizable-strings:

2008-10-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        - default to 1000 tests per dump tool instance again, now that CTI no longer causes
        excess different stack logs.

        (Also fix a small bug in my last change.)

        * Scripts/run-webkit-tests:

2008-10-17  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe.

        Fix layout tests that use prologues and epilogues.

        * Scripts/run-webkit-tests:

2008-10-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        - make sure MallocStackLogging is only on for tools we want to
        leak check, not other random stuff as well.

        * Scripts/run-webkit-tests:

2008-10-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Stephanie Lewis.

        - make run-webkit-tests --leaks default to 100 tests per run instead of 1000

        This should reduce or eliminate crashes on the buildbot due to
        running out of memory while stack logging.

        * Scripts/run-webkit-tests:

2008-10-16  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix. Not reviewed.

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

2008-10-15  Glenn Wilson  <gwilson@google.com>

        Added new method to allow tests to disable smart editing in the course of a test.
        This is a possible solution to bug .20655

        Reviewed by Tim Hatcher.

        * DumpRenderTree/LayoutTestController.cpp:
        (setSmartInsertDeleteEnabledCallback): new method
        (LayoutTestController::staticFunctions): added new method to static list of callbacks
        * DumpRenderTree/LayoutTestController.h: added signature of new method
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): added state resetting
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setSmartInsertDeleteEnabled): added new method
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting): added state resetting
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setSmartInsertDeleteEnabled): added new method

2008-10-14  Ada Chan  <adachan@apple.com>

        Fix windows build.

        Reviewed by Sam Weinig.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        * DumpRenderTree/config.h:
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:

2008-10-13  Timothy Hatcher  <timothy@apple.com>

        Make prepare-ChangeLog populate the changed functions for JavaScript files.

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

        Reviewed by David Kilzer.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges): Call get_function_line_ranges_for_javascript for
        files that end with ".js".
        (get_function_line_ranges_for_javascript): Find functions, anonymous functions
        and getters/setters.

2008-10-14  Alp Toker  <alp@nuanti.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=16299
        Add a config.h file to DRT

        Add a config.h to DumpRenderTree and reduce use of DumpRenderTree.h as
        an ad-hoc config header.

        * DumpRenderTree/AccessibilityController.cpp:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/GCController.cpp:
        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/WorkQueue.cpp:
        * DumpRenderTree/config.h: Added.
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/GCControllerGtk.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/EditingDelegate.cpp:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/GCControllerWin.cpp:
        * DumpRenderTree/win/MD5.cpp:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        * DumpRenderTree/win/PolicyDelegate.cpp:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        * GNUmakefile.am:

2008-10-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Added a method to get the links in a webpage

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (attributesOfDocumentLinksCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::getDocumentLinks):
        (AccessibilityUIElement::attributesOfDocumentLinks):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::getDocumentLinks):
        (AccessibilityUIElement::attributesOfDocumentLinks):

2008-10-13  David Kilzer  <ddkilzer@apple.com>

        Bug 21457: resolve-ChangeLogs should be able to operate on a git revision range

        <https://bugs.webkit.org/show_bug.cgi?id=21457>

        Reviewed by Adam.

        * Scripts/resolve-ChangeLogs: Added optional parameter to
        -f|--fix-merged switch to run the script on a revision range.
        Updated command-line validation checks.
        (findChangeLog): Fixed long-standing bug that should have used
        $_[0] instead of $_.
        (fixMergedChangeLog): Renamed to fixOneMergedChangeLog($).  Updated
        to work when called from git filter-branch.  It always restores a
        copy of the previous revision before reapplying the patch.
        (fixMergedChangeLogs): Added.  Calls itself through git filter-branch
        to re-merge ChangeLog files across a revision range.  Removes
        .git/refs/original directory on success.
        (parseFixMerged): Added.  Custom method to parse the -f|--fix-merged
        switch.
        (removeChangeLogArguments): Added.  Removes items from @ARGV when
        they are ChangeLog paths, and return a list of paths.  This makes it
        easier to validate the command-line.
        (resolveChangeLog): Added.  Extracted from main code block.  Runs
        the traditional single-file merge algorithm.
        (usageAndExit): Added.  Extracted from main code block.  Prints
        usage statement and exits with error status.

2008-10-12  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Update exceptions list so the script
        won't overwrite files and mangle tests.

2008-10-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig and Anders Carlsson.

        - update Mac DumpRenderTree to use the new WebView SPI for forcing the
          complex text code path
        - add --complex-text support to Windows DumpRenderTree

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (createWebViewAndOffscreenWindow):
        (main):
        * Scripts/run-webkit-tests:

2008-10-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

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

        * Scripts/make-js-test-wrappers: ignore resources/shadow-offset.js

2008-10-09  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Add StructureID.o to the exclusion list in the global initializers
        script to fix the Debug build.

        * Scripts/check-for-global-initializers:

2008-10-08  Mark Rowe  <mrowe@apple.com>

        Fix the Windows build after r37434.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump): Update code to approximate valid C++ syntax.

2008-10-08  Timothy Hatcher  <timothy@apple.com>

        Add SVGElementInstance to the list of exceptions that have
        global initializers in debug builds.

        Rubber-stamped by Mark Rowe.

        * Scripts/check-for-global-initializers: Add SVGElementInstance.o.

2008-10-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        Avoid disconnect between DRT and run-webkit-tests
        about whether to expect PNG dumps by having DRT always
        print two blocks terminated by #EOF, the second of which
        may be empty.

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

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        * Scripts/run-webkit-tests:

2008-10-07  Adam Roben  <aroben@apple.com>

        Make sure short functions get included in ChangeLog output for git
        repositories

        Reviewed by Dave Kilzer.

        * Scripts/prepare-ChangeLog:
        (sub diffCommand): Pass -U0 to git diff so that each contiguous change
        will get its own chunk without any surrounding context.
        (sub extractLineRange): Use the line numbers from the chunk header
        without modifying them now that they're accurate.

2008-10-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Update check-for-weak-vtables to check only the final linked image for weak vtables.
        This gives more useful results than checking each object file independently.

        * Scripts/check-for-weak-vtables:

2008-10-03  Pierre-Olivier Latour <pol@apple.com>

        Reviewed by Darin Adler

        Render images to RGBA8 bitmaps independently of platform endianness.

        Create image difference bitmap in reference image colorspace instead of device colorspace
        (which depends on the main display profile), so that no color matching happens.

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

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (createDifferenceBitmap):
        (computePercentageDifferent):
        (compareImages):

2008-10-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        Fix hang when running with --pixel --reset, which occurs
        because DRT spews PNG data when the script does not expect it.

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

        * Scripts/run-webkit-tests:

2008-09-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Add a leak counter for CachedResources since we've had two recent leaks involving them.

        * Scripts/check-for-global-initializers:

2008-09-30  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Fix many leaks seen on fast/backgrounds/svg-as-background-1.html.

        JavaScript wrappers were keeping DOM objects alive, which was leading to the SVG background image
        being kept alive in the memory cache past our last attempt to empty the cache prior to quitting.
        We need to empty the memory cache after forcing a JavaScript garbage collection to ensure that
        any live JavaScript wrappers are collected and their corresponding DOM objects have a chance to be
        torn down before we exit.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        (main):

2008-09-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        Don't run pixel comparison for text-only tests.
        https://bugs.webkit.org/show_bug.cgi?id=21124

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * Scripts/run-webkit-tests:

2008-09-29  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon.

        Changed copyright from Trolltech ASA to Nokia.

        Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008.


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        * DumpRenderTree/qt/jsobjects.cpp:
        * DumpRenderTree/qt/jsobjects.h:
        * DumpRenderTree/qt/main.cpp:
        * DumpRenderTree/qt/testplugin.cpp:
        * DumpRenderTree/qt/testplugin.h:

2008-09-28  David Kilzer  <ddkilzer@apple.com>

        Bug 21185: resolve-ChangeLogs should be able to fix poorly merged ChangeLog entries after a git svn rebase

        <https://bugs.webkit.org/show_bug.cgi?id=21185>

        Reviewed by Adam.

        * Scripts/resolve-ChangeLogs: Added new -f|--fix-merge switch that
        will attempt to reapply the last commit to a ChangeLog file such
        that the ChangeLog entry appears at the top of the file.
        (findChangeLog): Added prototype and moved method below the exit
        statement.
        (fixMergedChangeLog): Added.  Method to fix incorrectly merged
        ChangeLog entries.

2008-09-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21178
        <rdar://problem/6248651>

        Return the result value from getURL.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (getURL):

2008-09-26  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed.

        * Scripts/build-webkit:

2008-09-26  Alice Liu  <alice.liu@apple.com>

        Remove usage of atlstr.h and CString for VCExpress compatibility

        Reviewed by Stephanie Lewis.

        * record-memory-win/main.cpp:
        (ProcessArgs):
        (UseImage):
        (QueryContinuously):
        (OneQuery):
        (OneQueryMP):

2008-09-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Update the version of libpng.

        * wx/install-unix-extras:

2008-09-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21080
        <rdar://problem/6243534>
        Crash below Function.apply when using a runtime array as the argument list

        Add method to ObjCController to return a runtime array.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController testArray]):

2008-09-24  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Speculative build fix.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::supportsPressAction):

2008-09-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        This patch extends DumpRenderTree's AccessibilityController to ask
        if the focused element supports the press action.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getSupportsPressActionCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::supportsPressAction):

2008-09-22  Alice Liu  <alice.liu@apple.com>

        Adding a stand-alone Windows console application to record a process's memory usage

        Reviewed by Steve Falkenburg.

        * record-memory-win: Added.
        * record-memory-win/main.cpp: Added.
        * record-memory-win/record-memory-win.vcproj: Added.

2008-09-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Support ability to get/set selected text ranges for text controls through AX.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (setSelectedTextRangeCallback):
        (getSelectedTextRangeCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfVisibleCells):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::selectedTextRange):
        (AccessibilityUIElement::setSelectedTextRange):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::selectedTextRange):
        (AccessibilityUIElement::setSelectedTextRange):

2008-09-20  Darin Adler  <darin@apple.com>

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (convertMIMEType): Turn on Stephanie's workaround for Tiger too.

2008-09-19  Alp Toker  <alp@nuanti.com>

        Build fix for the 'gold' linker and recent binutils. New behaviour
        requires that we link to used libraries explicitly.

        * GNUmakefile.am:

2008-09-19  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.

        Implement a workaround for an incorrect mime-type on machines with
        Dashcode 2.0.1.  Dashcode is overriding the UTI type for .js files.
        See radar <rdar://problem/6234318>.

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

2008-09-19  Chris Fleizach  <cfleizach@apple.com>

        Fixed Windows bustage

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::titleUIElement):

2008-09-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Expose titleUIElement call for DumpRenderTree

        * ChangeLog:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (titleUIElementCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::titleUIElement):

2008-09-18  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming plans.

2008-09-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Clear the main frame's name between tests to get more consistent test results
        when running the WebKit tests with --nthly.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):

2008-09-18  Stephanie Lewis  <slewis@apple.com>

        Really fix tiger jsc tests.

        * Scripts/run-javascriptcore-tests:

2008-09-18  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix jsc tests on Tiger.  Make jsc tests smarter about when to use the arch flag.

        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitdirs.pm:

2008-09-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Print warning to stdout rather than stderr when a test attempts to access a remote resource.
        This should make it more obvious when a test does this, as stderr output tends to be obscured
        by noise in the test results.

        Also fixes some coding style issues in ResourceLoadDelegate.mm.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSError _drt_descriptionSuitableForTestResult]):
        (-[NSURL _drt_descriptionSuitableForTestResult]):
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willCacheResponse:fromDataSource:]):

2008-09-18  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe and Maciej Stachowiak..

        add a --64-bit option and specify which architecture to run on Mac.

        * Scripts/run-javascriptcore-tests:

2008-09-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix a crash seen running DumpRenderTree on fast/dom/null-document-window-open-crash.html under guard malloc.

        The JS wrapper for LayoutTestController could outlive the wrapped instance, and would crash when
        attempting to access the wrapped instance within layoutTestControllerObjectFinalize. We fix this by making
        LayoutTestController ref-counted to ensure that it is not outlived by the JS wrapper.

        * DumpRenderTree/ForwardingHeaders/wtf/RefCounted.h: Copied from JavaScriptGlue/ForwardingHeaders/wtf/RefCounted.h.
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (notifyDoneCallback): Remove code that is no longer needed now that we must always have a wrapped instance.
        (layoutTestControllerObjectFinalize): Deref the wrapped object.
        (LayoutTestController::makeWindowObject): Ref the wrapped object.
        * DumpRenderTree/LayoutTestController.h: Make LayoutTestController RefCounted.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest): Deref the LayoutTestController object rather than explicitly deleting it.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Remove code that is no longer needed.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Deref the LayoutTestController object rather than explicitly deleting it.

2008-09-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add flag to disable running sample on tests that timeout.

        * Scripts/run-webkit-tests:

2008-09-16  Adam Roben  <aroben@apple.com>

        Windows build fix after r36511

        Update for rename of layoutTestController to gLayoutTestController.

        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/win/EditingDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:

2008-09-16  Adam Roben  <aroben@apple.com>

        Add a script to print out the dependency tree of a Visual Studio
        solution file

        * Scripts/print-msvc-project-dependencies: Added.

2008-09-16  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * DumpRenderTree/LayoutTestController.cpp:
        (notifyDoneCallback): Call fprintf in a safer manner.

2008-09-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Protect against tests that call layoutTestController.notifyDone()
        more than once, which would lead to memory corruption, by nulling
        out the LayoutTestController on the JSObjectRef on destruction. Also
        add a finalize callback on the class so that if the LTC outlives
        the JSObjectRef, the JSObjectRef backpointer on the LTC can be
        nulled out.

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

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (notifyDoneCallback):
        (layoutTestControllerObjectFinalize):
        (LayoutTestController::makeWindowObject):
        (LayoutTestController::getJSClass):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::~LayoutTestController):

2008-09-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Step 1 patch: rename global variable for clarity.
        https://bugs.webkit.org/show_bug.cgi?id=20875

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dump):
        (runTest):
        (processWork):
        (webViewLoadFinished):
        (webViewWindowObjectCleared):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allocateGlobalControllers):
        (dumpFrameScrollPosition):
        (dumpFramesAsText):
        (methodNameStringForFailedTest):
        (dump):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/EditingDelegate.mm:
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):
        (-[UIDelegate webViewFocus:]):
        (-[UIDelegate webViewUnfocus:]):
        (-[UIDelegate webView:createWebViewWithRequest:]):
        (-[UIDelegate webViewClose:]):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpFrameScrollPosition):
        (dumpFramesAsText):
        (dump):
        (runTest):

2008-09-15  Alice Liu  <alice.liu@apple.com>

        A change needed to make PPC bots pass accessibility/table-cell-spans.html layout test

        Reviewed by Stephanie Lewis.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        Calling -[NSValue rangeValue] on nil object was returning bogus results on PPC,
        but not Intel.  Add a check for nil before calling.
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):

2008-09-14  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (waitUntilDoneWatchdogFired):
        * DumpRenderTree/mac/ObjCPlugin.m:

2008-09-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - add an option to run-webkit-tests to always use the complex text code path

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (dumpRenderTree):
        * Scripts/run-webkit-tests:

2008-09-08  Steve Falkenburg  <sfalken@apple.com>

        Another Windows nightly build fix.

        Reviewed by Sam Weinig.

        * FindSafari/FindSafari.cpp:
        (_tmain): Delete existing WebKitNightly directory in temp.
        * FindSafari/Safari.exe.manifest: Add PROGIDs for each COM class. Remove non-production classes.

2008-09-07  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe.

        Fix DRT build

        * DumpRenderTree/DumpRenderTreePrefix.h:
        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-09-06  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows nightlies.

        Copy WebKit.dll alongside application so registry-free COM can find it.
        Update embedded manifest to force use registry-free COM.

        Reviewed by Dave Hyatt.

        * FindSafari/FindSafari.cpp:
        (copyManifest):
        (replaceManifest):
        (_tmain):
        * FindSafari/FindSafari.rc: Added.
        * FindSafari/FindSafari.vcproj:
        * FindSafari/Safari.exe.manifest: Added.
        * FindSafari/resource.h: Added.

=== End merge of squirrelfish-extreme ===

2008-08-31  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        Add a --profile flag to run-sunspider.

        * Scripts/webkitdirs.pm: Detect --profile or --profiling passed as a command-line argument
        to build scripts as indicating that we should use the "Profiling" configuration.  At present
        this is only supported by JavaScriptCore, so using this argument to build any other project
        will likely result in unexpected behaviour.

2008-08-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Fix run-webkit-tests to handle DRT exiting early.

        * Scripts/run-webkit-tests: Initialize $expectedResultPaths{$base} before it will be used.

=== Start merge of squirrelfish-extreme ===

2008-09-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric Seidel.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20639.
        Bug 20639: ENABLE_DASHBOARD_SUPPORT does not need to be a FEATURE_DEFINE

        * Scripts/build-webkit: Remove ENABLE_DASHBOARD_SUPPORT-related code.

2008-09-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 20616: Incorporate V8 benchmarks in testing
        <https://bugs.webkit.org/show_bug.cgi?id=20616>

        Add support for the --v8 option to run-sunspider.

        * Scripts/run-sunspider:

2008-09-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx buildbot fix. More robust handling of clean when makefiles are not built or
        are not completely made.

        * wx/build-wxwebkit:

2008-09-03  Mark Rowe  <mrowe@apple.com>

        More Mac build fixes.

        Set ENABLE_DASHBOARD_SUPPORT when building for Mac via build-webkit.
        Also set ENABLE_CROSS_DOCUMENT_MESSAGING in order to match the
        default configuration specified in the .xcconfig files.

        * Scripts/build-webkit:

2008-09-03  Mark Rowe  <mrowe@apple.com>

        Mac build fix.  Ensure that dashboard support is enabled.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2008-08-25  Steve Falkenburg  <sfalken@apple.com>

        Build fix. Copy correct version of ICU.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-08-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [run-webkit-tests] Use QtLauncher to show the results of the tests
        konqueror might not be installed, xdg-open might not be installed but the
        QtLauncher should be present.

        * Scripts/run-webkit-tests:

2008-08-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Initial support for accessibility layout tests on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=20497

        Reviewed by Sam Weinig.

        * DumpRenderTree/AccessibilityController.h: Fix typos.
        * DumpRenderTree/AccessibilityUIElement.cpp: Change #import to #include.
        * DumpRenderTree/AccessibilityUIElement.h: Define _WINSOCKAPI_ to
        prevent oleacc.h, which includes windows.h, from including winsock.h.
        Fixed typos.
        * DumpRenderTree/win/AccessibilityControllerWin.cpp: Added.
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::focusedElement): Get the root element, and
        request its focused object.
        (AccessibilityController::rootElement): Query Windows for the
        accessible client object for the WebView's window.
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp: Added.
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::~AccessibilityUIElement):
        (AccessibilityUIElement::getLinkedUIElements): Not implemented.
        (AccessibilityUIElement::getChildren): Get the child count, and append
        each child.
        (AccessibilityUIElement::getChildAtIndex): Get the child at the given
        index offset by 1. In MSAA, child 0 is the object itself.
        (AccessibilityUIElement::allAttributes): Not implemented.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Same.
        (AccessibilityUIElement::attributesOfChildren): Same.
        (AccessibilityUIElement::parameterizedAttributeNames): Same.
        (self): Return a VARIANT representing the "self" object. This is used
        when calling methods that require a child variant.
        (AccessibilityUIElement::role): Get the MSAA role, a long value, and
        convert it into a string with GetRoleText().
        (AccessibilityUIElement::title): Get the element's title, and convert
        it to a JS String.
        (AccessibilityUIElement::description): Same, for description.
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::intValue): Get the object's value as a string,
        and convert the string to a double.
        (AccessibilityUIElement::minValue): Not implemented.
        (AccessibilityUIElement::maxValue): Same.
        (AccessibilityUIElement::insertionPointLineNumber): Same.
        (AccessibilityUIElement::attributesOfColumnHeaders): Same.
        (AccessibilityUIElement::attributesOfRowHeaders): Same.
        (AccessibilityUIElement::attributesOfColumns): Same.
        (AccessibilityUIElement::attributesOfRows): Same.
        (AccessibilityUIElement::attributesOfVisibleCells): Same.
        (AccessibilityUIElement::attributesOfHeader): Same.
        (AccessibilityUIElement::indexInTable): Same.
        (AccessibilityUIElement::rowIndexRange): Same.
        (AccessibilityUIElement::columnIndexRange): Same.
        (AccessibilityUIElement::lineForIndex): Same.
        (AccessibilityUIElement::boundsForRange): Same.
        (AccessibilityUIElement::cellForColumnAndRow): Same.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Add accessibility files to
        project.  Link to oleacc.lib, the MSAA library.
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::FrameLoadDelegate): Initialize the accessibility
        controller.
        (FrameLoadDelegate::didClearWindowObject): Create a new window object
        for the accessibility controller.
        * DumpRenderTree/win/FrameLoadDelegate.h:

2008-08-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe

        Make build-launcher-app work when run from a git repository.
        https://bugs.webkit.org/show_bug.cgi?id=20478

        * BuildSlaveSupport/build-launcher-app:

2008-08-20  Maxime Britto  <britto@apple.com>

        Reviewed by Ada Chan.

         rdar://5259746
        Mouse events are sent to page while resizing window (affects Gmail)

        * DumpRenderTree/win/UIDelegate.h:
        (UIDelegate::webViewSendResizeMessage): Add the new interface method, not implemented.

2008-08-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Add snowleopard platform in layout tests

        Added support for accessing the attributes of
        accessibility tables through the accessibility controller
        in DumpRenderTree

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (attributesOfColumnHeadersCallback):
        (attributesOfRowHeadersCallback):
        (attributesOfColumnsCallback):
        (attributesOfRowsCallback):
        (attributesOfVisibleCellsCallback):
        (attributesOfHeaderCallback):
        (indexInTableCallback):
        (rowIndexRangeCallback):
        (columnIndexRangeCallback):
        (childAtIndexCallback):
        (cellForColumnAndRowCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (convertNSArrayToVector):
        (descriptionOfElements):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::attributesOfLinkedUIElements):
        (AccessibilityUIElement::attributesOfChildren):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfColumns):
        (AccessibilityUIElement::attributesOfRows):
        (AccessibilityUIElement::attributesOfVisibleCells):
        (AccessibilityUIElement::attributesOfHeader):
        (AccessibilityUIElement::indexInTable):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::cellForColumnAndRow):
        * Scripts/run-webkit-tests:

2008-08-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Fix run-webkit-tests misreporting crashed tests as timed out ones because DumpRenderTree
        is waiting for crash reporter to let it exit.

        The fix does not work on Tiger, because the state of the process is indistinguishable from
        other waiting processes, at least not with this technique.

        * Scripts/run-webkit-tests:

2008-08-18  Alp Toker  <alp@nuanti.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=20350
        [GTK] Get DumpRenderTree working

        Fixes and enhancements to DumpRenderTree. With these changes, the test
        suite can now complete a run producing text and render tree dumps.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dump):
        (runTest):
        (webViewLoadFinished):
        (webViewWindowObjectCleared):
        (webViewConsoleMessage):
        (webViewScriptAlert):
        (webViewScriptPrompt):
        (webViewScriptConfirm):
        (webViewTitleChanged):
        (main):
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::pathToLocalResource):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (waitToDumpWatchdogFired):
        (LayoutTestController::windowCount):
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (JSStringCopyUTF8CString):
        (ScriptItem::invoke):

2008-08-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Updated project files to XCode 3.1.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2008-08-15  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Geoff Garen.

        <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework

        * Scripts/check-for-global-initializers: Ignore initializers when building the debug variant.

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Holger.

        Revert r31585 and disable http tests for the Qt build again unless
        explicitly enabled.

        Running the http tests unfortunately currently still triggers
        failures in non-http tests due to side-effects. Disable them by default for
        now, for more reliable results.

        * Scripts/run-webkit-tests:

2008-08-10  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed (and updated) by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=16620
        [GTK] Autotools make dist and make check support

        Get make dist working.

        Note that not all possible configurations have been tested yet.

        * GNUmakefile.am:

2008-08-10  Alp Toker  <alp@nuanti.com>

        Remove leftover qmake/GTK+ build files.

        * DumpRenderTree/gtk/DumpRenderTree.pro: Removed.
        * GtkLauncher/GtkLauncher.pro: Removed.

2008-08-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        AX functions shouldn't return position information because it changes
        based on the platform

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::boundsForRange):

2008-08-06  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Fix leaks seen on build-bot by fixing memory management of AccessibilityUIElement.
        <https://bugs.webkit.org/show_bug.cgi?id=20297>
        <rdar://problem/6093153>

        I've made AccessibilityUIElement a stack object for now.  It could be
        made RefCounted, but I figured that might be overkill for the moment.
        Essentially it's just a RefPtr itself. :)

        I also fixed a few typos, such as AccessibilityUIElement() instead of ~AccessibilityUIElement()
        which was causing additional leaks. :)

        I added toAXElement to remove a bunch of copy/paste code.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (toAXElement):
        (allAttributesCallback):
        (attributesOfLinkedUIElementsCallback):
        (attributesOfChildrenCallback):
        (lineForIndexCallback):
        (boundsForRangeCallback):
        (childAtIndexCallback):
        (getRoleCallback):
        (getTitleCallback):
        (getDescriptionCallback):
        (getWidthCallback):
        (getHeightCallback):
        (getIntValueCallback):
        (getMinValueCallback):
        (getMaxValueCallback):
        (getInsertionPointLineNumberCallback):
        (finalize):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement::platformUIElement):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::focusedElement):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::attributesOfLinkedUIElements):
        (AccessibilityUIElement::attributesOfChildren):

2008-08-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Cameron Zwarich.

        Speculative fix for an error I keep seeing in my Cygwin build

        * Scripts/webkitdirs.pm: make determineConfigurationProductDir() always call determineConfiguration() even on cygwin

2008-08-02  Kevin Ollivier  <kevino@theolliviers.com>

        Forgot to commit licensing correction in last commit.

        * wx/packaging/wxWebKitInstaller.iss.in:

2008-08-02  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Scripts for building a wxWebKit installer for wxPython on Win, eventually will
        be used for nightlies.

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

        * wx/packaging: Added.
        * wx/packaging/build-win-installer.py: Added.
        * wx/packaging/wxWebKitInstaller.iss.in: Added.

2008-07-31  Adam Roben  <aroben@apple.com>

        Follow-up to r35500

        * WinLauncher/WinLauncher.vcproj: Set the manifest properties for the
        Release configuration, too.

2008-07-31  Stefan Landvogt <stefan.landvogt@gmail.com>

        Fix Bug 20245: WinLauncher does not start in WebKit-debug right out of
        the box

        <https://bugs.webkit.org/show_bug.cgi?id=20245>

        Reviewed by Adam Roben.

        * WinLauncher/WinLauncher.vcproj: adding the following properties to
        WinLauncher > Properties > Manifest Tool > Isolated COM
        Type Library File: $(WebKitOutputDir)\lib\WebKit.tlb
        Component File Name: WebKit$(WebKitDLLConfigSuffix)
        Doing the change on "All Configurations"

2008-07-31  Adam Roben  <aroben@apple.com>

        Windows build bot fix

        * DumpRenderTree/win/ImageDiff.vcproj: Don't fail if files that only
        exist for people at Apple can't be found. Also updated the ICU version
        to 3.8.

2008-07-31  David Kilzer  <ddkilzer@apple.com>

        Fix layout test results for webarchive/test-xml-stylesheet.xml

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (convertMIMEType): Work around the "text/xml" local file type
        regression in Leopard using the BUILDING_ON_LEOPARD macro.  Also
        stop mangling "application/x-javascript" into "text/javascript".
        (convertWebResourceDataToString): When checking whether to dump a
        resource as text, also check to see if the MIME type is in the
        -[WebHTMLRepresentation supportedNonImageMIMETypes] array.
        * DumpRenderTree/mac/DumpRenderTreeMac.h: Added BUILDING_ON_LEOPARD
        macro.

2008-07-31  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Alice Liu

        Add AX support to get the bounds for a range of text
        Add AX support to get the child of an element
        Add AX support to get all the parameterized attribute names of an element

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (parameterizedAttributeNamesCallback):
        (boundsForRangeCallback):
        (childAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::parameterizedAttributeNames):
        (AccessibilityUIElement::boundsForRange):

2008-07-31  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

        Make run-launcher set DYLD_LIBRARY_PATH to make things work on Mac OS X.

        * Scripts/run-launcher:

2008-07-30  Jessica Kahn  <jess@apple.com>

        Reviewed by Adam Roben.

        Slightly stricter checking for previous change, suggested by Adam.

        * Scripts/extract-localizable-strings:

2008-07-30  Jessica Kahn  <jess@apple.com>

        Reviewed by Darin Adler.

        Added support for UI_STRING and UI_STRING_KEY macros with flexible prefixes.

        * Scripts/extract-localizable-strings:

2008-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Copy icu38* files instead of icu36* files.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-07-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

        DRT/Gtk build fix for r35362

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

2008-07-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        Add the ability to dump whether-or-not an element should have autocomplete enabled,
        from the perspective of the WebKit API

        * DumpRenderTree/LayoutTestController.cpp:
        (elementDoesAutoCompleteForElementWithIdCallback):
        (LayoutTestController::staticFunctions):

        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId): Stub for now until I can get on Windows

2008-07-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Add support for AXLineForIndex and AXInsertionPointIndex through the
        accessibility controller

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (lineForIndexCallback):
        (getInsertionPointLineNumberCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::insertionPointLineNumber):
        (AccessibilityUIElement::lineForIndex):

2008-07-25  Adam Roben  <aroben@apple.com>

        Try to fix the Windows build bot

        * DumpRenderTree/win/DumpRenderTree.vcproj: Don't try to copy files
        that don't exist for people outside of Apple.

2008-07-18  Landry Breuil  <landry@openbsd.org>

        Bug 19975: [OpenBSD] Patches to enable build of WebKit

        <https://bugs.webkit.org/show_bug.cgi?id=19975>

        Reviewed by David Kilzer.

        * DumpRenderTree/DumpRenderTree.h: OpenBSD doesn't support wide characters.

2008-07-16  Jon Honeycutt  <jhoneycutt@apple.com>

        CygwinDownloader fails to install necessary packages
        https://bugs.webkit.org/show_bug.cgi?id=20075

        Reviewed by Mark Rowe.

        * CygwinDownloader/cygwin-downloader.zip: Rebuilt after two broken
        mirrors removed in r34116. Set MIME type to application/octet-stream.

2008-07-16  Jon Honeycutt  <jhoneycutt@apple.com>

        CygwinDownloader's make-zip.sh script fails
        https://bugs.webkit.org/show_bug.cgi?id=20074

        Reviewed by Mark Rowe.

        * CygwinDownloader/cygwin-downloader.py:

2008-07-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Refactor accessibility testing code.

        We now have:
        - AccessibilityController
          Controller which has access to the WebView and can provide the focused element, root element
          and in the future, elementAtPoint.

        - AccessibilityUIElement
          Object which provides access to the data provided by the Accessibility APIs.

        * DumpRenderTree/AccessibilityController.cpp:
        (getFocusedElementCallback):
        (getRootElementCallback):
        (AccessibilityController::getJSClass):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityUIElement.cpp: Added.
        (allAttributesCallback):
        (attributesOfLinkedUIElementsCallback):
        (attributesOfChildrenCallback):
        (getRoleCallback):
        (getTitleCallback):
        (getDescriptionCallback):
        (getWidthCallback):
        (getHeightCallback):
        (getIntValueCallback):
        (getMinValueCallback):
        (getMaxValueCallback):
        (finalize):
        (AccessibilityUIElement::makeJSAccessibilityUIElement):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h: Added.
        (AccessibilityUIElement::platformUIElement):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm: Added.
        (AccessibilityUIElement::AccessibilityUIElement):
        (descriptionOfValue):
        (attributesOfElement):
        (nsStringToJSStringRef):
        (concatenateAttributeAndValue):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::attributesOfLinkedUIElements):
        (AccessibilityUIElement::attributesOfChildren):
        (AccessibilityUIElement::allAttributes):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):

2008-07-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Add support to get attributes of the AXChildren of an objecty

        * DumpRenderTree/AccessibilityController.cpp:
        (attributesOfChildrenForFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (descriptionOfValue):
        (AccessibilityController::attributesOfChildrenForFocusedElement):

2008-07-14  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-07-14  Adam Roben  <aroben@apple.com>

        Attempted Windows build fix

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj: Add
        CoreFoundation/OSXCompatibilityHeaders[/GNUCompatibility] to the
        include path.

2008-07-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Eliminate per-thread JavaScript global data instance support and make arbitrary
        global data/global object combinations possible.

        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp:
        (runJavaScriptThread): Don't pass a released context reference to JSGarbageCollect.
        In this scenario, it was causing crashes after each 10-20 tests, because there was a large
        chance for a different thread to cause GC after the context was released.

2008-07-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        Make sure we read WebCore Leak messages.  Force full document teardown for DumpRenderTree.

        Up timeout limit, some slower machines were timing out before crashtracer finished writing out to disk and quitting DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (resetWebViewToConsistentStateBeforeTesting):
        * Scripts/run-webkit-tests:

2008-07-10  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Print <div> backgrounds when printing from DRT.

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

2008-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Fix copying of expected results to correct location

        * Scripts/run-webkit-tests:

2008-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by aroben.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpAsPDFCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpAsPDF):
        (LayoutTestController::setDumpAsPDF):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpFrameAsPDF):
        (dump):

2008-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by weinig.

        Add Content-Type support to DumpRenderTree and run-webkit-tests
        and move expected.txt files to expected.webarchive

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

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (compareImages):
        (main):
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * Scripts/run-webkit-tests:

2008-07-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        Port r34988 to Mac: allow tests to define JavaScript to execute when
        NPP_DestroyStream or NPP_URLNotify is called.

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New): Remove initialization that happens in pluginAllocate. Look
        for new arguments onStreamDestroy and onURLNotify.
        (NPP_Destroy): Free onStreamDestroy and onURLNotify.
        (executeScript): Code moved from onStreamLoad.
        (NPP_NewStream): Call executeScript.
        (NPP_DestroyStream): Same.
        (NPP_URLNotify): Same.

2008-07-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders.

        This patch extends DRT accessibility tests to add the ability to
        query the intValue, minValue, and maxValue of the focused element.

        * DumpRenderTree/AccessibilityController.cpp:
        (intValueOfFocusedElementCallback):
        (minValueOfFocusedElementCallback):
        (maxValueOfFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::intValueOfFocusedElement):
        (AccessibilityController::minValueOfFocusedElement):
        (AccessibilityController::maxValueOfFocusedElement):

2008-07-07  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * DumpRenderTree/win/ImageDiff.vcproj:

2008-07-02  Jon Honeycutt  <jhoneycutt@apple.com>

        Allow tests to define JavaScript to execute when NPP_DestroyStream or
        NPP_URLNotify is called.

        Reviewed by Anders.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Add a new
        property, "returnErrorFromNewStream." This is to support the test for
        <rdar://5983747> Safari crashes trying to load the SilverLight plugin,
        caused by WebKit calling NPP_DestroyStream after a plug-in returns an
        error from NPP_NewStream.
        (pluginGetProperty):
        (pluginSetProperty):
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Added new
        members, onStreamDestroy and onURLNotify.
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_New): Remove initialization of onStreamLoad; this was moved to
        pluginAllocate. Look for new arguments onStreamDestroy and
        onURLNotify, and store their values.
        (NPP_Destroy): Free new members.
        (executeScript): Code moved from onStreamLoad
        (NPP_NewStream): If returnErrorFromNewStream has been set to true,
        return a generic error code. If onStreamLoad is set, execute it as
        JavaScript.
        (NPP_DestroyStream): If onStreamDestroy is set, execute it as JS.
        (NPP_URLNotify): Same, for onURLNotify.

2008-07-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel and John Sullivan

        Add the ability to tell DRT to call stopLoading on a WebFrame inside of a didStartProvisionalLoadForFrame
        load delegate.

        Required to add a layout test for the fix for <rdar://problem/5549871>

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]): If stopProvisionalFrameLoads is set, call
          [WebFrame stopLoading] to test for the crash reflected in 5549871

        All of the following are infrastructure to add the layoutTestController.setStopProvisionalFrameLoads() call:
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (setStopProvisionalFrameLoadsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::stopProvisionalFrameLoads):
        (LayoutTestController::setStopProvisionalFrameLoads):

2008-07-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Support ability to get width and height of an element through accessibility

        * DumpRenderTree/AccessibilityController.cpp:
        (widthOfFocusedElementCallback):
        (heightOfFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::widthOfFocusedElement):
        (AccessibilityController::heightOfFocusedElement):

2008-06-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Support the ability to get the linked ui elements of an object

        * DumpRenderTree/AccessibilityController.cpp:
        (attributesOfLinkedUIElementsForFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::attributesOfLinkedUIElementsForFocusedElement):
        (AccessibilityController::allAttributesOfFocusedElement):
        (attributesOfElement):
        (nsStringToJSStringRef):

2008-06-29  Sam Weinig  <sam@webkit.org>

        Fix Tiger build.

        * DumpRenderTree/mac/EventSendingController.mm:
        (eventTypeForMouseButtonAndAction):

2008-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Add multi-button mouseevent support to DRT
        https://bugs.webkit.org/show_bug.cgi?id=15173

        It's now possible to specify the mouse button with:
        eventSender.mouseDown(1); eventSender.mouseUp(1); etc.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (eventTypeForMouseButtonAndAction):
        (-[EventSendingController updateClickCountForButton:]):
        (-[EventSendingController mouseDown:]):
        (-[EventSendingController mouseUp:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController contextClick]):

2008-06-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Copy <test>-expected.png from the right location to /tmp/layout-test-results.
        Use $expectedPixelDir instead of $expectedDir. Allows using SVG pixel tests again.

        * Scripts/run-webkit-tests:

2008-06-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Christian Dywan.

        [Gtk] Initialize webview settings before running DRT tests
        http://bugs.webkit.org/show_bug.cgi?id=19778

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (setDefaultsToConsistentStateValuesForTesting):
        (main):

2008-06-26  Darin Adler  <darin@apple.com>

        * Scripts/check-for-weak-vtables: Fixed comment.

2008-06-26  Darin Adler  <darin@apple.com>

        * Scripts/check-for-weak-vtables: Added.

2008-06-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam.

        Do not include AXPosition in the dump of all of the accessibility
        attributes since it is screen-specific.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::allAttributesOfFocusedElement):

2008-06-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders.

        This is a speculative fix for the failing layout test on the build
        bot. It seems that the problem that the Build Bot is having is
        Tiger-specific. On Tiger, [NSValue description] was not very smart.
        So I replaced our call to description with a hand-rolled equivalent
        that will match on both platforms.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (descriptionOfValue):

2008-06-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        This patch adds support to the AccessibilityController to query the
        following attributes specifically, without a full attribute dump:
        AXRole, AXTitle, and AXDescription.

        * DumpRenderTree/AccessibilityController.cpp:
        (allAttributesForFocusedElementCallback):
        (roleOfFocusedElementCallback):
        (titleOfFocusedElementCallback):
        (descriptionOfFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::allAttributesForFocusedElement):
        (concatenateAttributeAndValue):
        (AccessibilityController::roleOfFocusedElement):
        (AccessibilityController::titleOfFocusedElement):
        (AccessibilityController::descriptionOfFocusedElement):

2008-06-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Stephanie Lewis.

        - move the linker flags from the debug configuration in the project
          to the shared configuration

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:

2008-06-24  Dan Bernstein  <mitz@apple.com>

        - try to fix the Tiger build

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:

2008-06-24  Sam Weinig and Beth Dakin  <bdakin@apple.com and sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/5884881> Make DumpRenderTree support
        accessibility tests

        This patch adds some basic support for accessibility layout tests
        on the Mac.

        * DumpRenderTree/AccessibilityController.cpp: Added.
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (dumpCurrentAttributesCallback):
        (AccessibilityController::makeWindowObject):
        (AccessibilityController::getJSClass):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h: Added.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm: Added.
        (descriptionOfValue):
        (AccessibilityController::dumpCurrentAttributes):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.h:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):

2008-06-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein

        * Scripts/extract-localizable-strings:
        add UI_STRING_LOCALIZE_LATER, LPCTSTR_UI_STRING_LOCALIZE_LATER, and LOG_WARNING to the
        list of debugging macros, to avoid noise when keeping the list of localized string
        exceptions up to date

2008-06-24  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Darin Adler.

        - add a font family for testing font-weight

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added linker
        flags to create data sections for the WeightWatcher fonts.
        * DumpRenderTree/fonts: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher100.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher200.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher300.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher400.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher500.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher600.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher700.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher800.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher900.ttf: Added.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateFonts): Renamed activateAhemFont to this and made it activate
        the WeightWatcher fonts in addition to Ahem.
        (prepareConsistentTestingEnvironment): Adjusted for the name change.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Added the WeightWatcher fonts.

2008-06-20  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin Adler.

        Extend the build-webkit (and set-webkit-configuration) script to
        support Cairo-based webkit builds.  (see http://bugs.webkit.org/show_bug.cgi?17952)

        * Scripts/build-webkit:  Add --cairo-win32 to the help message
        * Scripts/webkitdirs.pm:  Extend the 'determinePassedConfiguration
          subroutine to recognize the --cairo-win32 flag.  When present,
          the build configuration is changed from Debug/Release to
          Debug_Cairo/Release_Cairo.  This flag is only active when the
          isCygwin() test is true.

2008-06-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Justin Garcia.

        - prefer Leopard results when running on Snow Leopard.

        * Scripts/run-webkit-tests: Added a mapping of Snow Leopard to
          mac-leopard.
        * Scripts/webkitdirs.pm: Added isSnowLeopard().

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: Updated.
        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: Updated for the latest round of renaming.
        * Scripts/do-webcore-rename: Tweaked and reorganized a bit.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/create-exports: Added.
        * Scripts/do-file-rename: Added some planned renames.
        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - rename testkjs to jsc

        * Scripts/build-jsc: Copied from Scripts/build-testkjs.
        * Scripts/build-testkjs: Removed.
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc: Copied from Scripts/run-testkjs.
        * Scripts/run-sunspider:
        * Scripts/run-testkjs: Removed.
        * Scripts/sunspider-compare-results:

2008-06-14  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Moved planned renames into a separate hash
        from the actual renames. Removed many renames that are either done or
        no longer planned.

2008-06-14  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Fixed obvious typo.

2008-06-13  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Added three more exceptions.

2008-06-10  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon.

        For the qmake based build make it possible to build against makespecs where
        QMAKE_CC is defined in a configuration file included from qmake.conf.

        * Scripts/webkitdirs.pm: Added support for include() statements in
        qmake.conf.

2008-06-09  Alp Toker  <alp@nuanti.com>

        gcc3/autotools build fix. Add explicit -O2 -fno-strict-aliasing to
        each of the tools since these are no longer set globally.

        * GNUmakefile.am:

2008-06-08  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Added another exception.

2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Timothy.

        Remove the --squirrelfish option from SunSpider, as it is no longer needed.

        * Scripts/run-sunspider:

2008-06-05  Alp Toker  <alp@nuanti.com>

        Build fix for r34387.

        * GNUmakefile.am:

2008-06-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver.

        Add an exception for Opcode.o to the global initializers check so that
        we can dump instruction statistics in the JavaScript virtual machine.

        * Scripts/check-for-global-initializers:

2008-05-30  Steve Falkenburg  <sfalken@apple.com>

        Generate an isolated COM manifest for registry free COM.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-06-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt and Mitz.

        <rdar://problem/5704119>
        repro crash in WebCore::RenderPart::setWidget (plugin-related?)

        Call -[WebView display] in the "plug-in" failed delegate method, simulating
        the sheet that Safari puts up.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:plugInFailedWithError:dataSource:]):

2008-05-30  Timothy Hatcher  <timothy@apple.com>

        Made the starting line number of scripts be 1-based throughout the engine.
        This cleans up script line numbers so they are all consistent now.

        Reviewed by Oliver Hunt.

        * DumpRenderTree/mac/ObjCController.m:
        (runJavaScriptThread): Pass a line number of 1 instead of 0 to JSEvaluateScript.
        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp:
        (runJavaScriptThread): Ditto.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runJavaScriptThread): Ditto.

2008-05-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Fixed VCSUtils.pm to work with git repositories inside symlinks.

        * Scripts/VCSUtils.pm: Compute a relative path from the git repository
        root, instead of the root of the filesystem, to work around a bug in
        abs2rel when traversing symlinked home directories.

2008-05-29  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Restore original behavior of isOSX() referring to the Mac port, not the OS itself.

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

        * Scripts/webkitdirs.pm:

2008-05-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Fix run-iexploder-tests and run-mangleme-tests to work with updated shared scripts and
        configuration files.

        * Scripts/run-iexploder-tests:
        * Scripts/run-mangleme-tests:
        Renamed runSafari to not conflict with the one in webkitdirs.
        Added SSLCertificateFile option for httpd, as now needed.

2008-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Update the sample app after wxWebFrame->wxWebBrowserShell rename.

        * wx/browser/browser.cpp:
        (MyApp::OnInit):

2008-05-24  Andreia Gaita  <shana@isninja.com>

        Reviewed by Alp Toker.

        cygwin-downloader.py fixes.

        Remove two non-working mirrors. Add a check for missing dependency
        packages to avoid bailing out on an inconsistent Cygwin package list.

        * CygwinDownloader/cygwin-downloader.py:

2008-05-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Darin Adler.

        Remove useQmake usage. QMake build doesn't support Gtk port
        anymore.

        Also fix 2 occurences of "Web Kit". Should be WebKit.

        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-05-22  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Dan.

        implement the beforeUnload UI delegate so that DRT will dispatch beforeunload events.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        (SearchableWebViewHost::runBeforeUnloadConfirmPanelWithMessage):

2008-05-21  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        DumpRenderTree support for <rdar://problem/5787733> fast/dom/HTMLDocument/hasFocus.html fails on Windows

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewFocus): Added.
        (UIDelegate::webViewUnfocus): Added.
        * DumpRenderTree/win/UIDelegate.h:

2008-05-21  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Stephanie Lewis.

        Set the pass_through flag on Getopt so that extra arguments can be passed through to Safari,
        rather than trigger an unknown argument message.  This allows run-webkit-tests to display results
        once more.

        * Scripts/run-safari:

2008-05-21  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Maciej, Mark.

        arch doesn't take arguments on tiger.  expand DRT timeout for guardMalloc.

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

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

        Reviewed by Stephanie Lewis.

        Improve the behavior of run-webkit-tests with 64-bit WebKit by automatically inferring whether to run 64-bit.

        If --64-bit is not passed to run-webkit-tests, attempt to guess whether we should run 64-bit.
        This decision is made based on the 64-bitness of the built WebKit framework if it exists, and
        can be manually overridden by passing --64-bit or --no-64-bit.  This removes the need to always
        pass an argument to run-webkit-tests after having built with "make x86_64".

        * Scripts/gdb-safari:
        * Scripts/run-safari:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm: Split the setting of the 64-bit flag, the determination of the
        preferred architecture, and exporting of the environment variables for 'arch' out into
        separate subroutines.

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

        Fix "make x86_64" by adding x86_64 target to WebKitTools Makefile.

        * Makefile:

=== End merge of squirrelfish ===

2008-04-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - added support for --ubench mode

        * Scripts/run-sunspider:

2008-03-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        --squirrelfish mode: pared down tests for squirrelfish to chew on.

        * Scripts/run-sunspider:

=== Start merge of squirrelfish ===

2008-05-21  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Added another exception.

2008-05-19  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Adam.

        Explicitly set run mode to 32bit unless overridden to avoid
        confusion when running tests

        * Scripts/build-dumprendertree:
        * Scripts/gdb-safari:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-05-16  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Steve.

        Print out pending unload event count. Also print out main frame name to match Mac.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (descriptionSuitableForTestResult):
        (FrameLoadDelegate::didFinishDocumentLoadForFrame):

2008-05-16  Timothy Hatcher  <timothy@apple.com>

        Remove the Drosera project, code and resources since it has been
        replaced with the Web Inspector's debugger. Removes references to
        Drosera in various scripts and makefiles.

        Rubber-stamped by Mark Rowe.

        * BuildSlaveSupport/build-launcher-app:
        * Drosera/DebuggerDocument.cpp: Removed.
        * Drosera/DebuggerDocument.h: Removed.
        * Drosera/Drosera.icns: Removed.
        * Drosera/DroseraWin.make: Removed.
        * Drosera/English.lproj/Debugger.nib/classes.nib: Removed.
        * Drosera/English.lproj/Debugger.nib/info.nib: Removed.
        * Drosera/English.lproj/Debugger.nib/keyedobjects.nib: Removed.
        * Drosera/English.lproj/MainMenu.nib/classes.nib: Removed.
        * Drosera/English.lproj/MainMenu.nib/info.nib: Removed.
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib: Removed.
        * Drosera/ForwardingHeaders/wtf/Assertions.h: Removed.
        * Drosera/ForwardingHeaders/wtf/HashTraits.h: Removed.
        * Drosera/ForwardingHeaders/wtf/Noncopyable.h: Removed.
        * Drosera/ForwardingHeaders/wtf/OwnPtr.h: Removed.
        * Drosera/ForwardingHeaders/wtf/Platform.h: Removed.
        * Drosera/ForwardingHeaders/wtf/RetainPtr.h: Removed.
        * Drosera/Images/Drosera.ico: Removed.
        * Drosera/Images/SourceArrow.png: Removed.
        * Drosera/Images/SourceArrowBlank.png: Removed.
        * Drosera/Images/SourceArrowOpen.png: Removed.
        * Drosera/Images/background_stripe.png: Removed.
        * Drosera/Images/breakPoint.tif: Removed.
        * Drosera/Images/breakPointDisabled.tif: Removed.
        * Drosera/Images/breakpointeditor.png: Removed.
        * Drosera/Images/close.tif: Removed.
        * Drosera/Images/close_active.tif: Removed.
        * Drosera/Images/close_hover.tif: Removed.
        * Drosera/Images/console.png: Removed.
        * Drosera/Images/continue.tif: Removed.
        * Drosera/Images/fileIcon.jpg: Removed.
        * Drosera/Images/finishFunction.tif: Removed.
        * Drosera/Images/glossyFooterFill.tif: Removed.
        * Drosera/Images/glossyHeader.png: Removed.
        * Drosera/Images/glossyHeaderPressed.png: Removed.
        * Drosera/Images/gradientBackground.png: Removed.
        * Drosera/Images/gutter.png: Removed.
        * Drosera/Images/navLeftDisabled.png: Removed.
        * Drosera/Images/navLeftNormal.png: Removed.
        * Drosera/Images/navLeftPressed.png: Removed.
        * Drosera/Images/navRightDisabled.png: Removed.
        * Drosera/Images/navRightNormal.png: Removed.
        * Drosera/Images/navRightPressed.png: Removed.
        * Drosera/Images/pause.tif: Removed.
        * Drosera/Images/popUpArrows.png: Removed.
        * Drosera/Images/programCounter.tif: Removed.
        * Drosera/Images/programCounterBreakPoint.tif: Removed.
        * Drosera/Images/programCounterBreakPointDisabled.tif: Removed.
        * Drosera/Images/run.tif: Removed.
        * Drosera/Images/siteCollapsed.tif: Removed.
        * Drosera/Images/siteExpanded.tif: Removed.
        * Drosera/Images/siteIcon.tif: Removed.
        * Drosera/Images/small.ico: Removed.
        * Drosera/Images/splitterBar.tif: Removed.
        * Drosera/Images/splitterDimple.tif: Removed.
        * Drosera/Images/step.tif: Removed.
        * Drosera/Images/stepOut.tif: Removed.
        * Drosera/Images/stepOver.tif: Removed.
        * Drosera/Images/stop.tif: Removed.
        * Drosera/Images/toolbarBackground.png: Removed.
        * Drosera/Images/verticalSplitterBar.tiff: Removed.
        * Drosera/Images/verticalSplitterDimple.tiff: Removed.
        * Drosera/Makefile: Removed.
        * Drosera/breakpointEditor.html: Removed.
        * Drosera/config.h: Removed.
        * Drosera/console.css: Removed.
        * Drosera/console.html: Removed.
        * Drosera/console.js: Removed.
        * Drosera/debugger.css: Removed.
        * Drosera/debugger.html: Removed.
        * Drosera/debugger.js: Removed.
        * Drosera/mac/DebuggerApplication.h: Removed.
        * Drosera/mac/DebuggerApplication.mm: Removed.
        * Drosera/mac/DebuggerClient.h: Removed.
        * Drosera/mac/DebuggerClient.mm: Removed.
        * Drosera/mac/DebuggerDocumentPlatform.mm: Removed.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj: Removed.
        * Drosera/mac/Info.plist: Removed.
        * Drosera/mac/LauncherInfo.plist: Removed.
        * Drosera/mac/Makefile: Removed.
        * Drosera/mac/ServerConnection.h: Removed.
        * Drosera/mac/ServerConnection.mm: Removed.
        * Drosera/mac/launcher.m: Removed.
        * Drosera/mac/main.m: Removed.
        * Drosera/viewer.css: Removed.
        * Drosera/viewer.html: Removed.
        * Drosera/win/BaseDelegate.h: Removed.
        * Drosera/win/DebuggerClient.cpp: Removed.
        * Drosera/win/DebuggerClient.h: Removed.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Removed.
        * Drosera/win/Drosera.cpp: Removed.
        * Drosera/win/Drosera.h: Removed.
        * Drosera/win/Drosera.vcproj/Drosera.rc: Removed.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Removed.
        * Drosera/win/DroseraPrefix.cpp: Removed.
        * Drosera/win/DroseraPrefix.h: Removed.
        * Drosera/win/Info.plist: Removed.
        * Drosera/win/ServerConnection.cpp: Removed.
        * Drosera/win/ServerConnection.h: Removed.
        * Drosera/win/resource.h: Removed.
        * Makefile:
        * Scripts/build-drosera: Removed.
        * Scripts/gdb-drosera: Removed.
        * Scripts/run-drosera: Removed.
        * Scripts/run-drosera-nightly.cmd: Removed.
        * Scripts/run-drosera.cmd: Removed.
        * Scripts/webkitdirs.pm:

2008-05-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Anders.

        Dump the unload count for a frame after parsing is finished.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):

2008-05-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=10707
        DumpRenderTree should not be able to access non-local resources

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        Block them, and complain.

2008-05-15  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Update the version of libpng to download and instsall.

        * wx/install-unix-extras:

2008-05-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        - isDarwin() and isCygwin() returned an empty string if the platform equality check fails.
          We now force the return value to be numeric.

        - Removed platform checks as it was a work around the previous issue.

        - Replaced isDarwin() by isOSX() as they have now the same behaviour.

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

2008-05-12  Adam Roben  <aroben@apple.com>

        Support for testing NPN_PostURL

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (toCString): Added this helper function.
        (testPostURLFile): Added. Writes the passed-in content to the
        passed-in file and calls NPN_PostURL with the passed-in URL and
        target.
        (pluginInvoke): Added a case for testPostURLFile.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (followShortcuts): Changed to allow paths that don't yet exist.

2008-05-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Minor cleanup of the DRT Xcode project.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:  Use GCC_OPTIMIZATION_LEVEL rather than
        OPTIMIZATION_CFLAGS.  Don't include Info.plist in the "Copy Bundle Resources" build phase as it does
        not need to be there.

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add support for testing application caches.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        Empty the cache.

        (resetWebViewToConsistentStateBeforeTesting):
        Turn on support for the application cache.

2008-05-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Update TestNetscapePlugIn to build 64-bit using the Cocoa event model.

        It currently does not attempt to print events which means that plugins/mouse-events.html
        will fail when run 64-bit.  All other tests that use this plugin pass.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testGetIntIdentifier):
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_HandleEvent):

2008-05-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        Explicitly call shutDownWebKit() before quitting.

        * Drosera/win/Drosera.cpp:
        (_tWinMain):

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

2008-05-09  Mark Rowe  <mrowe@apple.com>

        Fix the Tiger build of Drosera.

        * Drosera/config.h: Define BUILDING_ON_TIGER when building on Tiger.

2008-05-09  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Mark Rowe.

        Remove the ENABLE_CROSS_DOCUMENT_MESSAGING #ifdefs.

        * Scripts/build-webkit:

2008-05-08  Mark Rowe  <mrowe@apple.com>

        Another attempt at a Tiger build fix.

        Use DumpRenderTreeMac.h rather than DumpRenderTree.h as DumpRenderTreePasteboard is not an Obj-C++ file.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:

2008-05-08  Mark Rowe  <mrowe@apple.com>

        Tiger build fix.  Include DumpRenderTree.h so that BUILDING_ON_TIGER will be defined.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:

2008-05-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt and Dan Bernstein.

        Update DumpRenderTree to build 64-bit.

        The three major changes here are:
        1) Use NSInteger in the appropriate places.
        2) Use ColorSync API that is available in 64-bit to switch display profiles.
        3) Use method-swizzling to achieve similar results to class posing when using the Obj-C 2.0 runtime.

        The build of DumpRenderTree will still fail in 64-bit for now as the TestNetscapePlugIn target also
        needs updated to successfully build.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Don't prevent Xcode from building 64-bit.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (swizzleAllMethods):
        (poseAsClass):
        (prepareConsistentTestingEnvironment):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (restoreColorSpace):
        (failedGettingCurrentProfile):
        (setDefaultColorProfileToRGB):

2008-05-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Clean up Drosera so that it will build 64-bit.

        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication numberOfRowsInTableView:]): Use NSInteger rather than int.
        (-[DebuggerApplication tableView:objectValueForTableColumn:row:]): Ditto.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj: Use the default value for VALID_ARCHS.

2008-05-07  David Kilzer  <ddkilzer@apple.com>

        Use File::Find and Getopt::Long in make-js-test-wrappers

        Reviewed by Darin Adler.

        * Scripts/make-js-test-wrappers:
        - Updated Apple copyright statement.
        - Added command-line switch parsing and -h|--help switch.
        - Allowed user to pass list of files/directories on which to do
          a restricted search for TEMPLATE.html files.  The default
          behavior is still to search the entire LayoutTests directory.
        - Removed duplicate 'use strict' statement.
        - Replaced use of `find` statements with File::Find::find().
        - Remove unneeded chomp() calls now that we use File::Find.
        (directoryFilter): Added.  Filters .svn directories when used
        with File::Find::find().
        (findTemplateFiles): Added.  Returns a list of TEMPLATE.html
        files found.

2008-05-05  Steve Falkenburg  <sfalken@apple.com>

        Copy dependencies of ImageDiff, DumpRenderTree in post-build step.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:

2008-05-05  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Look for the right ImageDiff executable for debug builds.

        * Scripts/run-webkit-tests:

2008-05-05  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Ignore a Java leak showing up in the WebKit
        leak tests.

2008-05-05  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        In the Qt's DumpRenderTree, adjust the web view properly (because W3C SVG
        tests expect to be 480x360)

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

2008-05-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - add an option to svn-apply to set the reviewer name in change logs

        * Scripts/svn-apply: Added a [-r|--reviewer name] option.

2008-05-01  David Kilzer  <ddkilzer@apple.com>

        Clean up configuration usage in run-webkit-tests

        Reviewed by Adam.

        * Scripts/run-webkit-tests: Parse configuration switches using
        passedConfiguration() from webkitdirs.pm like every other script.
        Note that we must still call setConfiguration() afterwards in
        case the --configuration switch was used.  Use $configurationOption
        when running build-dumprendertree instead of recreating the switch.

2008-04-29  Adam Roben  <aroben@apple.com>

        Restore the beloved COMPtr::operator&

2008-04-29  Adam Roben  <aroben@apple.com>

        Windows build fixes

        Replace COMPtr::operator& with COMPtr::adoptionPointer.

2008-04-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Fix run-webkit-tests --threading
        and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
        Proxy server issue in Sunday's Nightly

        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp:
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        Spawned threads were immediately detached, unlike the original ones, so joining them
        made no sense. Now, all threads are created detached, and stopJavaScriptThreads() just
        waits for them all to exit.

2008-04-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Reset dumping resource load callbacks to false for the next test


        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Adapt to the latest API changes in WebKit/qt/Api.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/jsobjects.cpp:

2008-04-26  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Delete the DerivedSources after make clean has been done so that the DerivedSources
        don't get re-created. Also, use the proper extension for the Win wxPython extension.

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

        * wx/build-wxwebkit:

2008-04-26  Adam Barth <hk9565@gmail.com>

        Reviewed by Adam Roben and Sam Weinig.

        Updates LayoutTestController to use host instead of domain.

        Collin Jackson <collinj-webkit@collinjackson.com> also contributed to this patch.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setDatabaseQuota):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]):

2008-04-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Need the latest libpng. (Somehow my initial test passed without it.)

        * wx/install-unix-extras:

2008-04-26  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Allow the user to set the path to SWIG using an environment variable.

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

        * wx/build-wxwebkit:

2008-04-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Download the latest libpng version for building the
        dependencies.

        * wx/install-unix-extras:

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Implement dumping of resource load callbacks to pass http/tests/xmlhttprequest/abort-should-cancel-load.html

        Similar to Editing and Frameloading we do the dumping within WebCore


        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::dumpResourceLoadCallbacks):
        * DumpRenderTree/qt/jsobjects.h:

2008-04-24  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Maciej Stachowiak.

        http://bugs.webkit.org/show_bug.cgi?id=18485
        Typo and documentation fix for build-webkit

        * Scripts/build-webkit:

2008-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Don't call fprintf from the signal handler.

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

2008-04-23  Adam Roben  <aroben@apple.com>

        Make crashes be reported as crashes, not hangs

        Reviewed by David Kilzer.

        * Scripts/run-webkit-tests:
        (top level): Use the new status field of the output from
        readFromDumpToolWithTimer to determine if the test crashed or hung.
        (sub readFromDumpToolWithTimer):
          - If we fail to read a line and $! is not EAGAIN, then we've crashed
            and should not try to read any more.
          - Changed the timedout field to a more general status field.

2008-04-22  David Kilzer  <ddkilzer@apple.com>

        Bug 18683: update-webkit returns 0 even if it fails

        <https://bugs.webkit.org/show_bug.cgi?id=18683>

        Reviewed by Mitz Pettel.

        * Scripts/update-webkit:
        (runSvnUpdate): Die if close() fails.

2008-04-21  Adam Roben  <aroben@apple.com>

        Flush stdout/stderr after printing every #EOF separator

        This fixes a hang when running the pixel tests on Windows

        Reviewed by Mitz Pettel.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (main): We don't have to flush stdout/stderr in the arguments loop
        anymore, as runTest flushes for us.

2008-04-21  Adam Roben  <aroben@apple.com>

        Fix pixel tests

        * Scripts/run-webkit-tests:
        (sub readFromDumpToolWithTimer): Use readline instead of read to
        ensure that we don't read past the #EOF marker.

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Build fix for Qt 4.3

        * When building WebCore/internal make sure the QT_[BEGIN,END]_NAMESPACE is
        always defined. Do this by adding defines to the compiler line

        * DumpRenderTree/qt/DumpRenderTree.pro:

2008-04-19  Mike Hommey  <glandium@debian.org>

        Reviewed by Alp Toker.

        Don't build GtkLauncher and DumpRenderTree with rpath.

        * GNUmakefile.am:

2008-04-18  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16620
        [GTK] Autotools make dist and make check support

        Cleanups.

        * GNUmakefile.am:

2008-04-18  Adam Roben  <aroben@apple.com>

        Drop the hang timer to 30 seconds

        This matches what DRT/mac was using.

        Reviewed by Mitz Pettel.

        * Scripts/run-webkit-tests:

2008-04-18  Adam Roben  <aroben@apple.com>

        Get rid of DRT's Watchdog

        run-webkit-tests now detects hangs and samples DRT as needed.

        Reviewed by Mitz Pettel.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Removed
        Watchdog* files from the project.
        * DumpRenderTree/Watchdog.cpp: Removed.
        * DumpRenderTree/Watchdog.h: Removed.
        * DumpRenderTree/mac/DumpRenderTree.mm: Removed uses of Watchdog
        (dumpRenderTree):
        (runTest):
        * DumpRenderTree/mac/WatchdogMac.h: Removed.
        * DumpRenderTree/mac/WatchdogMac.mm: Removed.
        * Scripts/run-webkit-tests:
        (sub testCrashedOrTimedOut): Call sampleDumpTool() if we timed out.
        (sub sampleDumpTool): Added. Writes a sample report to
        ~/Library/Logs/DumpRenderTree/HangReport.txt.

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Adapt to the API changes in WebKit/qt

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dumpFramesAsText):
        (WebCore::DumpRenderTree::dump):

2008-04-17  Adam Roben  <aroben@apple.com>

        Fix many tests on Windows

        * Scripts/run-webkit-tests:
        (readFromDumpToolWithTimer):
         - Use read instead of sysread to ensure that we don't interfere with
           other uses of buffered IO in this script.
        (setFileHandleNonBlocking): Actually set the filehandle to blocking
        when specified.

2008-04-17  Adam Roben  <aroben@apple.com>

        Fix ~10 tests

        * Scripts/run-webkit-tests: Only remove the newline after #EOF, not
        whatever newline happens to be at the end of what we've read.

2008-04-17  Adam Roben  <aroben@apple.com>

        Remove DRT/win's hang timer

        run-webkit-tests takes care of this for us now

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DumpRenderTree.cpp:

2008-04-17  Adam Roben  <aroben@apple.com>

        Don't wait for the hang timer twice in the case of a hang

        Previously we'd wait for a hang while reading both stdout and stderr
        from DRT. Now we'll only wait for one or the other.

        Reviewed by Anders Carlsson.

        * Scripts/run-webkit-tests:
        (top level): Don't wait for stderr to time out if stdout already timed
        out.
        (readFromDumpToolWithTimer): If $dontWaitForTimeOut is true, quit
        after the first read that returns no data.

2008-04-17  Adam Roben  <aroben@apple.com>

        Don't throw away the output from timed out tests

        Reviewed by Anders Carlsson.

        * Scripts/run-webkit-tests:
        (top level): Updated for changes to readFromDumpToolWithTimer.
        (readFromDumpToolWithTimer): Return a hash that contains both the
        output and whether or not the test timed out.

2008-04-17  Adam Roben  <aroben@apple.com>

        Make the hang timer 60 seconds

        * Scripts/run-webkit-tests:

2008-04-17  Adam Roben  <aroben@apple.com>

        Get rid of carriage returns in DRT/win's stderr

        Reviewed by Eric Seidel.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): Mark stderr as binary like we already do for stdout.

2008-04-17  Adam Roben  <aroben@apple.com>

        Fix Bug 17678: run-webkit-tests should have a watchdog timer (and
        timeout long tests)

        <https://bugs.webkit.org/show_bug.cgi?id=17678>

        We now abort tests that take longer than 60 seconds to produce output.
        This matches the watchdog timer in DRT/mac and DRT/win (which we can
        now remove).

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (top level): Read DRT's output using the new readFromDumpToolWithTimer
        subroutine. If readFromDumpToolWithTimer returns undefined it means
        the test timed out, so we register the test as a hang and move on.
        (sub testCrashedOrTimedOut): Renamed from testCrashed. Now handles
        both crashed and timed out tests. If the test timed out, we kill DRT
        before returning.
        (sub linksForTimedOutTest): Added. We don't have any output to link to for
        tests that timed out.
        (sub recordActualResultsAndDiff): Don't call length on undefined.
        (sub readFromDumpToolWithTimer): Added. Performs non-blocking reads
        from a filehandle until an #EOF is reached or
        $maximumSecondsWithoutOutput have elapsed.
        (sub setFileHandleNonBlocking): Marks a filehandle as blocking or
        non-blocking.

2008-04-17  Adam Roben  <aroben@apple.com>

        Refactor test results page generation

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (sub htmlForResultsSection): Added. Takes a set of tests, a
        description, and a subroutine to generate the links for each test, and
        creates a HTML string containing a table of the tests and their
        links.
        (sub linksForExpectedAndActualResults): Added. Replaces the
        htmlForExpectedAndActualResults subroutine.
        (sub linksForMismatchTest): Added.
        (sub linksForCrashOrErrorTest): Added.
        (sub linksForNewTest): Added.

2008-04-17  Adam Roben  <aroben@apple.com>

        Print the extension for all tests in the test results page

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:

2008-04-17  Adam Roben  <aroben@apple.com>

        Move code that counts finished tests into a subroutine

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (sub countFinishedTest): Added.

2008-04-17  Adam Roben  <aroben@apple.com>

        Move code that handles a crash into a subroutine

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (sub testCrashed): Added.

2008-04-17  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Rename RenderView to RenderViewport in the next rename patch.

        * Scripts/do-webcore-rename:

2008-04-17  Mario Bensi  <mbensi@pleyo.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18543
        DumpRenderTree gtk freeze

        fix DumpRenderTree gtk freeze

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

2008-04-15  Anders Carlsson  <andersca@apple.com>

        Add missing ;

        * Scripts/build-webkit:

2008-04-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES.

        * Scripts/build-webkit:

2008-04-15  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt namespaces

        Qt can be configured to have all of its classes inside a specified namespaces.
        This is for example used in plugin/component environments like Eclipse.

        This change makes it possible to let the Qt port compile against a namespaced
        Qt by the use of macros Qt provides to properly forward declare Qt classes in
        the namespace.

        * DumpRenderTree/qt/DumpRenderTree.h:

2008-04-08  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Add a script that propagates any file changes made to the Bakefiles
        over to GTK and Qt build systems. Still needs to be wired into
        those ports though.

        * Scripts/update-sources-list.py: Added.

2008-04-08  Mark Rowe  <mrowe@apple.com>

        Clean up after Brady.

        * DumpRenderTree/mac/DumpRenderTree.mm: Add an include so that NSInteger can be found.

2008-04-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitzpettel

        Fixed http://bugs.webkit.org/show_bug.cgi?id=18302
        -WebArchive subresources dump in random order, intermittent failures

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (compareResourceURLs): Sorting function based on the resource URLs
        (serializeWebArchiveToXML): Sort the subresource array

2008-04-07  Brady Eidson  <beidson@apple.com>

        OMG, BUILD - please!

        * Scripts/build-webkit:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Enable running http tests for Qt again. Failing tests can be put into the skipped list.
        * Running these tests on windows and other platforms might need some work.

        * Scripts/run-webkit-tests:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * For the http tests we need the output of the FrameLoaderClient. The QtWebKit API
        is not exporting enough to create the output in DRT itself. Settle with the approach
        Lars has taken for the Editing support and add branches to our FrameLoaderClient code.
        * run-webkit-tests http/tests(/loading) can now be executed.
        * For tests in loading/ directories we are going to throw away the dirty
        QWebPage to start with something clean.


        * DumpRenderTree/qt/DumpRenderTree.cpp:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Treat http and https as special URLs as well. Change the main.cpp and
        DumpRenderTree.cpp to handle http and https URIs as input.
        * I'm not doing the clean up and merging of these two checks now.


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):
        * DumpRenderTree/qt/main.cpp:
        (main):

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Remove dumpFrameLoadCallbacks from simple-subframe.html because it is
        located in a directory with the name "loading". And this will autoamtically
        enable dumping.
        * Remove this method from the LayoutTestController as it is unused now and this
        avoids adding it to the DRT of the Qt port.


        * DumpRenderTree/LayoutTestController.cpp:
        (setPrivateBrowsingEnabledCallback):

2008-04-01  Christian Dywan  <christian@imendio.com>

        Build fix for GCC 4.3.

        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: include string.h

2008-04-01  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix Qt DRT run by also printing EOF on stderr, as expected by
        run-webkit-tests.

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

2008-03-31  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Darin Adler.

        Bug 17665: determineSourceDir() dies if $sourceDir has a trailing backslash

        Remove trailing '/' in $sourceDir in determineSourceDir().

        Fix suggested by Dmitriy Kazachkov.

        * Scripts/webkitdirs.pm:

2008-03-29  Adam Roben  <aroben@apple.com>

        Update for rename of an IWebViewPrivate method

        Reviewed by Mitz Pettel.

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

2008-03-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Anders.

        Enable SVG animation support by default.

        * Scripts/build-webkit:

2008-03-25  Adam Roben  <aroben@apple.com>

        Windows build fix

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        Add $(WebKitLibrariesDir)\include to the include path so we can find
        stdint.h there.

2008-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark.

        Clean up SVG features message to be less confusing.

        * Scripts/build-webkit:

2008-03-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Add EventSender.zoomPageIn/zoomPageOut support to DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (-[EventSendingController zoomPageIn]):
        (-[EventSendingController zoomPageOut]):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/EventSender.cpp:
        (textZoomInCallback):
        (textZoomOutCallback):
        (zoomPageInCallback):
        (zoomPageOutCallback):

2008-03-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - update bisect-builds for Safari 3.1

        * Scripts/bisect-builds: Added Safari 3.1 and the corresponding minimal
        revision, r29711.

2008-03-21  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Holger.

        http://bugs.webkit.org/show_bug.cgi?id=17981

        Add webcore and javascriptcore cppflags to programs' _CPPFLAGS.

        * GNUmakefile.am:

2008-03-21  Adam Roben  <aroben@apple.com>

        Remove a non-working mirror from cygwin-downloader and add the ruby package

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip: Updated.

2008-03-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Ensure that the defines generated for FEATURE_DEFINES are sorted so that they will match the default settings of each project.
        This will prevent the world from being rebuilt if you happen to switch between building in Xcode and with build-webkit on the
        command-line.

        * Scripts/build-webkit:

2008-03-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Dan Bernstein.

        Fix bogus argCount check breaking plugin test.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:

2008-03-17  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Cleanup PluginObject.cpp and add support for testing
        converting from int -> identifier -> string
        and from string -> identifier -> int
        as well as round-tripping ints and stings through identifiers

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginGetProperty):
        (pluginSetProperty):
        (testDOMAccess):
        (stringVariantToIdentifier):
        (int32VariantToIdentifier):
        (doubleVariantToIdentifier):
        (variantToIdentifier):
        (testIdentifierToString):
        (testIdentifierToInt):
        (testCallback):
        (getURL):
        (removeDefaultMethod):
        (getURLNotify):
        (testInvokeDefault):
        (destroyStream):
        (testEnumerate):
        (testGetIntIdentifier):
        (testGetProperty):
        (testEvaluate):
        (testGetPropertyReturnValue):
        (pluginInvoke):
        (pluginInvokeDefault):
        (pluginInvalidate):
        (pluginAllocate):
        (pluginDeallocate):
        (handleCallback):

2008-03-16  Kevin Ollivier  <kevino@theolliviers.com>

        Rubber stamped by Darin Adler.

        Add set-webkit-configuration support for wx port, and centralize
        build dir location setting.

        http://bugs.webkit.org/show_bug.cgi?id=17790

        * wx/browser/browser.bkl:
        * wx/build-wxwebkit:

2008-03-15  Darin Adler  <darin@apple.com>

        * Scripts/commit-log-editor: Include the name line of the change log entry.
        A long time ago I designed this script to not include the name because I
        thought it was redundant (same as the name of the person checking in), but
        nowadays it's more common for someone to check something in done by someone
        else.

        * Scripts/do-webcore-rename: Added some more planned renames and removed
        some that were already done "by hand".

2008-03-13  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin Adler.

        Correct paths to vsprops files so they use the environment
        variable, rather than hard-coded path.
        http://bugs.webkit.org/show_bug.cgi?id=17797.

        * WinLauncher/WinLauncher.vcproj:  Correct paths to vsprops.

2008-03-12  Steve Falkenburg  <sfalken@apple.com>

        VSExpress build fix

        * WinLauncher/WinLauncher.vcproj:

2008-03-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        Run testkjs in the correct productsDir in the GTK+ port.

        * Scripts/run-javascriptcore-tests:

2008-03-11  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Enabled WinLauncher as part of normal Windows build.
        http://bugs.webkit.org/show_bug.cgi?id=17715.

        * WinLauncher/WinLauncher.vcproj: Update to use vsprops so that
          it can find the proper libraries to link against.

2008-03-10  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed and landed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=17581
        Bug 17581: Use of uninitialized value in string ne at WebKitTools/Scripts/run-webkit-tests line 1576.

        Remove the previous warning which occurs when the --random option is used.

        * Scripts/run-webkit-tests: verify that $component[0] is defined before checking for
        its inequality

2008-03-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Darin Adler.

        Done with Lars.

        Ported the netscape test plugin to QWebPluginFactory.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/qt/main.cpp:
        * DumpRenderTree/qt/testplugin.cpp:
        (TestPlugin::plugins):
        (TestPlugin::create):
        * DumpRenderTree/qt/testplugin.h:

2008-03-09  Steve Falkenburg  <sfalken@apple.com>

        Stop Windows build if an error occurs in a prior project.

        Rubber stamped by Darin Adler.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2008-03-08  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Mark Rowe.

        DRT build fix for Tiger.

        * DumpRenderTree/mac/DumpRenderTreeMac.h: Define BUILDING_ON_TIGER.

2008-03-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Fix WebKit build with GCC 4.2.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm: Use correct argument type in method signature.

2008-03-07  Stephanie Lewis <slewis@apple.com>

        Reviewed by Oliver.

        Add Windows part of <rdar://problem/5693690>

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

2008-03-07  Alp Toker  <alp@atoker.com>

        Back out the r30818, r30819 build fix attempts now the GTK+ build
        server has been upgraded.

        * Scripts/webkitdirs.pm:

2008-03-07  Stephanie Lewis <slewis@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5693690> run-webkit-tests swallows STDERR output, including WebCore LEAK messages

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): push EOF to stderr after every test
        * Scripts/run-webkit-tests: collect stderr output and print it

2008-03-07  Steve Falkenburg  <sfalken@apple.com>

        Get pdevenv working with Visual Studio Express.

        Reviewed by Adam.

        * Scripts/pdevenv:

2008-03-06  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Updated for testing <rdar://problem/5785895> Implement hasFocus() for HTMLDocument (HTML5)

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webViewFocus:]): Remove duplicate code that was also in LayoutTestController::setWindowIsKey
        (-[UIDelegate webViewUnfocus:]): Added.  In Safari, the default is to focus another window if there is one.
         To easily test cases where the window is unfocused, I made this just call setWindowIsKey(false).

2008-03-06  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Adam Roben.

        Bug 17691: REGRESSION: FindSafari doesn't work
        http://bugs.webkit.org/show_bug.cgi?id=17691

        Swap my change from r30394 to use the Release libraries instead of Debug
        since some machines don't have the Debug version.

        * FindSafari/FindSafari.vcproj:

2008-03-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam and Tim.

        <rdar://5631450> Drosera: breakpoint indicators disappear after the
        script is finished running.
        - If there is a pre-existing breakpoint on a line when the file is
        updated we need to redraw it.

        * Drosera/debugger.js:

2008-03-06  Brady Eidson  <beidson@apple.com>

        Tiger build fix...?

        * DumpRenderTree/mac/WatchdogMac.mm:

2008-03-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Added a cross-platform Watchdog thread to DRT.

        The current watchdog in both DRTWin and DRTMac is Timer based.  Therefore, deadlocks and long running
        main thread hangs still affect DRT.

        By placing the watchdog on a thread and having DRT "check in" after each test, long-running hangs
        and true deadlocks can be caught.

        There is one hook for platform specific code.  As I did my development and testing on Mac, and Mac has
        `sample` available, the Mac implementation of this hook samples the process before it is killed.

        I arbitrarily chose 30 seconds as the timeout for now - this can be tweaked easily if we find a need.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Added LINKER_DISPLAYS_MANGLED_NAMES

        * DumpRenderTree/ForwardingHeaders/wtf/Locker.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Threading.h: Added.

        * DumpRenderTree/Watchdog.cpp: Added.
        (Watchdog::Watchdog):
        (Watchdog::~Watchdog):
        (Watchdog::start):
        (Watchdog::stop):
        (Watchdog::checkIn):
        (Watchdog::setWatchdogInterval):
        (Watchdog::handleHang):
        (Watchdog::watchdogThreadStart):
        (Watchdog::watchdogThread):
        * DumpRenderTree/Watchdog.h: Added.

        * DumpRenderTree/mac/WatchdogMac.h: Added.
        * DumpRenderTree/mac/WatchdogMac.mm: Added.
        (WatchdogMac::handleHang): Sample the process and write it out to a file

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Setup and start the watchdog before running any tests
        (runTest): Checkin with the watchdog after each test

2008-03-05  Alp Toker  <alp@atoker.com>

        Attempt to get the autotools build working again on the bot with
        build-webkit.

        Force the use of /bin/bash since we seem to have bash-isms in the
        configure script right now.

        * Scripts/webkitdirs.pm:

2008-03-05  Alp Toker  <alp@atoker.com>

        Re-attempt to switch to the autotools build system for GTK+.

        Change scripts to continue when distclean fails.

        * Scripts/webkitdirs.pm:

2008-03-05  Alp Toker  <alp@atoker.com>

        Force qmake for the GTK+ build until we get the build bot to succeed
        with autotools (currently dies at make distclean)

        * Scripts/webkitdirs.pm:

2008-03-04  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Switch the default GTK+ build system from qmake to autotools.

        qmake can still be used by defining WEBKIT_BUILD_SYSTEM=qmake

        * Scripts/build-webkit:
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        * Scripts/do-webcore-rename: Update renaming plan.

2008-03-02  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alp Toker.

        Remove some needless LIBS.

        * GNUmakefile.am:

2008-03-02  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Split the WebKit GTK+ build out of the WebCore build and change the
        shared object name to match the package name.

        * GNUmakefile.am:

2008-03-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Update Xcode configuration to support building debug and release from the mysterious future.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2008-02-29  David Kilzer  <ddkilzer@apple.com>

        Pass the correct configuration switch (--Debug|--Release) to build-testkjs.

        Reviewed by Dan.

        Originally broken in r26838.

        * Scripts/run-javascriptcore-tests: Push configuration switch onto @xcodeArgs
        not local, unused @args variable.

2008-02-29  David Kilzer  <ddkilzer@apple.com>

        Bug 15754: webarchive layout tests fail when WebKit directory path contains symlinks

        <http://bugs.webkit.org/show_bug.cgi?id=15754>

        Reviewed by Geoff and Darin.

        We were using -[NSFileManager currentDirectoryPath] to get the current working directory,
        then removing that path from all file:/// URLs in the WebArchive output so these tests
        would pass no matter where they were run.

        The problem was that -[NSFileManager currentDirectoryPath] resolves symlinks in the
        current working directory, but the WebArchive does not.  This left the current working
        directory in all file:/// URLs in the test output, and thus all tests failed, for any
        developer that used symlinks to get to their WebKit source directory.

        The fix is to look backwards for "/LayoutTests/" in the URL we're passed, and simply
        remove the current working directory path (no matter what it is) after "file://" but
        before "/LayoutTests/".

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (normalizeWebResourceURL): Removed unused oldURLBase argument.  We now replace the
        current working directory as described above.
        (convertWebResourceResponseToDictionary): Remove unused oldURLBase argument.  Update
        calls to normalizeWebResourceURL().
        (serializeWebArchiveToXML): Removed now unused cwdURL variable.  Update calls to
        normalizeWebResourceURL() and convertWebResourceResponseToDictionary().

2008-02-26  Robin Dunn <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Improvements to the wx build script.

        http://bugs.webkit.org/show_bug.cgi?id=17492

        * wx/build-wxwebkit:
        - Update the Windows dll copying logic to copy dlls inside WebKitLibraries/win
        - Allow the build script to properly find wxPython includes under different setups
        - Make sure WX_PREFIX is set to WXWIN (wxWindows dir environment var.) if not defined

2008-02-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        * Scripts/build-webkit: Add --universal and --64-bit flags to make building
        64-bit architectures easy. Combine the two flags to build 4-way universal.
        * Makefile: Add "64" and "64u" make rules. Fix the universal rule to return
        non-zero when the build failes.

2008-02-26  Jessica Kahn  <jess@apple.com>

        Reviewed by Darin Adler.

        * Scripts/gdb-safari: Set WEBKIT_UNSET_DYLD_FRAMEWORK_PATH in gdb's environment,
        so that Safari inherits it when launched. Preexisting code in WebKit checks this
        environment variable, and if set, unsets DYLD_FRAMEWORK_PATH, so that applications
        launched by Safari continue to use the standard system WebKit.

2008-02-25  Adam Roben  <aroben@apple.com>

        Fix run-webkit-tests after r30394

        * Scripts/webkitdirs.pm: Never append _debug to FindSafari's
        executable name.

2008-02-24  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Make some updates based on a trial run of
        the renaming script.

2008-02-24  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming plans.

2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Rubber stamped by Darin Adler.

        Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup
        whitespaces introduced in the previous commit.

        * GNUmakefile.am:

2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Rubber-stamped by Darin Adler.

        * GNUmakefile.am: Add both GLOBALDEPS and WEBKITDEPS instead of DEPENDENCIES.

2008-02-23  David Kilzer  <ddkilzer@apple.com>

        Please clarify licensing for some files
        <http://bugs.webkit.org/show_bug.cgi?id=14970>

        Reviewed by Darin Adler.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Added
        copyright statement.  Replaced license with newer Apple BSD-style license.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Ditto.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp: Ditto.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h: Ditto.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp: Ditto.
        * DumpRenderTree/win/TestNetscapePlugin/main.c: Ditto.
        * mangleme/LICENSE: Added (LGPL).

2008-02-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5748781>
        https://bugs.webkit.org/show_bug.cgi?id=17413
        REGRESSION: Latest Nightly doesn't load Java plugin w/Safari 3.1b

        Copy the Java plug-in over to the new location.

        * FindSafari/FindSafari.cpp:
        (_tmain):

2008-02-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5747325> REGRESSION: HTTP layout tests hang

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        Init the URL request with the correct timeout.

2008-02-21  Mike Auty  <mike.auty@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17445
        [GTK] WebKit doesn't compile with LDFLAGS="-Wl,--as-needed"

        GTK+/autotools build system improvements

        The GNUmakefile.am files make use of the LDFLAGS variable to include library
        additions such as -ljpeg etc.  Unfortunately, if these inclusions aren't made
        in LIBADD/LDADD variables, then they are mis-ordered during the linking.

        The as-needed flag discards libraries whose functions have not been needed by
        earlier libraries, which therefore makes the ordering important.

        This moves all -l library inclusion statements from LDFLAGS variables to
        LIBADD/LDADD variables.

        * GNUmakefile.am:

2008-02-20  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alp.

        - http://bugs.webkit.org/show_bug.cgi?id=17428
          Reenable a Windows-based launcher

        This patch reenables the venerable Spinneret application,
        changing its name to match the other lanch applications.

        * WinLauncher: Added.
        * WinLauncher/WinLauncher.cpp: Added.
        (WinLauncherWebHost::updateAddressBar):
        (WinLauncherWebHost::QueryInterface):
        (WinLauncherWebHost::AddRef):
        (WinLauncherWebHost::Release):
        (resizeSubViews):
        (_tWinMain):
        (MyRegisterClass):
        (InitInstance):
        (WndProc):
        (MyEditProc):
        (About):
        (loadURL):
        * WinLauncher/WinLauncher.h: Added.
        (WinLauncherWebHost::WinLauncherWebHost):
        (WinLauncherWebHost::didStartProvisionalLoadForFrame):
        (WinLauncherWebHost::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WinLauncherWebHost::didFailProvisionalLoadWithError):
        (WinLauncherWebHost::didCommitLoadForFrame):
        (WinLauncherWebHost::didReceiveTitle):
        (WinLauncherWebHost::didReceiveIcon):
        (WinLauncherWebHost::didFinishLoadForFrame):
        (WinLauncherWebHost::didFailLoadWithError):
        (WinLauncherWebHost::didChangeLocationWithinPageForFrame):
        (WinLauncherWebHost::willPerformClientRedirectToURL):
        (WinLauncherWebHost::didCancelClientRedirectForFrame):
        (WinLauncherWebHost::willCloseFrame):
        (WinLauncherWebHost::windowScriptObjectAvailable):
        * WinLauncher/WinLauncher.ico: Added.
        * WinLauncher/WinLauncher.rc: Added.
        * WinLauncher/WinLauncher.vcproj: Added.
        * WinLauncher/resource.h: Added.
        * WinLauncher/small.ico: Added.
        * WinLauncher/stdafx.cpp: Added.
        * WinLauncher/stdafx.h: Added.

2008-02-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff

        Fixed a bug in DRT --threaded mode

        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp:
        (startJavaScriptThreads): Don't detach the newly created thread.  The later call to stopJavaScriptThreads() tries
          to pthread_join() each thread that had been created, but you can't join a detached thread!

2008-02-18  Brady Eidson  <beidson@apple.com>

        Changes by Geoff Garen, Reviewed by Darin

        Fix for <rdar://5747529> - ObjC Exception can cause JSLock to never be released

        DRT changes for test: platform/mac/plugins/webScriptObject-exception-deadlock.html

        [WebScriptObject valueForKey:] might throw an exception, and previously might have "leaked" the global JSLock
        This test calls valueForKey, then runs some arbitrary Javascript on a 2ndary thread.  If the lock has leaked,
        this series of method calls will deadlock.  If things are good, it will complete successfully.

        * DumpRenderTree/mac/ObjCController.m:
        (runJavaScriptThread):
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController testValueForKey]):

2008-02-18  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Adam.

        Remove FindSafari's Release configuration.

        * FindSafari/FindSafari.vcproj:

2008-02-15  Adam Roben  <aroben@apple.com>

        Fix a typo that broke the Mac build

        Reviewed by Mark.

        * Scripts/build-webkit:

2008-02-14  Adam Roben  <aroben@apple.com>

        Turn on cross-document messaging support by default

        Reviewed by Darin Adler.

        * Scripts/build-webkit:

2008-02-14  Adam Roben  <aroben@apple.com>

        Conditionalize cross-document messaging support

        The cross-document messaging parts of HTML 5 are in flux and we want
        ports to be able to turn off the support as needed.

        Note that the support is turned off by default right now. A subsequent
        commit will turn it on by default.

        Reviewed by Darin Adler.

        * Scripts/build-webkit:

2008-02-14  Darin Adler  <darin@apple.com>

       - fix Windows build

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::setStatusText): Update parameter types to match declaration.

2008-02-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff G and Weinig.

        Add ability for DRT to report tests setting the status text.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpStatusCallbacksCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:setStatusText:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:

2008-02-13  Adam Roben  <aroben@apple.com>

        Windows build fix

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

2008-02-13  Adam Roben  <aroben@apple.com>

        Windows/GTK+ build fix

        * DumpRenderTree/LayoutTestController.cpp: #include MathExtras.h to
        get isnan.

2008-02-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Add some much needed Database support to DRT

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpDatabaseCallbacksCallback): Flag to control if the UIDelegate methods related to
          databases are called
        (clearAllDatabasesCallback): Allow a test to delete all databases
        (setDatabaseQuotaCallback): Allow a test to set the quota new origins will get
        (LayoutTestController::staticFunctions):

        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpDatabaseCallbacks):
        (LayoutTestController::setDumpDatabaseCallbacks):

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::setDatabaseQuota):

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::clearAllDatabases): Stubbed out
        (LayoutTestController::setDatabaseQuota): Ditto
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::clearAllDatabases): Stubbed out with error message
        (LayoutTestController::setDatabaseQuota): Ditto

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): Print a
          message with details about the event then return a 5mb quota like before


2008-02-12  Steve Falkenburg  <sfalken@apple.com>

        Changes to support merged MIDL output.

        All COM interfaces are now generated to WebKit.h.

        Reviewed by Sam, Ada.

        * Drosera/win/BaseDelegate.h:
        * Drosera/win/DebuggerClient.cpp:
        * Drosera/win/DebuggerDocumentPlatform.cpp:
        * Drosera/win/Drosera.cpp:
        * Drosera/win/ServerConnection.cpp:
        * Drosera/win/ServerConnection.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/GCControllerWin.cpp:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * DumpRenderTree/win/WorkQueueItemWin.cpp:

2008-02-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix a memory leak

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (getDifferenceBitmap): Use a static CFMutableData instead of allocating
        and leaking the buffer each time.

2008-02-07  Adam Roben  <aroben@apple.com>

        Fix error in bisect-builds when responding "broken" for the first
        build

        Reviewed by Dave Kilzer.

        * Scripts/bisect-builds: Only try to test the build if the nightly
        info for the current index has not been deleted.

2008-02-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fixed two minor typos in the --root option, to get it working.

        * Scripts/run-sunspider:
            1. Actually assign the function argument to our local variable.
            2. Actually set the $root variable, so we don't try to build later.

2008-02-05  Oliver Hunt  <oliver@apple.com>

        RS=Eric.

        Re-enable foreignObject by default as it is needed for a number of non-fO
        related SVG tests and none of the old known crashes occur anymore.

        * Scripts/build-webkit:

2008-02-05  Steve Falkenburg  <sfalken@apple.com>

        Build fix.  Don't override intermediate directory.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2008-02-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix for Windows. willCloseFrame is a pure virtual and we are
        forced to have an implementation.

        This partially reverts r30014.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::willCloseFrame):
        * DumpRenderTree/win/FrameLoadDelegate.h:

2008-02-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Holger.

        Don't build wrapper for SVGTestCase.js (special file for svg/dynamic-updates)

        * Scripts/make-js-test-wrappers:

2008-02-05  Holger Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        In http://bugs.webkit.org/show_bug.cgi?id=16853 it was identified that the
        the output of the willCloseFrame and didClearWindowObject FrameLoadDelegate
        depends on the order the tests are executed.

        Propose to remove willCloseFrame and didlCearWindowObject output from the
        FrameLoadDelegate and update the test results. The output of didClearWindowObject
        is not interesting for any of the current tests and we have other ways to find
        out if a frame was closed or not.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didClearWindowObject):
        * DumpRenderTree/win/FrameLoadDelegate.h:

2008-02-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Workaround for http://bugs.webkit.org/show_bug.cgi?id=16842
        Bug 16842: Hang in DRT in leaks mode due to signal handler doing unsafe things

        Don't install the signal handler unless we are running the pixel tests.
        It is currently only used to restore the color profile, but by catching
        signals we can trigger a deadlock in DRT while running leak tests.
        The deadlock is tracked by http://bugs.webkit.org/show_bug.cgi?id=16842,
        and a more complete fix will need to be developed to address this for
        pixel tests as well.

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

2008-02-04  Mark Rowe  <mrowe@apple.com>

       Gtk qmake build fix.

        * Scripts/webkitdirs.pm:  Fix perl's complaint about an odd number of elements in anonymous hash.

2008-02-04  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker and Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16618
        [GTK] build-webkit and run-webkit-tests autootools support

        * Scripts/build-webkit: added --database and --icon-database options
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-02-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve F.

        Partial fix for <rdar://5621244> Drag & Drop doesn't work correctly in DRT

        Implement required DRT functionality to allow majority of Drag and Drop testcases to work.
        Issues include:
          * Uses Sleep() to implement leapForward reliably.
          * 3 DND tests still fail for reasons that i have not yet determined
          * Has to explicitly ignore an extraneous WM_MOUSELEAVE that i am at a loss to explain

        * DumpRenderTree/win/EventSender.cpp:
        (leapForwardCallback):
        (mouseDownCallback):
        (doMouseUp):
        (mouseUpCallback):
        (doMouseMove):
        (mouseMoveToCallback):
          Minor updates to these functions to handle the different message queue structure.

        (replaySavedEvents):
          More complicated now.  Where possible we just use the old while-loop model of execution,
          but when leapForward has been used we have to jump through some hoops and set up an
          inner event loop so that we can ensure messages get the correct time stamp.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::doDragDrop):
          Call replaySavedEvents directly to force synchronous handling of drag and drop.

2008-02-04  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Alp Toker and Mark Rowe.

        Fix http://bugs.webkit.org/show_bug.cgi?id=17175.
        Bug 17175: Use of C++ compiler flags in CFLAGS

        * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS.

2008-02-04  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        * Scripts/make-js-test-wrappers: Look at the whole LayoutTests tree, not just the fast
        and svg subdirectories. Added some more exceptions for the benefit of the fast/dom
        subdirectory.

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

        Windows Apple-only build fix

        * DumpRenderTree/win/DumpRenderTree.vcproj: Added a new include
        directory.

2008-02-04  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove all trailing whitespace in the GTK+ port and related
        components.

        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/GCControllerGtk.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * GNUmakefile.am:

2008-02-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Also search LayoutTests/svg for js-based tests.

        * Scripts/make-js-test-wrappers:

2008-01-31  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=17006
        [GTK] Header path should be webkit/webkit.h

        Move the GTK+ API sources as needed and update the build systems.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        * GNUmakefile.am:
        * GtkLauncher/main.c:

2008-01-30  Stephanie  <slewis@apple.com>

        Reviewed by Geoff.

        Add an option to run-webkit-tests to merge leaks results and print the number of unique leaks found under a certain call depth.  This should make it easier for the buildbots to track new leaks.

        * Scripts/run-webkit-tests:

2008-01-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        One more debug (external) fix.

        * DumpRenderTree/win/DumpRenderTree.cpp: TestNetscapePlugin is built with a _debug suffix in both DebugInternal
        and Debug configurations.

2008-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig. Sam Weinig.

        Fixed <rdar://problem/5692566> fast/encoding/mailto-always-utf-8.html
        fails when run after fast/dom/Window/window-property-shadowing.html (16902)

        Modified our policy delegates not to output window.name. Since a
        previous test may have explicitly set window.name, we can't rely on its
        implicit value in test results.

        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):

        * DumpRenderTree/win/PolicyDelegate.cpp:
        (PolicyDelegate::decidePolicyForNavigationAction):

2008-01-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/5600926> WebCore on Tiger must link to its own copy of SQLite 3.4 or newer (so HTML database behavior will be correct).

        * Scripts/build-webkit: Copy SQLite static library and headers into the build directory.

2008-01-29  David Kilzer  <ddkilzer@apple.com>

        Refactor ChangeLog path code

        Reviewed by Adam.

        * Scripts/prepare-ChangeLog: Simplify code in one foreach() loop, and extract
        duplicate code in another foreach() loop.

2008-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5710692> All storage tests fail/crash

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): Set an
        arbitrary quota of 5 megabytes.

        (-[UIDelegate webView:frame:quotaForSecurityOrigin:toCreateDatabase:withEstimatedSize:]):
        (-[UIDelegate webView:frame:quotaForSecurityOrigin:fromProposedQuota:database:]):
        Removed unused (I think) code.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::QueryInterface): IWebUIDelegatePrivate3 is now supported.
        (UIDelegate::webViewPainted): A stub implementation.
        (UIDelegate::exceededDatabaseQuota): Set an arbitrary quota of 5 megabytes.
        * DumpRenderTree/win/UIDelegate.h:

2008-01-27  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        GTK+ DRT build fix for breakage introduced in r29822.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setPersistentUserStyleSheetLocation):
        (LayoutTestController::clearPersistentUserStyleSheet):

2008-01-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - add support for directory prologues and epilogues to run-webkit-tests
        - allow setting a persistent user style sheet in DumpRenderTree
        - activate the WebKit Layout Tests font in Windows DumpRenderTree

        * DumpRenderTree/LayoutTestController.cpp:
        (clearPersistentUserStyleSheetCallback): Added.
        (setPersistentUserStyleSheetLocationCallback): Added.
        (LayoutTestController::staticFunctions): Added.
        clearPersistentUserStyleSheet and setPersistentUserStyleSheet.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setPersistentUserStyleSheetLocation): Added.
        (resetWebViewToConsistentStateBeforeTesting): Added the user style sheet
        to the set of things this function resets. Now it either disables the
        user style sheet or sets it to the persistent user style sheet and
        enables it.
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setPersistentUserStyleSheetLocation): Added.
        (LayoutTestController::clearPersistentUserStyleSheet): Added.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setPersistentUserStyleSheetLocation): Added.
        (initialize): Added the WebKit Layout Tests font to the set of fonts to
        install.
        (resetWebViewToConsistentStateBeforeTesting): See DumpRenderTree.mm.
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPersistentUserStyleSheetLocation): Added.
        (LayoutTestController::clearPersistentUserStyleSheet): Added.
        * Scripts/run-webkit-tests: Changed to look for, and if found process in
        DumpRenderTree, files named run-webkit-tests-prologue.html and
        run-webkit-tests-epilogue.html in the resources subdirectory of any
        test directory and platform test results directory. The prologues are
        processed before the first test from the directory (and its
        subdirectories) is run, and the epilogues are processed after the last
        test from the directory is run. Platform-specific prologues and
        epilogues are processed in order of specificity.

2008-01-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mark Rowe.

        <rdar://problem/5699933> http/tests/security/cross-frame-access-get.html is still failing

        * DumpRenderTree/win/DumpRenderTree.cpp: (main): Clear HTTP cache to ensure consistent test environment
        (matching Mac DRT).
        * DumpRenderTree/win/DumpRenderTree.vcproj: Link to CFNetwork.

2008-01-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Ada Chan.

        Fix for <rdar://5131975> DumpRenderTree doesn't support undo/redo

        - Adds simplified UndoManager to windows DRT to allow testing the
          undo/redo code paths in WebCore and WebKit.  This is a temporary
          solution to an issue that should eventually be solved by having a
          shared UndoManager in WebKit.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoObject::DRTUndoObject):
        (DRTUndoObject::invoke):
        (DRTUndoStack::~DRTUndoStack):
        (DRTUndoStack::isEmpty):
        (DRTUndoStack::clear):
        (DRTUndoStack::push):
        (DRTUndoStack::pop):
        (DRTUndoManager::canRedo):
        (DRTUndoManager::canUndo):
        (DRTUndoManager::DRTUndoManager):
        (DRTUndoManager::removeAllActions):
        (DRTUndoManager::registerUndoWithTarget):
        (DRTUndoManager::redo):
        (DRTUndoManager::undo):
        (UIDelegate::UIDelegate):
        (UIDelegate::resetUndoManager):
        (UIDelegate::registerUndoWithTarget):
        (UIDelegate::removeAllActionsWithTarget):
        (UIDelegate::setActionTitle):
        (UIDelegate::undo):
        (UIDelegate::redo):
        (UIDelegate::canUndo):
        (UIDelegate::canRedo):
        * DumpRenderTree/win/UIDelegate.h:

2008-01-23  Adam Roben  <aroben@apple.com>

        Allow directories containing ChangeLogs to be passed to
        resolve-ChangeLogs

        Reviewed by David Kilzer.

        * Scripts/resolve-ChangeLogs:
        (sub findChangeLog): Return a ChangeLog contained within the specified
        directory if one exists.

2008-01-23  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5698732> Copyright strings should include 2008

        Reviewed by Sam.

        * Drosera/win/Drosera.vcproj/Drosera.rc:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc:

2008-01-23  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove whitespace after -I in automake include lists.

        * GNUmakefile.am:

2008-01-23  Michael Goddard <michael.goddard@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Reworked the JavaScriptCore Qt bindings:

        * Update JS DRT controller for Qt JS binding changes.
        There were two functions that needed some changes
        so that the layout tests would work, so this makes
        a few tests pass again.

        * Bump the timeout for layout tests up to 11s.
        At least some tests have an internal timeout of
        10 seconds, so make the waitUntilDone approach
        wait at least 11s.  fast/dom/open-and-close-by-DOM.html
        is one of these - now the failure message is more
        accurate.


        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::waitUntilDone):
        * DumpRenderTree/qt/jsobjects.h:

2008-01-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Adam.

        <rdar://problem/5688975>
        div element on microsoft site has wrong left offset.

        Add new method for testing the return vale of NPN_GetProperty.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2008-01-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        <rdar://problem/5670257> editing/selection/4895428-3.html makes editing/selection/5131716-2.html fail

        * DumpRenderTree/win/EventSender.cpp: (makeEventSender): Reset static variables for a new test.

2008-01-21  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16955
        Get errors when cross-compile webkit-gtk

        * GNUmakefile.am: Removed ICU_CFLAGS

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

        Reviewed by Mitz and Adam.

        * Scripts/svn-create-patch: Sort ChangeLog files first. Also slightly improved the
        sorting speed by doing all sort criteria in a single pass instead of three sorts.

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix focus chain handling and cycling through focusable objects (links) using tab/backtab.

        * Fix GraphicsContext::drawFocusRing to also draw single focus rects.
        * Implemented QWebPage::focusNextPrevChild by sending fake tab/shift-tab events
        and make the return value depend on whether we successfully determined a focusable
        node or not.
        * Changed QWebView::focusNextPrevChild() to call the base QWidget implementation correctly
        if we could not handle the focus chain ourselves.
        * Changed the focus policy of QWebView to correctly use WheelFocus instead of ClickFocus.
        * Made ChromeClientQt::canTakeFocus() and takeFocus() dummy method since they are only
        used to control the situation of stepping out of the focus chain inside the page.
        * Made inclusion of links in the focus chain configurable through QWebSettings::LinksIncludedInFocusChain.
        The layout tests expect this to be disabled but for the user it seems sensible to have it
        on by default, hence the default in qwebsettings.cpp


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

2008-01-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Allow the --http flag to run-webkit-tests to override
        the default behaviour of disabling HTTP tests for Qt,
        Gtk and Wx.

        * Scripts/run-webkit-tests:

2008-01-19  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/5695344> check-for-global-initializers script never checks any object files

        Reviewed by Darin Adler.

        We now touch a check-for-global-initializers.timestamp file in
        the TARGET_TEMP_DIR directory to determine when new object files
        have been compiled and thus need to be checked.  If the timestamp
        file doesn't exist, all object files will be checked.

        Previously the modification time of the "executable" (the
        framework binary, e.g., WebKit.framework/WebKit) was used, but
        since this was the last file modified at the end of the compile
        phase, no object files would ever get checked!

        Also added JSCustomSQLTransactionCallback.o to the list of files
        since it has static initializers in Debug builds of WebCore.

        * Scripts/check-for-global-initializers:

2008-01-18  Adam Roben  <aroben@apple.com>

        Build fix

        * Scripts/build-webkit:

2008-01-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Update build-webkit to account for foreign-object being disabled by
        default.

        * Scripts/build-webkit:

2008-01-18  Adam Roben  <aroben@apple.com>

        Updated for method renames

        Reviewed by Adele.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setWindowIsKey):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webViewFocus:]):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didCommitLoadForFrame):

2008-01-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Fix plugin-related tests in Debug_Internal configuration, which are failing because of CRT version mismatch
        between DRT and TestNetscapePlugin.

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj: Added a Debug_Internal configuration.
        * DumpRenderTree/DumpRenderTree.sln: Use this configuration.

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix fast/dom/Window/window-resize.html

        In DRT connect the page's geometryChangeRequest signal to a slot that
        sets the geometry of the view widget.


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::setViewGeometry):
        (WebCore::WebPage::WebPage):

2008-01-17  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * Drosera/DroseraWin.make:

2008-01-17  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Fixed a bug number.

2008-01-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16908
        run-webkit-tests complains about missing FindSafari.exe

        * Scripts/webkitdirs.pm: Append _debug as appropriate.

2008-01-17  Steve Falkenburg  <sfalken@apple.com>

        Re-add DEBUG_WEBKIT_HAS_SUFFIX.

        Rubber-stamped by Jon Honeycutt.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-01-16  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16218
        [GTK] API: Should this entry point be called go_back rather than go_backward?

        Track back/forward API changes in the tools.

        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (BackForwardItem::invoke):
        * GtkLauncher/main.c:
        (go_back_cb):

2008-01-16  Adam Roben  <aroben@apple.com>

        Windows build fix after r29488

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        Build into a subdirectory of $WebKitOutputDir\bin to match where DRT
        expects to find the plugin.

2008-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed the waitUntilDone watchdog timer -- the old code never added the
        timer to the run loop, so it didn't do anything.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setWaitToDump):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWaitToDump):

2008-01-14  Steve Falkenburg  <sfalken@apple.com>

        Use shared vsprops for most vcproj properties.

        Reviewed by Darin Adler.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * FindSafari/FindSafari.vcproj:

2008-01-14  Stephanie  <slewis@apple.com>

       Reviewed by NOBODY.

       revert accidental character.

       * Scripts/run-webkit-tests:

2008-01-14  Stephanie  <slewis@apple.com>

        RS=Oliver

        add Quicktime PPC only leaks to Leopard exclude list. See <rdar://problem/5667132>

        * Scripts/run-webkit-tests:

2008-01-14  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Queue up another rename.

2008-01-14  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Darin Adler.

        * Allow to run the tests in reverse order to spot test cases where the result depends on the order
        the tests were ran.
        * This is from http://bugs.webkit.org/show_bug.cgi?id=16869

        * Scripts/run-webkit-tests:

2008-01-14  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Darin Adler.

        * Randomize tests array to spot test cases where the results depends on the order
        the tests are ran.
        * This is from http://bugs.webkit.org/show_bug.cgi?id=16869

        * Scripts/run-webkit-tests:

2008-01-14  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: More ignore list tweaking.

2008-01-14  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Add another leak to the ignore list.

2008-01-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - try to fix failure in fast/dom/Window/window-onFocus.html seen on the
          build bots

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting): Focus the web view.

2008-01-13  Steve Falkenburg  <sfalken@apple.com>

        Share common files across projects.

        Unify vsprops files
        Debug:          common.vsprops, debug.vsprops
        Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
        Release:        common.vsprops, release.vsprops

        Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
        debug_internal.vsprops will be mostly empty except for file path prefix modifiers.

        Pull auto-version.sh, VERSION, and PRODUCTVERSION from tools.

        Reviewed by Adam Roben.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * Drosera/win/Drosera.vcproj/PRODUCTVERSION: Removed.
        * Drosera/win/Drosera.vcproj/VERSION: Removed.
        * Drosera/win/Drosera.vcproj/auto-version.sh: Removed.
        * Drosera/win/Drosera.vcproj/debug.vsprops: Removed.
        * Drosera/win/Drosera.vcproj/debug_internal.vsprops: Removed.
        * Drosera/win/Drosera.vcproj/release.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/debug.vsprops: Removed.
        * DumpRenderTree/win/debug_internal.vsprops: Removed.
        * DumpRenderTree/win/release.vsprops: Removed.

2008-01-13  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=16314
          Script to launch Drosera

        * Scripts/gdb-drosera: Added.
        * Scripts/run-drosera: Added.
        * Scripts/run-drosera-nightly.cmd: Added.
        * Scripts/webkitdirs.pm: Added runDrosera function.

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

        - fix breakage due to last-minute change

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Declare the loop variable.

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

        Reviewed by Adam Roben.

        - fix <rdar://problem/5132009> Windows DRT does not support multiple windows

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (DumpRenderTreeWndProc):
        (initialize):
        (dumpBackForwardList):
        (dumpBackForwardListForAllWindows):
        (dump):
        (resetWebViewToConsistentStateBeforeTesting): Factored out of
        runTest().
        (runTest):
        (allWindows): Added. Returns a vector of all open windows.
        (windowToWebViewMap): Added. Returns a map from open windows to their
        WebViews.
        (createWebViewAndOffscreenWindow): Factored out of main() to be
        reusable for creating extra windows.
        (main):
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::windowCount): Implemented.
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::createWebViewWithRequest): Implemented.
        (UIDelegate::webViewClose): Implemented.
        * DumpRenderTree/win/UIDelegate.h:

2008-01-12  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Hide non-public symbols in GTK+/autotools release builds.

        * GNUmakefile.am:

2008-01-12  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Ap.

        * Make launching of the WebKit httpd work on GNU/Debian/Linux

        The configuration of Apache2 and installation does not depend on
        the kernel but on the distribution policy. Make launching of httpd
        work for Debian derived distributions.

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-01-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix crash in http/tests/security/local-JavaScript-from-remote.html under guard malloc.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Retain string before returning it to
        match the callers expectations that it can take ownership of the string.

2008-01-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        <rdar://problem/5667275> fast/dynamic/layer-hit-test-crash.html is failing

        * DumpRenderTree/win/DumpRenderTree.cpp: (runTest): Ignore WM_MOUSELEAVE events,
        as these are only posted because the test window is not a normal visible one, and
        they confuse drag&drop machinery.

2008-01-11  Adam Roben  <aroben@apple.com>

        Fix a crash when pathToLocalResource fails and a leak

        Reviewed by Darin Adler.

        * DumpRenderTree/LayoutTestController.cpp:
        (pathToLocalResourceCallback): Dont leak the JSStringRef, and make
        sure not to pass null to JSValueMakeString.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pathToLocalResource): Print an error message if
        the conversion fails so it's clear what happened.

2008-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John Sullivan.

        * DumpRenderTree/mac/GCControllerMac.mm:
        (GCController::collectOnAlternateThread): Updated for name change.

2008-01-10  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Don't build dftables any longer since it's now a Perl
        script.

        * wx/build-wxwebkit:

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

        Reviewed by Anders Carlsson.

        Make DRT track open windows instead of allocated windows so that
        we can avoid ASSERTION due to late deallocs out of our control.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpBackForwardListForAllWindows):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (+[DumpRenderTreeWindow openWindows]):
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow close]):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::windowCount):

2008-01-10  Ada Chan  <adachan@apple.com>

        Meta key is not the same as Alt key on windows.

        Reviewed by Darin Adler.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2008-01-09  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin, Sam and Adam.

        -<rdar://problem/5654486> REGRESSION (Safari 3.0.4-TOT): clicking on
        link in gmail message displays JavaScript alert falsely complaining
        about pop-up blocking.
        - Added the ability to enable the pop-up blocker via the
        LayoutTestController.

        * DumpRenderTree/LayoutTestController.cpp:
        (setPopupBlockingEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setPopupBlockingEnabled):

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        rename QWebPageHistory to QWebHistory.


        * DumpRenderTree/qt/jsobjects.cpp:

2008-01-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - add some more renames, adjust some

        * Scripts/do-webcore-rename:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Enable SVG Fonts support by default.

        * Scripts/build-webkit:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Adam.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16244
        DRT doesn't handle platform specific pixel test results correctly.

        <test>-expected.txt files and <test>-expected.png files may now live
        in different directories (ie. a cross-platform <test>-expected.txt file
        and a platform-specific <test>-expected.png file).

        * Scripts/run-webkit-tests:

2008-01-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - <rdar://problem/5666914> fast/regex/test{1,4}.html are failing
        DRT did not correctly handle printing the '\0' char.  Now it does.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dump):

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Ported of the network backend of the Qt platform to Qt 4.4's new networking API.


        * DumpRenderTree/qt/main.cpp:
        * DumpRenderTree/qt/testplugin.cpp:
        * DumpRenderTree/qt/testplugin.h:

2008-01-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Fix hang in fast/frames/frame-display-none-focus.html during Gtk layout tests.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (processWork): Process pending work.
        (webViewLoadFinished): Schedule processing of pending work.
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: Use webkit_web_frame_reload.

2008-01-05  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more renaming plans.

2008-01-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Alexey and Darin.

        Adding "home" and "end" to DRT's keydown since
        DOM key events can't handle keyIdentifiers at this point.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix DRT after the changes to QWebPage.

        The great thing is that we actually don't have
        any regressions from the QWebPage change :)


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

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make QWebPage a QObject and get things to compile.

        Nothing works currently though.


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

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        take a QString as identifier in QWebFrame::addToJSWindowObject.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::initJSObjects):

2008-01-04  Alp Toker  <alp@atoker.com>

        GTK+ DRT build fix for breakage introduced in r29149.

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

2008-01-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5463489> A number of layout tests should be using execCommand instead of textInputController

        Added layoutTestController.execCommand to access editor commands that are not available
        via document.execCommand.

        * DumpRenderTree/LayoutTestController.cpp:
        (execCommandCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::execCommand):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::queueLoad):
        (LayoutTestController::execCommand):

2008-01-03  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin, Mitz.

        fixed <rdar://5130762> mousedowns in different locations increase the clickcount incorrectly

        the clickcount should not increase if the last click was at a different location.  it's a new click.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):

2008-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * Scripts/update-webkit: Make this work a little better for the people at Apple
        who have a directory named Internal.

2008-01-03  Adam Roben  <aroben@apple.com>

        Use HTTP::Date instead of Date::Parse because it's installed by Cygwin by default

        Rubberstamped by Mark.

        * Scripts/update-webkit-auxiliary-libs:

2008-01-03  Adam Roben  <aroben@apple.com>

        Fix Bug 15663: update-webkit re-downloads WebKitAuxiliaryLibrary unnecessarily

        http://bugs.webkit.org/show_bug.cgi?id=15663

        Added a fuzz factor into the Last-Modified comparison for downloading
        WebKitAuxiliaryLibrary.zip.

        The zip file is served from a set of mirrors who give Last-Modified
        times that are off by 1-3 seconds from each other. This was causing
        the build bots to redownload WebKitAuxiliaryLibrary for every build,
        which would then cause all of WebCore to rebuild each time.

        Reviewed by Mark.

        * Scripts/update-webkit-auxiliary-libs: Check if the new zip file is
        at least 30 seconds newer than the old one -- otherwise we assume that
        the difference in time is due to the mirrors being slightly offset
        from each other.
        (sub lastModifiedToUnixTime): Added.

2008-01-03  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * DumpRenderTree/ForwardingHeaders/wtf/HashTraits.h: Added (needed by COMPtr.h).

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Moved QWebPage::open to QWebFrame::load and added setHtml.


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

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added the first revision of QWebView and started moving functionality from QWebPave over to QWebView and QWebFrame.


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

2008-01-02  Sam Weinig  <sam@webkit.org>

        * Scripts/do-webcore-rename: Yet more renaming ideas.

2008-01-02  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming ideas. (Maciej, please merge yours with mine.)

2008-01-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        fixing assertion hit with editing/selection/move-begin-end.html

        * DumpRenderTree/ForwardingHeaders/wtf/ASCIICType.h: Added.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        using isupper will cause an assertion for inputs outside of ascii range. use isASCIIUpper instead.

2008-01-02  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more name change plans.

2008-01-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Added handling for page up and page down in EventSender

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2008-01-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Fix fast/events/arrow-keys-on-body.html for real.

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Pass proper keyData for WM_KEYUP, too.

2008-01-02  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=16674
        [GTK] run-launcher sets wrong LD_LIBRARY_PATH

        * Scripts/run-launcher:

2007-12-31  Darin Adler  <darin@apple.com>

        Suggested by Antti.

        * Scripts/webkitdirs.pm: Turned off the QuickTime requirement for Windows until
        we get it installed on the build bots.

2007-12-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * Scripts/do-webcore-rename: Add a few more planned renames s/(\w+)Imp/\1/

2007-12-29  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16663
          leak bot shows createCStringFromNPVariant result leaking

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke): Added a missing free.

2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16390
        Use autotools or GNU make as the build system for the GTK port

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: include glib.h
        * GNUmakefile.am: Added.

2007-12-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver.

        Fix fast/events/arrow-keys-on-body.html, failing on Windows.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Add KF_EXTENDED flag to arrow keys. Also add a count
        of 1, even though WebKit currently ignores it.

2007-12-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx buildbot fix. Update libpng dl script to the latest version.

        * wx/install-unix-extras:

2007-12-22  Antti Koivisto  <antti@apple.com>

        Fix a typo.

        * Scripts/webkitdirs.pm:

2007-12-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        - Disable the back/forward cache using the new WebPreferences API
          instead of through the BackForwardList.  This makes us match what
          we do on Windows.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (setDefaultsToConsistentValuesForTesting):

2007-12-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - disable the back/forward cache in Windows DumpRenderTree. It is
          already disabled in Mac DumpRenderTree.

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

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

        Reviewed by Darin and Steve.

        - check for QuickTime SDK on Windows.
        - build media support on Windows by default

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

2007-12-21  Kevin Ollivier  <kevino@theolliviers.com>

        Build script fix for buildbot.

        * wx/build-wxwebkit:

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

        Reviewed by mjs.

        * Scripts/run-sunspider: change --runs default to 10 for better accuracy

2007-12-20  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Steve.

        - <rdar://5656485> Drosera: Win: Nightly does not reliably connect to
        WebKit.

        - Drosera and Safari need to use the same ProgIDs in order for
        CoCreateInstance to work properly.  The most robust way to do this is
        for WebKit to dynamically publish those ProgIDs.

        * Drosera/win/DebuggerClient.cpp: Use the published ProgIDs
        (DebuggerClient::createWebViewWithRequest):
        * Drosera/win/Drosera.cpp: Use the published ProgIDs and rename some
        statics.
        (Drosera::initUI):
        (Drosera::attach):
        (Drosera::attemptToCreateServerConnection):
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Fix a runtime failure.
        * Drosera/win/ServerConnection.cpp: Reformat the connection function and
        make use of the published ProgIDs.
        (ServerConnection::attemptToCreateServerConnection):

2007-12-20  Kevin McCullough  <kmccullough@apple.com>

        - <rdar://problem/5658317> REGRESSION: 20+ leaks seen on buildbots.
        - Build bot and leak fix.

        * DumpRenderTree/LayoutTestController.cpp:
        (pathToLocalResourceCallback):

2007-12-19  David Kilzer  <ddkilzer@apple.com>

        Make svn-apply/svn-unapply work with patches from git-format-patch.

        Reviewed by Darin Adler.

        * Scripts/svn-apply:
        (patch): If 'Index:' can't be found in the text passed in, print it
        out with a warning and return early.
        * Scripts/svn-unapply:
        (patch): Ditto.

2007-12-18  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Alp Toker.

        Build related fixes.

        * wx/build-wxwebkit:
        - Check to make sure the user is running a supported wx port
        - More robust checks for Cygwin
        - Only run install-unix-extras on Mac, it's not the right solution
          for Linux distros.
        - Remove outdated Linux instructions after successful build
        - Clean Bakefile-generated files during a clean operation

2007-12-18  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Don't generate a wrapper for select-options-remove.js.

2007-12-18  Steve Falkenburg  <sfalken@apple.com>

        Add script to run Drosera as part of the nightly.

        Reviewed by Kevin M.

        * Scripts/run-drosera.cmd: Added.

2007-12-18  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Remove a stray K.

2007-12-18  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Plan more renaming.

2007-12-14  Juan A. Suarez Romero  <jasuarez@igalia.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16042
        [GTK] Eliminate webkit_init()

        Moving webkit initialization to WebView class init.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main):
        * GtkLauncher/main.c:
        (main):

2007-12-17  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=13542
        gdklauncher doesnt change URL in adress GTKEntry.

        * GtkLauncher/main.c:
        (load_commit_cb): added
        (title_change_cb):
        (create_browser):

2007-12-16  Dimitri Glazkov  <dimitri@glazkov.com>

        Reviewed by Adam Roben.

        Remove the double-quotes around the PATH variable value, in order to make it work in Windows shell.

        * FindSafari/FindSafari.cpp:
        (_tmain):

2007-12-16  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16315
        FindSafari needs a path-only option.

        * FindSafari/FindSafari.cpp:
        (_tmain):

2007-12-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=16462
        REGRESSION: access keys broken on Windows

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Send system key events
        if Alt is pressed.

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

        Reviewed by Mark Rowe.

        Fix urlSuitableForTestResult to correctly identify wstring::npos as
        the case when wstring.find doesn't find anything.

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

2007-12-15  Alp Toker  <alp@atoker.com>

        GTK+ DRT build fix for GLib < 2.14.

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

2007-12-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Add a watchdog timer to Gtk DumpRenderTree, and implement alert/prompt/confirm.  This prevents
        many layout tests from hanging while waiting on user responses to dialogs.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (webViewScriptAlert):
        (webViewScriptPrompt):
        (webViewScriptConfirm):
        (main):
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (waitToDumpWatchdogFired):
        (LayoutTestController::setWaitToDump):

2007-12-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Flesh out DumpRenderTree for Gtk.  After these changes, the majority of the tests in fast/js pass.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpFramesAsText): Don't print the frame name when dumping the main frame as text.
        (dump):
        (runTest):
        (webViewLoadStarted): Store the top frame when it starts loading so we can use it to determine when to dump.
        (webViewLoadFinished): Dump when the top frame load completes if we're not waiting for a JS callback and the
        work queue is empty.
        (webViewWindowObjectCleared): Set up window.layoutTestController.
        (webViewConsoleMessage): Match the console message format expected by the layout test results.
        (main): Hook up the new signals.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Only notify done if the top frame has completed loading to avoid
        dumping multiple times.
        * Scripts/build-dumprendertree: Ensure build-dumprendertree is a no-op for Gtk too.
        * Scripts/run-webkit-tests: Teach run-webkit-tests that Gtk is like Qt in many ways.  Use run-launcher to open test results.

2007-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Assert that a web frame that's loading a resource always has either a data source or
        a provisional data source.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):

2007-12-14  Darin Adler  <darin@apple.com>

        - fix mistake causing nearly all tests to fail on Windows

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole): Need to compare the result of find with
        npos, not 0. Also pass URL in to URL function rather than passing the entire message.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:]): Pass path only to path function rather
        than passing the entire message.

2007-12-14  Darin Adler  <darin@apple.com>

        - fix Tiger build

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:]): Re-implement this without using any
        new-to-Leopard methods.

2007-12-14  Darin Adler  <darin@apple.com>

        * DumpRenderTree/mac/FrameLoadDelegate.mm: Don't implement didReceiveIcon delegate method
        since it now triggers unwanted icon loading. We only had it because we implemented "all"
        delegate methods here.

2007-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Geoff.

        <rdar://problem/5619295>
        REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)

        Add property getting methods to the plug-in.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2007-12-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Layout test fix for mac. When dumped to the console local file paths
        now only show the name of the resource not the whole path.  This is to
        make the results machine and OS independent.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:]):

2007-12-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Layout tests fix.  We need a way to remove machine-dependent
        information from paths in layout test results. The UIDelegate now does
        this.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult):
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole):

2007-12-13  Alp Toker  <alp@atoker.com>

        Build fix for DRT breakage introduced in r28690.

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

2007-12-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Alice and Sam.

        - <rdar://5621435> Need a way to specify local resources (being loaded
        from HTTP tests) on Windows.
        - Implemented pathToLocalResource which exposes the functionality of
        converting a given unix path to the correct location on Windows.

        * DumpRenderTree/LayoutTestController.cpp:
        (pathToLocalResourceCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pathToLocalResource):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pathToLocalResource):

2007-12-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        <rdar://problem/5132003>
        dumpResourceLoadCallbacks is not implemented in DRT on Windows.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        Set the resource load delegate.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

        * DumpRenderTree/win/ResourceLoadDelegate.cpp: Added.
        * DumpRenderTree/win/ResourceLoadDelegate.h: Added.

2007-12-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Fix conversion from double to LPARAM in dispatchMessage().

        * DumpRenderTree/win/EventSender.cpp:
        (dispatchMessageCallback):

2007-12-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe and Sam Weinig too!

        - added Helvetica Oblique and Helvetica Bold Oblique to the list of
          fonts DumpRenderTree registers.

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

2007-12-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Make DumpRenderTree on mac use its own path for Databases testing

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Keep a string to ~/Library/Application Support/DumpRenderTree
          for future DRT-only use, then use it to construct the Databases path and set that default

2007-12-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5535636>
        Have to press 4 times instead of 2 times to get the expected result of ^^ with german keyboard.

        http://bugs.webkit.org/show_bug.cgi?id=13916
        JavaScript detects Tab as a character input on a textfield validation

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]): Added a few more named keys.
        Dispatch a keyup to better match what happens when a key is physically pressed.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Ditto. Also make sure that WM_CHAR is consistently dispatched before
        returning from keyDown().
        (getConstantCallback): Fixed a couple copy/paste mistakes.

2007-12-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver.

        - <rdar://5599845> Drosera: Does not show loal files in the file list
        on the left side.

        * Drosera/debugger.js: - Updated url dividing regex to handle %s and :s.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: - Updated Debug settings
        so the open source community can build.

2007-12-10  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig

        Update DRT Mac to reflect the new UI Delegate methods I just checked into WebKit/mac

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:quotaForSecurityOrigin:toCreateDatabase:withEstimatedSize:]):
        (-[UIDelegate webView:frame:quotaForSecurityOrigin:fromProposedQuota:database:]):

2007-12-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam W.

        Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.

        Fixes <rdar://problem/5620249> Must disable SVG animation
        <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior

        In order to allow finer grained control over the set of SVG features
        this patch splits ENABLE_SVG_EXPERIMENTAL_FEATURES into the following
        distinct flags:
        ENABLE_SVG_ANIMATION
        ENABLE_SVG_FILTERS
        ENABLE_SVG_FONTS
        ENABLE_SVG_AS_IMAGE
        ENABLE_SVG_USE

        by default only ENABLE_SVG_AS_IMAGE and ENABLE_SVG_USE are set.

        Script handles all the new build flags, and allows --svg-experimental
        to automatically enable all features.

        * Scripts/build-webkit:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Fix version parsing.

        Rubber-stamped by Oliver.

        * Drosera/win/Drosera.vcproj/auto-version.sh:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Build modifications for Drosera.

        Reviewed by Adam.

        * Drosera/DroseraWin.make: Added.
        * Drosera/win/Drosera.vcproj/Drosera.rc:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * Drosera/win/Drosera.vcproj/PRODUCTVERSION: Added.
        * Drosera/win/Drosera.vcproj/VERSION: Added.
        * Drosera/win/Drosera.vcproj/auto-version.sh: Added.

2007-12-06  Adam Roben  <aroben@apple.com>

        Explicitly turn on the Mac font ascent hack on Windows

        This keeps our font metrics matching those from Mac.

        Reviewed by Hyatt.

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

2007-12-06  Anders Carlsson  <andersca@apple.com>

        Rename main.c to main.cpp here too.

        * DumpRenderTree/win/TestNetscapePlugin/main.cpp: Copied from DumpRenderTree/win/TestNetscapePlugin/main.c.

2007-12-06  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Geoff.

        * Scripts/do-webcore-rename: Don't rename kjs_css twice.

2007-12-06  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more renaming plans.

2007-12-06  Anders Carlsson  <andersca@apple.com>

        Restore implementation of testGetIntIdentifier that was accidentally
        removed somehow (possibly when I made PluginObject be a cpp file).

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2007-12-05  Anders Carlsson  <andersca@apple.com>

        Make the entry points extern "C".
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:

2007-12-05  Anders Carlsson  <andersca@apple.com>

        C++ warning fixes.

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_Destroy):
        (NPP_SetWindow):
        (NPP_NewStream):
        (NPP_HandleEvent):
        (NPP_URLNotify):
        (NPP_GetValue):

2007-12-05  Anders Carlsson  <andersca@apple.com>

        Add the .cpp files to the TestNetscapePlugIn target.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-12-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Rename the TestNetscapePlugIn .c files to be .cpp.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: Removed.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Copied from DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c: Removed.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp: Copied from DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c: Removed.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp: Copied from DumpRenderTree/TestNetscapePlugIn.subproj/main.c.
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2007-12-05  Adam Roben  <aroben@apple.com>

        Fix case of keypresses from the Windows implementation of eventSender.keyDown

        This fixes several regression tests.

        Reviewed by Alice.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Virtual keycodes for ASCII characters are always
        uppercase, so we need to check the case of the original character
        passed in to eventSender.keyDown.

2007-12-05  Adam Roben  <aroben@apple.com>

        Learn from Tim's mistakes

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Reset the authorAndUserStylesEnabled preference for each
        test.

2007-12-05  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Initialize GTK+ and WebKit so the tests can run.

        Reorganize the headers a little.

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

2007-12-04  Anders Carlsson  <andersca@apple.com>

        Remove IWebScriptScope include.

        * Drosera/win/DebuggerDocumentPlatform.cpp:

2007-12-04  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Mark Rowe.

        Define CF as platform for mac and revert r28409

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/mac/DumpRenderTreeMac.h:

2007-12-04  Sam Weinig  <sam@webkit.org>

        Define CF as platform for windows.

        Reviewed by Adam Roben.

        * DumpRenderTree/win/DumpRenderTreeWin.h:

2007-12-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam and Darin.

        - Removed a needless BSTR cleanup.

        * Drosera/win/DebuggerDocumentPlatform.cpp:
        (DebuggerDocument::getPlatformCurrentFunctionStack):

2007-11-27  Adam Roben  <aroben@apple.com>

        Fix <rdar://5614497> setAuthorAndUserStylesEnabled is not implemented in DRT

        Reviewed by Maciej.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAuthorAndUserStylesEnabled): Implemented.

2007-12-04  Alp Toker  <alp@atoker.com>

        Prospective Win DRT build fix.

        * DumpRenderTree/DumpRenderTree.h:

2007-12-04  Alp Toker  <alp@atoker.com>

        Fix a clobbered copyright header.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:

2007-12-04  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15561
        GTK port needs DumpRenderTree implementation

        Start work on the GTK+ DRT.

        This does not work yet, and there are a few lingering style issues
        (nothing major) but this patch has been stuck in the bug tracker for
        too long already.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/gtk: Added.
        * DumpRenderTree/gtk/DumpRenderTree.cpp: Added.
        (autocorrectURL):
        (shouldLogFrameLoadDelegates):
        (dumpFrameScrollPosition):
        (displayWebView):
        (appendString):
        (dumpFramesAsText):
        (dumpRenderTreeAsText):
        (dump):
        (runTest):
        (main):
        * DumpRenderTree/gtk/DumpRenderTree.pro: Added.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h: Added.
        * DumpRenderTree/gtk/GCControllerGtk.cpp: Added.
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Added.
        (LayoutTestController::~LayoutTestController):
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::copyDecodedHostName):
        (LayoutTestController::copyEncodedHostName):
        (LayoutTestController::display):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::notifyDone):
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):
        (LayoutTestController::queueLoad):
        (LayoutTestController::queueReload):
        (LayoutTestController::queueScript):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setWindowIsKey):
        (LayoutTestController::setWaitToDump):
        (LayoutTestController::windowCount):
        (LayoutTestController::setPrivateBrowsingEnabled):
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: Added.
        (JSStringCopyUTF8CString):
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):

2007-12-03  Sam Weinig  <sam@webkit.org>

        Move JavaScriptCore thread testing code to pthread specific directory
        and remove the dependance on CoreFoundation by using WTF::HashSet.

        Reviewed by Geoff and Oliver.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ForwardingHeaders/wtf/HashMap.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/HashSet.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Vector.h: Added.
        * DumpRenderTree/JavaScriptThreading.h: Copied from DumpRenderTree/mac/JavaScriptThreading.h.
        * DumpRenderTree/mac/JavaScriptThreading.cpp: Removed.
        * DumpRenderTree/mac/JavaScriptThreading.h: Removed.
        * DumpRenderTree/pthreads: Added.
        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp: Copied from DumpRenderTree/mac/JavaScriptThreading.cpp.
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):

2007-12-03  Andrew Bonventre  <andybons@google.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16267
        Symbol lookup menu broken in debugger view

        * Drosera/debugger.js: Fixed javascript error where document property
        should have been used instead of contentDocument in switchFunction that
        was breaking the select symbol dropdown menu.  This is because
        window.frames will return a Window object and not a frame object like
        the author was originally expecting.

2007-12-03  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - <rdar://5618942> Drosera: Console window does not process everything
        correctly.
        - <rdar://5619005> Drosera: could be sped up by moving the
        WebScriptScope stuff into the WebScriptCallFrame.
        - Now the console can correctly process objects and does not receive
        notifications from JavaScriptCore about the JavaScript in Drosera's
        own process.

        * Drosera/win/DebuggerDocumentPlatform.cpp:
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):

2007-12-03  Stephanie  <slewis@apple.com>

        Reviewed by Darin Adler.

        Check to see if we are building a debug root

        * Scripts/check-for-global-initializers:

2007-12-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - added a testGetIntIdentifier() method to TestNetscapePlugIn

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):

2007-12-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver.

        Added eventSender.dispatchMessage() - will be used to test Windows keyboard input
        in a more fine-grained manner than eventSender.keyDown().

        * DumpRenderTree/win/EventSender.cpp:
        (getConstantCallback):
        (dispatchMessageCallback):

2007-12-02  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More planned renaming.

2007-12-02  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Anders.

        Use [NSURL absoluteString] instead of [NSURL description] in order to get
        more uniform results cross platform.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSURL _drt_descriptionSuitableForTestResult]):

2007-12-02  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Niko.

        Rename FrameLoaderDelegate.h/cpp to FrameLoadDelegate.h/cpp.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/FrameLoadDelegate.cpp: Copied from DumpRenderTree/win/FrameLoaderDelegate.cpp.
        * DumpRenderTree/win/FrameLoadDelegate.h: Copied from DumpRenderTree/win/FrameLoaderDelegate.h.
        * DumpRenderTree/win/FrameLoaderDelegate.cpp: Removed.
        * DumpRenderTree/win/FrameLoaderDelegate.h: Removed.

2007-12-01  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        Make use of the newly introduced webkit.h convenience header.

        * GtkLauncher/main.c:

2007-12-01  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        * Check to see if the directory exists and exit if not.

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

2007-12-01  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        * Don't hide symbols when in Debug mode
        * On Linux (glibc) provide a backtrace in the test output for debugging purposes


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

2007-11-30  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15691
        [GTK] Public API does not follow GTK+ conventions

        Refactor the WebKit/GTK+ public API. Changes:
          WebKitPage -> WebKitWebView
          WebKitFrame -> WebKitWebFrame

        Public API source and header names have been updated to mirror the API
        changes.

        The API is now kept in WebKit/gtk/WebView to match other ports in the
        same class such as Mac and Win.

        * GtkLauncher/main.c:
        (activate_uri_entry_cb):
        (link_hover_cb):
        (title_change_cb):
        (progress_change_cb):
        (go_back_cb):
        (go_forward_cb):
        (create_browser):
        (main):

2007-11-30  Adam Roben  <aroben@apple.com>

        Hopefully the final build fix

        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Link against WTF.lib to
        pull in WTF's assertion/logging functions.

2007-11-30  Adam Roben  <aroben@apple.com>

        Another build fix

        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Use the right suffix for
        WebKit.lib.

2007-11-30  Adam Roben  <aroben@apple.com>

        Debug build fix

        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Added a Debug_Internal
        configuration.
        * Drosera/win/Drosera.vcproj/debug.vsprops: Updated to match other
        projects.
        * Drosera/win/Drosera.vcproj/release.vsprops: Ditto.
        * Drosera/win/Drosera.vcproj/debug_internal.vsprops: Copied from
        WebKitTools/DumpRenderTree/win/debug_internal.vsprops.

2007-11-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix drawSelectionRect to actually draw the selection rect.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (drawSelectionRect):

2007-11-30  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: WildFox already did the TextStyle -> FontStyle one.

2007-11-30  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Get ready for some future renaming.

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Removed some unnecessary functions and changed an unused return type.

        * Drosera/win/DebuggerClient.cpp:
        (registerConsoleClass):
        * Drosera/win/DebuggerClient.h:
        * Drosera/win/Drosera.cpp:
        (registerDroseraClass):

2007-11-28  Alp Toker  <alp@atoker.com>

        Reviewed by Timothy Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=16174
        [GTK] Use "URI" not "URL" in public API

        Replace use of the term "URL" with "URI" in public headers,
        documentation and some internal code to match GLib/GTK+ convention.

        This is now mentioned in the API guidelines:
          http://trac.webkit.org/projects/webkit/wiki/HackingGtk

        * GtkLauncher/main.c:
        (activate_uri_entry_cb):
        (title_change_cb):
        (create_toolbar):
        (main):

2007-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        <rdar://problem/5230478>
        FrameLoadDelegate callbacks are not dumped in DRT.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldLogFrameLoadDelegates):
        (runTest):
        (main):
        * DumpRenderTree/win/FrameLoaderDelegate.cpp:
        (BSTRtoString):
        (descriptionSuitableForTestResult):
        (FrameLoadDelegate::QueryInterface):
        (FrameLoadDelegate::didStartProvisionalLoadForFrame):
        (FrameLoadDelegate::didFailProvisionalLoadWithError):
        (FrameLoadDelegate::didCommitLoadForFrame):
        (FrameLoadDelegate::didFinishLoadForFrame):
        (FrameLoadDelegate::willCloseFrame):
        (FrameLoadDelegate::didClearWindowObject):
        (FrameLoadDelegate::didFinishDocumentLoadForFrame):
        (FrameLoadDelegate::didHandleOnloadEventsForFrame):
        * DumpRenderTree/win/FrameLoaderDelegate.h:
        (FrameLoadDelegate::windowScriptObjectAvailable):
        (FrameLoadDelegate::didFirstLayoutInFrame):

2007-11-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Add database quota UIDelegates methods to DRT UIDelegate.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:quotaForSecurityOrigin:toCreateDatabase:withEstimatedSize:]):
        (-[UIDelegate webView:quotaForSecurityOrigin:fromProposedQuota:database:]):

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - <rdar://5618976> Drosera: should listen for the WebScriptDebugServer
        dying and vice versa.
        - This fix will allow Drosera and Safari to reconnect if either of them
        closes correctly, but does not fix the case where one of them dies
        silently.

        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::attemptToCreateServerConnection): Added a safety
        check, because it's possilbe to try to connect to a server that's dying.
        (ServerConnection::serverDidDie): Implemented. This resets Drosera when
        the server has died.
        * Drosera/win/ServerConnection.h: Added the new function and removed
        an unnecessary member.

2007-11-29  Anders Carlsson  <andersca@apple.com>

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        Add shlwapi.lib to all configurations.

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        - Build fix.  Added additional includes for VS Express to the Release
        project.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5132005>
        setUserStyleSheetEnabled is not fully implemented in Windows DRT.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        Add shlwapi.lib

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setUserStyleSheetEnabled):
        Implement this.

        (appendComponentToPath):
        New method which wraps the Win32 API PathAppend.

        (followShortcuts):
        New method which checks if a file points to a shortcut and
        follows the shortcut.

        (resolveCygwinPath):
        New method that takes a cygwin unix-style path and returns the Win32 path.

        (cfStringRefToWString):

        (LayoutTestController::setUserStyleSheetLocation):
        Implement this.

2007-11-29  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://5133828> fast/frames/iframe-window-focus.html output is lowercase

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        uppercase letters were being sent as lowercase letters without the shift key down.

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        - Windows build fix. VS express needs some love.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-11-28  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        Send capital letters through as lowercase letters with the shift key down
        rather than sending them as if they were highly unusual "capital letter keys".

        * Scripts/update-javascriptcore-test-results: Add a "--force" option for cases
        where you need to update results and more tests are failing than before.

2007-11-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5132001>
        contextClick is not implemented in DRT on Windows.

        * DumpRenderTree/win/EventSender.cpp:
        (contextClickCallback):
        Add a callback for contextClick, which sends a WM_RBUTTONDOWN message followed
        by a WM_RBUTTONUP message.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::hasCustomMenuImplementation):
        (UIDelegate::trackCustomPopupMenu):
        * DumpRenderTree/win/UIDelegate.h:
        Add a no-op implementation of trackCustomPopupMenu, to prevent the default popup
        menu from being shown (and causing the DRT to hang).

2007-11-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Fix DumpRenderTree ObjC bug comparing strings.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController identityIsEqual::]): Compare strings with string
        equality instead of identiy equality.

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam.

        Reset the authorAndUserStylesEnabled preference
        back to YES for each test. Fixes the broken tests.

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

2007-11-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Drosera now displays the console window, although it cannot currently
        process JavaScript.

        * Drosera/win/DebuggerClient.cpp: Shows the console window.
        (registerConsoleClass): Implemented.
        (consoleWndProc): Implemented.
        (DebuggerClient::onSize): Implemented.
        (DebuggerClient::createWebViewWithRequest): Implemented, now creates a
        new window.
        * Drosera/win/DebuggerClient.h: Added needed method and members for
        creating and maintaining a new window.
        * Drosera/win/Drosera.cpp: Fixed some minor bugs, and moved a couple of
        lines of code to more appropriate places.
        (Drosera::handleCommand):
        (Drosera::initUI):
        (Drosera::onSize):
        (Drosera::attach):

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5569233> Add the ability to disable author and user CSS styles

        Add support for disabling author and user styles for testing.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/LayoutTestController.cpp:
        (setAuthorAndUserStylesEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAuthorAndUserStylesEnabled):

2007-11-26  Dan Bernstein  <mitz@apple.com>

        - Tiger build fix.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2007-11-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - Implemented displaying variables for Drosera on Win.

        * Drosera/win/DebuggerDocumentPlatform.cpp: Changed Drosera functions
        that retrieve variables to not hold onto the return value since it's
        not returned.  Also changed to use the new signatures of the retrieval
        functions.
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        * Drosera/win/Drosera.cpp: Removed a needless TODO.
        (droseraWndProc):

2007-11-26  Sam Weinig  <sam@webkit.org>

        Cleanup names of painting and repainting functions.

        Reviewed by Adam Roben.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (drawSelectionRect): was drawSelectionRectIntoContext.
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (paintWebView): was drawWebViewIntoContext.
        (repaintWebView): was repaintWithVerticalSweep and repaintWithHorizontalSweep.

2007-11-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        - Leopard build fix

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2007-11-26  Sam Weinig  <sam@webkit.org>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16136
        Use shared PixelDumpSupport for Mac DRT

        Reviewed by Adam Roben.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/PixelDumpSupport.h: Copied from DumpRenderTree/win/PixelDumpSupport.h.
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (drawSelectionRectIntoContext):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/mac/ImageDiff.m: Removed.
        * DumpRenderTree/mac/PixelDumpSupport.h: Removed.
        * DumpRenderTree/mac/PixelDumpSupport.mm: Removed.
        * DumpRenderTree/mac/PixelDumpSupportMac.mm: Copied from DumpRenderTree/mac/PixelDumpSupport.mm.
        (setDefaultColorProfileToRGB):
        (getBitmapContextFromWebView):
        (drawWebViewIntoContext):
        (repaintWithVerticalSweep):
        (repaintWithHorizontalSweep):
        (getSelectionRect):
        * DumpRenderTree/win/PixelDumpSupport.h: Removed.

2007-11-25  David D. Kilzer  <ddkilzer@webkit.org>

        Bug 16052: prepare-ChangeLog doesn't report deleted files
        <http://bugs.webkit.org/show_bug.cgi?id=16052>

        Reviewed by Sam.

        * Scripts/prepare-ChangeLog: Fixed logic that checks for removed files.

2007-11-25  David Kilzer  <ddkilzer@webkit.org>

        Bug 15864: Replace merge-changelog with resolve-ChangeLogs
        <http://bugs.webkit.org/show_bug.cgi?id=15864>

        Reviewed by Adam.

        Roll functionality of merge-changelog into resolve-ChangeLogs
        script.  The script now checks for ChangeLog.rej and
        ChangeLog.orig files first.  If it finds them, it uses the
        ChangeLog.rej file as a patch (in old contextual diff format) to
        apply with --fuzz=3.

        * Scripts/merge-changelog: Removed.
        * Scripts/resolve-ChangeLogs: Handle traditional rejected patches.

2007-11-25  Sam Weinig  <sam@webkit.org>

        Add .xcconfig files for the ImageDiff and TestNetscapePlugIn targets of the DumpRenderTree.

        Reviewed by Mark Rowe.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig: Added.

2007-11-25  Sam Weinig  <sam@webkit.org>

        Convert DumpRenderTree to ues .xcconfig files.

        Reviewed by Mark Rowe.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: Added.

2007-11-25  Sam Weinig  <sam@webkit.org>

        Add ForwardingHeaders to wtf for DumpRenderTree.

        Reviewed by Mark Rowe.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ForwardingHeaders: Added.
        * DumpRenderTree/ForwardingHeaders/wtf: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Assertions.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Platform.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/RetainPtr.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/StringExtras.h: Added.
        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/WorkQueue.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/JavaScriptThreading.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/mac/ObjCController.m:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/mac/WorkQueueItemMac.mm:

2007-11-25  Adam Roben  <aroben@apple.com>

        Fix some test failures caused by r28019

        Now that stdout is in binary mode, we need to always use printf
        instead of wprintf. Otherwise we'll end up with UTF-16 characters in
        the output.

        Reviewed by Sam.

        * DumpRenderTree/win/UIDelegate.cpp: Replaced uses of wprintf with
        printf.
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::webViewAddMessageToConsole):

2007-11-25  Adam Roben  <aroben@apple.com>

        Set the font smoothing preference in DRT

        This makes the pixel results on Windows closer to the Mac results.

        Reviewed by Mitz.

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

2007-11-25  Adam Roben  <aroben@apple.com>

        Port ImageDiff to CG and C++

        Final part of http://bugs.webkit.org/show_bug.cgi?id=16133
        <rdar://5071708>

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.sln: Added ImageDiff.vcproj.
        * DumpRenderTree/cg/ImageDiffCG.cpp: Added.
        (main):
        (createImageFromStdin):
        (compareImages):
        (getDifferenceBitmap):
        (computePercentageDifferent):
        * DumpRenderTree/win/ImageDiff.vcproj: Added.

2007-11-25  Adam Roben  <aroben@apple.com>

        Fix image diff link generation on Windows

        Reviewed by Sam.

        * Scripts/run-webkit-tests: Removed unnecessary and incorrect calls
        to toURL.

2007-11-25  Adam Roben  <aroben@apple.com>

        Implement pixel dumping in Windows DRT

        Part of http://bugs.webkit.org/show_bug.cgi?id=16133
        <rdar://5071708>

        Reviewed by Sam.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Added.
        (printPNG): Dumps a CGImageRef as a PNG to stdout, along with a
        Content-Length header.
        (getMD5HashStringForBitmap):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h: Copied from WebKitTools/DumpRenderTree/mac/DumpRenderTreePasteboard.h.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump): Do a pixel dump if requested.
        (main): Parse pixel test options.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Added new files and added
        the cg/ subdirectory to the include path.
        * DumpRenderTree/win/MD5.cpp: Added. Windows MD5 functions aren't
        available in a header or import library, so we have to go through this
        LoadLibrary/GetProcAddress dance to use them.
        (cryptDLL):
        (init):
        (update):
        (final):
        (MD5_Init):
        (MD5_Update):
        (MD5_Final):
        * DumpRenderTree/win/MD5.h: Added.
        * DumpRenderTree/win/PixelDumpSupport.h: Added. This file should be
        moved up to the top level to share it with Mac eventually.
        * DumpRenderTree/win/PixelDumpSupportWin.cpp: Added.
        (getBitmapContextFromWebView): Forces the WebView to paint using a
        WM_PRINTCLIENT message, and puts the result in a CGBitmapContext.

2007-11-25  Adam Roben  <aroben@apple.com>

        Clean up Windows DRT's option parsing a little bit

        Reviewed by Sam.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): Put non-option arguments into a Vector.

2007-11-25  Adam Roben  <aroben@apple.com>

        Make Windows DRT stop changing LF into CRLF

        Reviewed by Sam.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): Put stdout in binary mode.
        * Scripts/run-webkit-tests: Remove the CRLF hack.

2007-11-24  David Kilzer  <ddkilzer@webkit.org>

        Removed empty directory.

        * Scripts/resources: Removed.

2007-11-23  David D. Kilzer  <ddkilzer@webkit.org>

        Fix bisect-builds to work with recent WebKit nightly builds.

        Reviewed by Dan.

        * Scripts/bisect-builds: Check for the
        WebKit.app/Contents/Frameworks/10.[45] directory. If it exists, use
        it for the DYLD_FRAMEWORK_PATH environment variable, else fallback
        to WebKit.app/Contents/Resources.

2007-11-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        <rdar://problem/5539306> REGRESSION: redirect fails when subframe's document is opened but
        not closed (affects digg.com)

        * DumpRenderTree/mac/DumpRenderTree.mm: (runTest): Replace the current document with a blank
        one after finishing with a test to avoid having its delayed onload handler firing when
        replaced with the next one. This is ugly and still unreliable (see LayoutTests ChangeLog),
        but it helps somewhat.

2007-11-22  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Fix build-webkit to propagate make's exit status if it fails.

        * Scripts/webkitdirs.pm:

2007-11-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix crash when running pixel tests

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Parse the command line options before setting up the
        environment so that we know if we need to set up the pixel dump
        machinery.

2007-11-21  Eric Seidel  <eric@webkit.org>

        Speculative build fix for Tiger.

        * DumpRenderTree/mac/PixelDumpSupport.mm: include unistd.h

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Break out more of DumpRenderTree.mm into individual files

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/CheckedMalloc.cpp: Added.
        (checkedMalloc):
        (checkedRealloc):
        (makeLargeMallocFailSilently):
        * DumpRenderTree/mac/CheckedMalloc.h: Added.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (crashHandler):
        (dump):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/JavaScriptThreading.cpp: Added.
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * DumpRenderTree/mac/JavaScriptThreading.h: Added.
        * DumpRenderTree/mac/PixelDumpSupport.h: Added.
        * DumpRenderTree/mac/PixelDumpSupport.mm: Added.
        (restoreColorSpace):
        (setDefaultColorProfileToRGB):
        (initializeColorSpaceAndScreeBufferForPixelTests):
        (md5HashStringForBitmap):
        (dumpWebViewAsPixelsAndCompareWithExpected):

2007-11-21  Kevin Ollivier  <kevino@theolliviers.com>

        Move install-unix-extras to wx directory as it seems only to be used by that
        port now. It now supports universal binaries on Mac and adds libpng and libjpeg.
        Also, have build-wxwebkit run it in order to fix the Mac buildbot, and
        have install-unix-extras install into WebKitLibraries as per
        convention.

        Reviewed by Mark Rowe.

        * Scripts/install-unix-extras: Removed.
        * wx/build-wxwebkit:
        * wx/install-unix-extras: Copied from WebKitTools/Scripts/install-unix-extras.

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam.

        More refactoring for greater code readability

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (initializeColorSpaceAndScreeBufferForPixelTests):
        (addTestPluginsToPluginSearchPath):
        (useLongRunningServerMode):
        (runTestingServerLoop):
        (prepareConsistentTestingEnvironment):
        (dumpRenderTree):
        (main):
        (dumpFramesAsText):
        (dumpBackForwardListForWebView):
        (sizeWebViewForCurrentTest):
        (methodNameStringForFailedTest):
        (dumpBackForwardListForAllWindows):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (dump):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:createWebViewWithRequest:]):

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Abstract more of DRT into static methods

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (setupSignalHandlers):
        (allocateGlobalControllers):
        (releaseAndZero):
        (releaseGlobalControllers):
        (dumpRenderTree):
        (shouldLogFrameLoadDelegates):
        (createCFURLFromPathOrURL):
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Pull DumpRenderTreeWindow and DumpRenderTreePasteboard out into their own files

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        (dump):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h: Added.
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m: Added.
        (+[DumpRenderTreePasteboard _pasteboardWithName:]):
        (+[DumpRenderTreePasteboard releaseLocalPasteboards]):
        (-[DumpRenderTreePasteboard declareType:owner:]):
        (+[LocalPasteboard alloc]):
        (-[LocalPasteboard init]):
        (-[LocalPasteboard dealloc]):
        (-[LocalPasteboard name]):
        (-[LocalPasteboard releaseGlobally]):
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard changeCount]):
        (-[LocalPasteboard types]):
        (-[LocalPasteboard availableTypeFromArray:]):
        (-[LocalPasteboard setData:forType:]):
        (-[LocalPasteboard dataForType:]):
        (-[LocalPasteboard setPropertyList:forType:]):
        (-[LocalPasteboard setString:forType:]):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h: Added.
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm: Added.
        (+[DumpRenderTreeWindow allWindows]):
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow dealloc]):
        (-[DumpRenderTreeWindow isKeyWindow]):
        (-[DumpRenderTreeWindow keyDown:]):

2007-11-20  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for Windows. Don't use WebCore/move-js-headers.sh as
        it indiscriminately copies any headers inside JavaScriptCore,
        which includes Tiger ICU headers.

        * wx/build-wxwebkit:
        Don't run WebCore/move-js-headers.sh any longer.

2007-11-20  Adam Treat  <treat@kde.org>

        Reviewed by David Kilzer.

        * Prepend git branch name to $baseProductDir

        * Scripts/VCSUtils.pm:
        * Scripts/webkitdirs.pm:

2007-11-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:  Pass "clean" flag down into buildQMakeProject.
        * Scripts/webkitdirs.pm: Respect the "clean" flag passed down from build-webkit.
        Have it trigger a "make distclean" rather than "make clean" to ensure that the
        built product and generated Makefile's are removed.

2007-11-19  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16040
        [GTK] GtkLauncher should be written in C

        Port GtkLauncher to plain C.

        Use a more conventional GTK+ coding style.

        Use a toolbar instead of menus.

        Various signature fixes and cleanups.

        Add a license header. Assume all previous modifications were copyright
        assigned to Apple Inc. by default.

        * GtkLauncher/GtkLauncher.pro:
        * GtkLauncher/main.c: Added.
        (activate_url_entry_cb):
        (update_title):
        (link_hover_cb):
        (title_change_cb):
        (progress_change_cb):
        (destroy_cb):
        (go_back_cb):
        (go_forward_cb):
        (create_browser):
        (create_statusbar):
        (create_toolbar):
        (create_window):
        (main):
        * GtkLauncher/main.cpp: Removed.

2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>

        Build script fixes to ensure they do the right thing for the
        wx port, and update build-wxwebkit to reflect the way the
        build scripts now work.

        Reviewed by Adam.

        * Scripts/build-testkjs:
        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitdirs.pm:
        * wx/build-wxwebkit:

2007-11-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Anders.

        Make run-javascriptcore-tests report failures on exit (to support git bisect)

        * Scripts/run-javascriptcore-tests:

2007-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Make run-webkit-tests work with Windows debug build.

        * DumpRenderTree/win/DumpRenderTree.cpp: (main): Only use memory checks with debug CRT.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Switched Debug configuration to release CRT,
        as it is supposed to run with release Apple libraries. Removed _DEBUG preprocessor
        symbol, as it goes with debug CRT (AFAIK, it is supposed to be added automatically,
        and shouldn't be needed in Debug_internal configuration, but I didn't dare to change that).

2007-11-18  Kevin Ollivier  <kevino@theolliviers.com>

        Add wxWebKit sample and build script, and integrate it with
        build-webkit. Also make build-webkit --clean work for all
        ports.

        Reviewed by Darin Adler.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        * wx: Added.
        * wx/browser: Added.
        * wx/browser/browser.bkl: Added.
        * wx/browser/browser.cpp: Added.
        * wx/build-wxwebkit: Added.

2007-11-17  Adam Roben  <aroben@apple.com>

        Make it easy to run Safari in the debugger on Windows

        I've added a new script, debug-safari, which launches Safari in the
        debugger. On OS X it just calls gdb-safari.

        Reviewed by Mark Rowe.

        * FindSafari/FindSafari.cpp:
        (_tmain): Added a /debugger flag, which in combination with
        /printSafariLauncher will print a script that launches Safari in the
        debugger.
        * Scripts/debug-safari: Added.
        * Scripts/run-safari: Changed to call runSafari().
        * Scripts/run-webkit-nightly.cmd: Prepends the launcher script with
        vsvars32.bat, which will let us find VS/VC++ Express, and passes the
        first argument along to FindSafari.
        * Scripts/webkitdirs.pm:
        (sub runSafari): Added.

2007-11-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        * Scripts/run-webkit-tests: Avoid an uninitialized warning if WEBKIT_TESTFONTS is not defined.

2007-11-16  Ryan Leavengood  <leavengood@gmail.com>

        Reviewed by David Kilzer.

        The git config command was renamed to repo-config at some point. This
        change tries git config and then git repo-config if the first fails.

        * Scripts/prepare-ChangeLog:
        (gitConfig):

2007-11-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        - fix <rdar://problem/5134075> fast/forms/select-type-ahead-non-latin.html fails on Windows

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): For characters that cannot be entered on the active
        keyboard layout, send a WM_CHAR message with the character along with
        a WM_KEYDOWN message with a virtual key code of 255.

2007-11-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Don't weak link against WebCore now that it is a sub-framework of WebKit in all configurations.

        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-11-15  Adam Roben  <aroben@apple.com>

        Make run-safari actually work on Windows

        * Scripts/run-safari: Fixed the order of arguments to cp, and added a
        chdir call.

2007-11-14  Adam Roben  <aroben@apple.com>

        Updates to Safari launching now that 3.0.4 is released

        Reviewed by Sam.

        * FindSafari/FindSafari.cpp:
        (getWebViewCLSID): Use version-independent ProgID.
        * Scripts/run-safari: Use run-webkit-nightly.cmd.

2007-11-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5309081>
        In DRT, "plugin.logDestroy = true" not working on Windows.

        * DumpRenderTree/win/TestNetscapePlugin/main.c:
        (NPP_Destroy):

2007-11-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * Scripts/run-sunspider: add --shark-cache for L2 Cache Miss profiling

2007-11-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5141186>
        window.layoutTestController.setWindowIsKey is not implemented in DRT.

        Implement setWindowIsKey.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWindowIsKey):

2007-11-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix for <rdar://problem/5382579>
        http/tests/security/cross-frame-access-put.html reports large
        negative numbers for screenLeft and screenTop (Mac reports "0")

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::UIDelegate): Initialize the RECT.
        (UIDelegate::setFrame): copy the contents of the rect, not the pointer.
        (UIDelegate::webViewFrame): ditto.
        * DumpRenderTree/win/UIDelegate.h: Use a RECT not a RECT*

2007-11-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Make Drosera show source, source URLs, and function stack on Windows,
        and some minor fixes.

        * Drosera/DebuggerDocument.cpp: Force source to always update display.
        (DebuggerDocument::updateFileSource):
        * Drosera/debugger.js: Force source to always update display.
        * Drosera/win/DebuggerClient.cpp: Create the needed functions for the
        menu controls.
        (DebuggerClient::resume):
        (DebuggerClient::pause):
        (DebuggerClient::stepInto):
        (DebuggerClient::stepOver):
        (DebuggerClient::stepOut):
        (DebuggerClient::showConsole):
        (DebuggerClient::closeCurrentFile):
        * Drosera/win/DebuggerClient.h: Ditto.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Changed
        getPlatformCurrentFunctionStack to not use an unecessary HRESULT and
        removed two bugs.  1) caller could be in a bad state when asked to
        assign into it. 2) BSTRs were not created correctly.
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        * Drosera/win/Drosera.cpp: Hook up the menu controls.
        (droseraWndProc):
        (handleCommand):
        (Drosera::resume):
        (Drosera::pause):
        (Drosera::stepInto):
        (Drosera::stepOver):
        (Drosera::stepOut):
        (Drosera::showConsole):
        (Drosera::closeCurrentFile):
        * Drosera/win/Drosera.h: Hook up the menu controls.
        * Drosera/win/ServerConnection.cpp: Removed unncessary server connection
        functions, added a null check, and fixed another bug where caller could
        be in a bad state when asked to assign into it.
        (ServerConnection::didLoadMainResourceForDataSource):
        (ServerConnection::getCallerFrame):
        * Drosera/win/ServerConnection.h: Safety first.

2007-11-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <http://bugs.webkit.org/show_bug.cgi?id=13371>
          DumpRenderTree --pixel-tests renders each test twice

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Removed the --paint option because the painting code
        is always exercised as a result of
        -[FrameLoadDelegate webView:didFinishLoadFromFrame:]
        calling -displayIfNeeded.
        (dump): Changed to always grab the image from the window since the view
        is always displayed.
        (runTest):
        (displayWebView):
        * Scripts/run-webkit-tests: No need to pass --paint to DumpRenderTree
        because it always paints.

2007-11-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Add support for http media tests

        * Scripts/run-webkit-tests:

2007-11-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Implement LayoutTestController.setPrivateBrowsingEnabled(bool) for windows.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPrivateBrowsingEnabled):

2007-11-12  Adam Roben  <aroben@apple.com>

        * Scripts/update-webkit-localizable-strings: Changed to only scan the
        mac and win subdirectories.

2007-11-11  Adam Roben  <aroben@apple.com>

        Fix <rdar://5133816> keepWebHistory is not implemented

        Fixes fast/history/clicked-link-is-visited.html.

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Clear the optionalSharedHistory.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::keepWebHistory): Set the optionalSharedHistory.

2007-11-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Follow up to <rdar://problem/5394877> Safari should not log unsafe JavaScript
        attempts when in private browsing mode (only an issue if Log JavaScript Exceptions
        is turned on)

        - Add LayoutTestController.setPrivateBrowsingEnabled(bool) (stub out implementation for windows)

        Added test: http/tests/security/cross-frame-access-private-browsing.html

        * DumpRenderTree/LayoutTestController.cpp:
        (setPrivateBrowsingEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest): Default to private browsing disabled.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setPrivateBrowsingEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPrivateBrowsingEnabled):

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Changed the vcproj file to use Drosera's ForwardingHeaders and not
        WebCore's!

        * Drosera/ForwardingHeaders/wtf/Assertions.h: Added.
        * Drosera/ForwardingHeaders/wtf/HashTraits.h: Added.
        * Drosera/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * Drosera/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * Drosera/ForwardingHeaders/wtf/RetainPtr.h: Added.
        * Drosera/win/Drosera.cpp:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Use the new IWebFrame [local] function signature and get the shared
        server correctly.

        * Drosera/win/DebuggerClient.cpp:
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::attemptToCreateServerConnection):

2007-11-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - add an option to run-webkit-tests to ignore pixel test failures where
          all pixels differ by no more than a specified threshold

        * DumpRenderTree/mac/ImageDiff.m:
        (main):
        (compareImages):
        (computePercentageDifferent):
        * Scripts/run-webkit-tests:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make the setting of letting Javascript access the clipboard configurable through QWebSettings, turn it off by default and turn it on in DumpRenderTree.

        * DumpRenderTree/qt/DumpRenderTree.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Reworked the QWebSettings API.
        QWebPage now returns a pointer to its mutable QWebSettings object and the settings of newly created QWebPageObjects are initialized from QWebSettings::defaultSettings().

        * DumpRenderTree/qt/DumpRenderTree.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make QWebHistory an explicitly shared object, returned as a pointer by QWebPage::history().

        * DumpRenderTree/qt/jsobjects.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Add a QWebPage::frameCreated() signal and fix DRT

        The removal of createFrame in QWebPage broke the re-implementation
        in DumpRenderTree. Instead emit a frameCreated() signal and
        connect to it in DumpRenderTree.


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

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Moved all the event handlers from QWebFrame into QWebPage.

        This cleans up the public API and allows us to remove the
        HackWebFrame hack in DumpRenderTree.


        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Mark.

        Implemented the two Javascript prompt callbacks in qt/DumpRenderTree
        to prevent the default implementation from popping up messageboxes.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::javaScriptConfirm):
        (WebCore::WebPage::javaScriptPrompt):

2007-11-06  Eric Seidel  <eric@webkit.org>

        * Scripts/build-testkjs: build fix... too many $$

2007-11-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        * Scripts/build-testkjs: return xcodebuild's exit status, instead of grep's

2007-11-05  Adam Roben  <aroben@apple.com>

        Add support on Windows for WEBKIT_TESTFONTS

        This environment variable lets you specify where the fonts to be used
        by DumpRenderTree reside. The Qt port is already using this, so I'm
        just following their lead.

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (exePath): Refactored code out of initialize().
        (fontsPath): Returns either $WEBKIT_TESTFONTS or
        DumpRenderTree.resources.
        (initialize): Use the new fontsPath function.
        (main): Use the new exePath function.
        * Scripts/run-webkit-tests: Propagate the WEBKIT_TESTFONTS environment
        variable to DRT, like Qt does.

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

        Rubber-stamped by Alp Toker.

        Remove buggy "autocomplete" from GtkLauncher as it causes more problems than it solves.

        * GtkLauncher/main.cpp:
        (goToURLBarText):
        (main):

2007-11-04  David D. Kilzer  <ddkilzer@webkit.org>

        bisect-builds doesn't work with nightly build r19992 or newer on Leopard
        <http://bugs.webkit.org/show_bug.cgi?id=15830>

        Reviewed by Timothy.

        Restrict the range of nightly builds used by the bisect-builds script
        based on the version of Safari and the version of Mac OS X being used.

        Mac OS X 10.4: Safari 2.0: r11976 or newer
        Mac OS X 10.4: Safari 3.0: r19992 or newer

        Mac OS X 10.5: Safari 2.0: r19594 or newer
        Mac OS X 10.5: Safari 3.0: r25124 or newer

        * Scripts/bisect-builds:
        (findMacOSXVersion): Added.
        (makeNightlyList): Added argument to provide version of Mac OS X.
        Restrict range of nightly builds based on Safari and Mac OS X versions.

2007-11-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - This patch involves several changes, all of them were noticed that
        they were needed by the work being done in WebKit to get Drosera and
        WebKit working together on Windows.
        - The changes are:
        1) Added a debugger console for output messages.
        2) Drosera now listens for the WebKit server (before, the server would
        have to be running before Drosera was started.)
        3) Fixed a bug where the WebView started out as 0x0 pixels.
        4) Fixed a bug when there is no scope.
        5) Added the HTML, JS, and CSS to the project file to make them easy to
        find.
        6) Made the ServerConnection functions virtual.

        * Drosera/win/DebuggerClient.cpp: This is part of how Drosera listens
        for the WebKit server.
        (DebuggerClient::DebuggerClient):
        (DebuggerClient::~DebuggerClient):
        (DebuggerClient::didFinishLoadForFrame):
        (DebuggerClient::serverConnected):
        (DebuggerClient::attemptToCreateServerConnection):
        * Drosera/win/DebuggerClient.h: Ditto.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Fixed a bug when there is no
        scope.
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        * Drosera/win/Drosera.cpp:
        (_tWinMain): Added a console in debug for output messages.
        (Drosera::Drosera): Listen for server.
        (Drosera::initUI): The server now Initializes COM.
        (Drosera::serverConnected): Part of the listening for the server.
        (Drosera::attemptToCreateServerConnection): Ditto.
        * Drosera/win/Drosera.h: New interface for listening for the server.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Added HTML, JS, and CSS
        files to the VS project.
        * Drosera/win/ServerConnection.cpp: Part of listening for the server
        connection.
        (ServerConnection::ServerConnection):
        (ServerConnection::attemptToCreateServerConnection):
        * Drosera/win/ServerConnection.h: Ditto and virtualized the Interface
        methods.
        (ServerConnection::serverConnected):

2007-11-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15832
        fast/dom/gc-10.html crashes when run alone

        Check for !done before using objects that can be already deallocated.

        * DumpRenderTree/mac/EditingDelegate.mm:
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        (-[EditingDelegate webViewDidChangeSelection:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didReceiveIcon:forFrame:]):
        (-[FrameLoadDelegate webView:didChangeLocationWithinPageForFrame:]):
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):
        (-[FrameLoadDelegate webView:didCancelClientRedirectForFrame:]):
        (-[FrameLoadDelegate webView:willCloseFrame:]):
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):
        (-[FrameLoadDelegate webView:didHandleOnloadEventsForFrame:]):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willCacheResponse:fromDataSource:]):

2007-11-04  Mark Rowe  <mrowe@apple.com>

        Build fix.  Don't use Carbon.h as the prefix header as it triggers
        warnings that would otherwise be suppressed due to it being a system header.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-11-03  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Adam.

        - Turn off deprecated function warnings for TestNetscapePlugin because Carbon.h triggers them

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        Sort files(...); sections of Xcode project files.

        Rubber-stamped by Darin Adler.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        Script to sort "files(...);" sections in Xcode project.pbxproj files.

        Reviewed by Darin Adler.

        * Scripts/sort-Xcode-project-file: Added.

2007-11-02  Darin Adler  <darin@apple.com>

        * Scripts/run-sunspider: Changed "--base" to "--set-baseline".

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Scripts/run-sunspider: Pass the "--base" option through.

        * Scripts/sunspider-compare-results: Don't check the number of parameters; let
        the real script do that. Default configuration to Release to match run-sunspider
        so we don't end up building Debug just to compare results.

2007-11-01  Adam Roben  <aroben@apple.com>

        Make changes in WebKit/win show up under "WebKit/win:" instead of just "win:"

        Reviewed by Sam.

        * Scripts/commit-log-editor: Show all the directories beneath the
        source root, instead of just the last one.

2007-11-01  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Adam Roben.

        Print out an error message when the Windows build fails
        and provide guidance on how to find out what went wrong.

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

2007-11-01  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Adam Roben.

        Rolled out r27326 - debug CRT seems to cause no problems after all.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2007-10-31  Adam Roben  <aroben@apple.com>

        Switch the Debug configuration to using the non-debug CRT

        This matches WebKit.

        Reviewed by Steve.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2007-10-31  Antti Koivisto  <antti@apple.com>

        Reviewed by bdash.

        Disable media tests when doing leak checking on Tiger.
        They crash in QuickTime (rdar://problem/5537157).

        * Scripts/run-webkit-tests:

2007-10-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        Build media support by default on OSX only.

        * Scripts/build-webkit:

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        - Made Adam the reviewer for a previous checkin. Not sure how it didn't
        get caught by the pre-commit hooks.

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - This is a collection of relatively unrelated changes and cleanups
        to Drosera to prepare it for interacting with WebKit.  A lot of these
        changes are just correcting mistakes, for example removing included
        headers that are no longer needed.

        * Drosera/DebuggerDocument.h: Added accessor for the ServerConnection
        this will be needed by the DebuggerClient.
        (DebuggerDocument::server):
        * Drosera/win/BaseDelegate.h: Removed unnecessary include.
        * Drosera/win/DebuggerClient.cpp:
        (DebuggerClient::didFinishLoadForFrame): Finished implementing.
        (DebuggerClient::didReceiveTitle): Added comment about its purpose.
        (DebuggerClient::createWebViewWithRequest): Added comment about its
        purpose.
        * Drosera/win/DebuggerClient.h: Removed unnecessary include, and forward
        declarations.
        (DebuggerClient::webViewLoaded): Moved.
        * Drosera/win/Drosera.cpp: Moved a function from the HelperFunctions
        file, since this was the only place it was used.
        (cfStringToBSTR):
        * Drosera/win/Drosera.h: Cleaned up the includes.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Removed HelperFunctions.h
        * Drosera/win/HelperFunctions.h: Removed.

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Small cleanup in the ServerConnection class.

        * Drosera/win/ServerConnection.cpp: Added comments, moved some functions
        and added an include.
        (ServerConnection::currentFrame):
        (ServerConnection::getCallerFrame):
        * Drosera/win/ServerConnection.h: Added comments, moved some functions,
        made a pointer into a COMPtr, and cleaned up the includes.

2007-10-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John Sullivan.

        - Place the Localizable.strings file in mac or win directories
          if that location exists.
        - Also look for UI_STRING in .c files.

        * Scripts/extract-localizable-strings:

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Set the eol-style to native and made all the line endings the same
        so that I avoid messy diffs that show eol changes.

        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::didParseSource):
        (ServerConnection::didEnterCallFrame):
        (ServerConnection::willExecuteStatement):
        (ServerConnection::willLeaveCallFrame):
        (ServerConnection::exceptionWasRaised):

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        * Drosera/win/DebuggerDocumentPlatform.cpp:Implemented much of the
        functionality that could not have existed previously without the new
        interfaces.
        (JSValueRefCreateWithBSTR): Added a helper function to easily convert
        from a BSTR to a JSValueRef.
        (DebuggerDocument::platformEvaluateScript): Implemented.
        (DebuggerDocument::getPlatformCurrentFunctionStack): Implemented.
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        Implemented.
        (DebuggerDocument::platformValueForScopeVariableNamed): Implemented.
        * Drosera/win/HelperFunctions.h: Cleaned up some comments.
        * Drosera/win/ServerConnection.cpp: Added a helper function.
        (ServerConnection::getCallerFrame):
        * Drosera/win/ServerConnection.h: Added a helper function.

2007-10-29  Kevin McCullough  <kmccullough@apple.com>

        updated reviewers for my previous changelog.

2007-10-29  Kevin McCullough  <kmccullough@apple.com>
        Reviewed by Maciej and Adam and Geoff.

        - Minor mac-side improvements including moving a function to a more
        appropriate location, fixing a warning, and correctly checking
        exceptions.

        * Drosera/DebuggerDocument.cpp: Corrected the exception checking.
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::callFunctionOnObject):
        * Drosera/mac/DebuggerClient.mm: Fixes a warning.
        * Drosera/mac/DebuggerDocumentPlatform.mm: Moved
        webScriptAttributeKeysForScriptObject to DebuggerDocumentPlatform
        because it doesn't require the ServerConnection at all.
        (NSStringCreateWithJSStringRef): Made an argument const.
        (JSValueRefCreateWithNSString): Made an argument const.
        (+[WebScriptObject webScriptAttributeKeysForScriptObject:]):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        * Drosera/mac/ServerConnection.h: Moved aforementioned function.
        * Drosera/mac/ServerConnection.mm: Ditto.
        (-[ServerConnection webView:didLoadMainResourceForDataSource:]):

2007-10-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add a globalFlag property to the LayoutTestController to allow cross-domain indications.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (getGlobalFlagCallback):
        (setGlobalFlagCallback):
        (LayoutTestController::getJSClass):
        (LayoutTestController::staticValues):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::globalFlag):
        (LayoutTestController::setGlobalFlag):

2007-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Scripts/run-sunspider: Added --shark20 option, to run Shark at its highest sample
        resolution instead of its default.

2007-10-29  David Kilzer  <ddkilzer@webkit.org>

        Fixed showStatus() to print status for successfully resolved conflicts when using git.

        Reviewed by Mark Rowe.

        Previously showStatus() would run "git diff --name-status" after a ChangeLog conflict
        was successfully resolved, but this would not show any status because the change had
        already been cached in the index using "git add".  The solution is to add an optional
        second argument to showStatus() which adds the "--cached" switch to the command.

        * Scripts/resolve-ChangeLogs:
        (showStatus):

2007-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej and Geoff, in unison.

        * Scripts/run-webkit-tests: remove broken --svg option

2007-10-28  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * Scripts/run-sunspider: Default to "Release" configuration rather than
        defaulting to the last configuration used as other scripts do. This can
        still be overriden on the command line with "--debug" if there's some
        reason to do so. Also fix a typo.

        * Scripts/sunspider-compare-results: Fix a typo.

2007-10-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Implemented the WebScriptDebugListener functions now that the
        WebScriptDebugServer exists

        * Drosera/win/ServerConnection.cpp: Implemented WebScriptDebugListener
        functions.
        (ServerConnection::currentFrame):
        (ServerConnection::didLoadMainResourceForDataSource):
        (ServerConnection::didParseSource):
        (ServerConnection::failedToParseSource):
        (ServerConnection::didEnterCallFrame):
        (ServerConnection::willExecuteStatement):
        (ServerConnection::willLeaveCallFrame):
        (ServerConnection::exceptionWasRaised):
        * Drosera/win/ServerConnection.h: Removed unused arguments from the
        members arguments list.

2007-10-26  David Kilzer  <ddkilzer@webkit.org>

        prepare-ChangeLog and update-webkit create needless ChangeLog conflicts
        <http://bugs.webkit.org/show_bug.cgi?id=15600>

        Reviewed by Darin Adler.

        The resolve-ChangeLog script merges conflicted ChangeLogs in svn or git by creating
        a patch of the local changes and applying it with a fuzz level of 3 to the new file.
        If the patch is successful, it runs 'svn resolved' or 'git add' on the new ChangeLog
        file.  Note that it may also be used as a stand-alone script.

        * Scripts/prepare-ChangeLog: Call resolve-ChangeLogs for conflicted ChangeLog files.
        * Scripts/resolve-ChangeLogs: Added.
        * Scripts/update-webkit: Call resolve-ChangeLogs for conflicted ChangeLog files.

2007-10-26  Mark Rowe  <mrowe@apple.com>

        Qt build fix.  r27084 added a destructor implementation for LayoutTestController
        to the Qt port on the assumption that it was an implementation of the cross-platform
        LayoutTestController class.  It is not, so it did not need to be changed.

        * DumpRenderTree/qt/jsobjects.cpp: Remove empty destructor.

2007-10-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Fix builds with code coverage enabled.

        * Scripts/build-webkit: Don't overwrite the existing value of OTHER_LDFLAGS.

2007-10-25  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        * Scripts/make-js-test-wrappers: Don't generate a wrapper for intersectsNode.js.
        * Scripts/prepare-ChangeLog: Add a special case for prefix of empty string.

2007-10-25  Stephanie  <slewis@apple.com>

        build Fix

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-10-25  Stephanie  <slewis@apple.com>

        Reviewed by Mark Rowe, Adam Roben.

        Weak link against WebCore so DumpRenderTree can be bundled with production roots.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-10-25  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://5549689> 2 tests in fast/forms fail when run with other tests on Windows

        Moving destructor into platform-specific files
        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::~LayoutTestController):
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::~LayoutTestController):

        LayoutTestController wasn't being destroyed
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

        Added declspec
        * DumpRenderTree/win/EditingDelegate.h:

        Reset certain values on the webview (or related delegate) that might
        have changed while running a test
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::~LayoutTestController):

2007-10-25  Adam Roben  <aroben@apple.com>

        Make sunspider-compare-results work with relative paths

        Reviewed by Sam.

        * Scripts/sunspider-compare-results: Convert arguments to absolute
        paths before we chdir.

2007-10-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Implemented server calls now the WebScriptDebugServer exists.
        - Also removed no longer needed call to initialize CG.

        * Drosera/win/Drosera.cpp: No longer initializes CG because this happens
        automatically now.
        (_tWinMain):
        * Drosera/win/ServerConnection.cpp: Now uses the COM class.
        (ServerConnection::ServerConnection):
        (ServerConnection::~ServerConnection):
        (ServerConnection::pause):
        (ServerConnection::resume):
        (ServerConnection::stepInto):
        (ServerConnection::applicationTerminating):
        (ServerConnection::serverConnectionDidDie):
        * Drosera/win/ServerConnection.h: Now uses the COM class.

2007-10-24  George Staikos  <staikos@kde.org>

        Unbreak Qt build.

        * Scripts/build-webkit:

2007-10-24  Adam Roben  <aroben@apple.com>

        Remove now-unnecessary call to InitializeCoreGraphics

        WebKit takes care of this now.

        Reviewed by Ada.

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

2007-10-24  Adam Roben  <aroben@apple.com>

        Use WebTextRenderer in DRT

        Reviewed by Ada.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Use WebTextRenderer instead of using AddFontResourceEx.

2007-10-24  Sven Herzberg  <sven@imendio.com>

        Reviewed by Mark Rowe.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=15614
        Bug 15614: [GTK] qmake based backends don't build on OS X

        * Scripts/build-webkit: set QMAKESPEC correctly if building the QT or
        GTK backend on a Mac
        * Scripts/webkitdirs.pm: extracted the darwin-test from isOSX() into
        isDarwin() to make it reusable in other places (like the workaround-
        for-prebuilt-qmake in build-webkit)

2007-10-24  David Kilzer  <ddkilzer@webkit.org>

        Refurbish update-webkit script.

        Reviewed by Adam.

        * Scripts/update-webkit: Add -h|--help switch and usage statement.  Check result of
        GetOptions() call.  Fix -q|--quiet switch to be passed to svn command properly.  Use
        multi-argument version of system() for flexibility and security.  Check for existence
        of Internal directory using -d test instead of -x.

2007-10-24  David Kilzer  <ddkilzer@webkit.org>

        Minor clean-up of prepare-ChangeLog script.

        Reviewed by Adam.

        * Scripts/prepare-ChangeLog: Keep list of updated ChangeLog files in an array instead
        of a string.  Use multi-argument versions of open() and system() for flexibility and
        security.

2007-10-24  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Fix <rdar://5410959>  editing/selection/drag-to-contenteditable-iframe.html fails on Windows

        Move the call to replaySavedEvents from doDragDrop to doMouseMove because we don't want to
        replay the saved events when we're still processing the mousedown that starts the drag
        * DumpRenderTree/win/EventSender.cpp:
        (doMouseMove):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::doDragDrop):

2007-10-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam, Steve and Darin.

        - Stubbed out the WebScriptDebugListener functionality in the Server
        Connection class to prepare it for receiving those callbacks.
        - Also I changed the instantiation of DebuggerClient, DebuggerDocument
        and the ServerConnection to not need to be initialized with a server
        name, since that is not the way we connect to the WebKit server.

        * Drosera/DebuggerDocument.cpp: Fixed a bug where I was always logging
        no exception.  Now it only loggs when there is an exception
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::callFunctionOnObject):
        * Drosera/win/DebuggerClient.cpp: No longer needs the ServerConnection
        to be instantiated with a server's name.
        (DebuggerClient::DebuggerClient):
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/DebuggerClient.h: Removed unsued variable.
        * Drosera/win/Drosera.cpp: Client no longer needs to be initialized with
        a server name.
        (Drosera::init):
        (Drosera::initServer):
        * Drosera/win/Drosera.h: No longer need the ServerConnection to be
        instantiated with a server's name.
        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::ServerConnection): No longer needs a server name
        (ServerConnection::~ServerConnection): Only release the global context
        if there is one.
        (ServerConnection::serverConnectionDidDie): Stub for
        IWebScriptDebugListener
        (ServerConnection::QueryInterface): ditto
        (ServerConnection::AddRef): ditto
        (ServerConnection::Release): ditto
        (ServerConnection::didLoadMainResourceForDataSource): ditto
        (ServerConnection::didParseSource): ditto
        (ServerConnection::failedToParseSource): ditto
        (ServerConnection::didEnterCallFrame): ditto
        (ServerConnection::willExecuteStatement): ditto
        (ServerConnection::willLeaveCallFrame): ditto
        (ServerConnection::exceptionWasRaised): ditto
        * Drosera/win/ServerConnection.h: Stubbed out the
        IWebScriptDebugListener functions, and this class no longer needs to be
        instantiated with a server name.

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add a layoutTestController.dumpSelectionRect() dummy. It only has an effect on mac pixel tests anyway. Makes us pass another 5 test cases.

        * DumpRenderTree/qt/jsobjects.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add another command.

        * DumpRenderTree/qt/jsobjects.cpp:
        (TextInputController::doCommand):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add empty eventSender.clearKillRing(), and map some of the special keys used in eventSender.keyDown() to things that work on Qt/X11.

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement eventSender.keyDown().

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        some smaller fixes to the editing support in DRT. Makes another few tests pass.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/jsobjects.cpp:
        (TextInputController::doCommand):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        first bit of implementation for the textinputcontroller.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (TextInputController::TextInputController):
        (TextInputController::doCommand):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make the man webpage believe it has focus, so the editing tests work correctly.

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

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement layoutTestController.dumpEditingCallbacks() correctly.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpEditingCallbacks):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Implement support for testing editing.

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

2007-10-23  Sam Weinig  <sam@webkit.org>

        Check for null BSTR that can be passed to the UIDelegate methods
        from javascript null and undefined.  Fixes a failing test case on
        Windows (fast/dom/Window/alert-undefined.html)

        Reviewed by Eric Seidel.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::webViewAddMessageToConsole):

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Don't print a massive pile of setenvs from tools that automatically build testkjs.

        * Scripts/build-testkjs:

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - add wrapper that finds the right copy of testkjs

        * Scripts/sunspider-compare-results: Added.

2007-10-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - After talking with Steve I now see that the WebKit server must be
        running for DCOM to create the distributed objects, which makes sense
        and currently WebKit only allows one instance to be running at a time
        which avoids accidentally connecting to the wrong server
        - In light of this I have removed the code for the attach box and
        NotificationServer and known server names, since they are all extranious
        now.

        * Drosera/win/Drosera.cpp: Removed notification classes and known server
        names.
        (_tWinMain): Uses init instead of initUI.
        (droseraWndProc): No longer creats an attach dialog box.
        (Drosera::Drosera): Does the OleInitialize so COM is ready to go and
        it's not manditory to call init before doing COM stuff.
        (Drosera::init): calls initUI and will call attach when the
        functionality exists.
        (Drosera::initUI): Has changed very little.
        (Drosera::attach): Changed the signature to reflect that we no longer
        need the dictionary of known server names.
        * Drosera/win/Drosera.h: Removed notification classes and known server
        names.  Also renamed and moved some functions.
        * Drosera/win/Drosera.vcproj/Drosera.rc: Removed the Attach box.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Moved resource.h from the
        headers to the resources folder.
        * Drosera/win/resource.h: Removed the Attach box.

2007-10-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        * Scripts/build-dumprendertree: Fix path to DumpRenderTree.sln.

2007-10-22  Kevin McCullough  <kmccullough@apple.com>

        - Removed a leak that was fixed.

        * Scripts/run-webkit-tests:

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Changed the Client so that the DebuggerDocument now own the
        ServerConnection.  This simplifies ownership and cleanup.

        * Drosera/win/DebuggerClient.cpp: The DebuggerDocument now owns the
        ServerConnection.
        (DebuggerClient::initWithServerName):
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/DebuggerClient.h: DebuggerDocument now owns the
        ServerConnection.
        * Drosera/win/Drosera.cpp: Moved some WebFrame initialization logic to
        until after we have a server which we are attached to.
        (Drosera::initUI):
        (Drosera::attach):
        * Drosera/win/Drosera.h: Removed two needless pointers I forgot to take
        out previously.

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        When running build-testkjs make sure it's called through the perl interpreter, to fix the build for Qt/Windows.

        * Scripts/run-javascriptcore-tests:

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Wrap WEXITSTATUS with a little exitStatus() helper function that falls back to the use of $returnvalue >> 8 on Windows to determine the exit status on platforms without WEXITSTATUS.

        * Scripts/build-drosera:
        * Scripts/build-dumprendertree:
        * Scripts/build-testkjs:
        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-sunspider:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2007-10-22  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe.

        Fix for local database support after r26879
        Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set

        * Scripts/build-webkit:

2007-10-22  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        - Do not build testkjs as an application bundle. This is
        needed for run-javascriptcore-tests on OSX.
        - Also, based on r26633, allow to test the WebKit/Qt port on OSX.
        - Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set
        as we do not have -rpath on OSX.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * Scripts/run-webkit-tests:

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by aroben.

        Fix support for Signed-off-by detection in prepare-ChangeLog
        --git-commit. The Signed-off-by tag does not appear in the header
        but usually at the end.

        * Scripts/prepare-ChangeLog:

2007-10-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric.

        Fix run-javascriptcore-tests for Gtk.

        * Scripts/build-testkjs: testkjs is built by build-webkit for Gtk.

2007-10-20  Eric Seidel  <eric@webkit.org>

        Reviewed by aroben.

        * Scripts/find-extra-includes: fix path matching regex to not match ".patch"

2007-10-20  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Add improved argument handling to run-sunspider, including
        --runs=<number>, --shell=<path>, --tests=<pattern>, --shark, and --help
        Also re-factor code into subroutines

        * Scripts/build-dumprendertree: removed bogus comments
        * Scripts/build-testkjs: Added.
        * Scripts/run-javascriptcore-tests: use build-testkjs
        * Scripts/run-sunspider: improved argument handling, abstraction
        * Scripts/run-webkit-tests: improved abstraction

2007-10-20  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, Windows build fix.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2007-10-20  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - http://bugs.webkit.org/show_bug.cgi?id=15544
          <rdar://problem/5076426> fast/events/arrow-navigation.html needs to
          not rely on Apple-specific key codes

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        Added named key "rightArrow". Later we could have a whole table of these.
        Also tweaked modifiers code a little.

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Ditto.

2007-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=15566
          possible fix for leak seen in DumpRenderTree

        * DumpRenderTree/WorkQueue.cpp: (WorkQueue::queue):
        Delete the item if it's not put on the queue, since the caller has
        no way of knowing that. Would be better to have the parameter type
        be auto_ptr to express the fact that we take ownership.

        - unrelated change

        * Drosera/mac/main.m: Add missing include.

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - This change should be identical but for some reason was not working
        on my machine.

        * Scripts/prepare-ChangeLog:

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver and Tim.

        - Made use of RetainPtr to avoid retain and release issues and moved the
        log function to DebuggerDocumentPlatform, which seems to be a more
        logical place for it to live.
        - Also moved knownServers from the ServerConnection to
        DebuggerApplication to match the Windows code and because it makes sense
        that a connection knows its own server but not all of them.

        * Drosera/mac/DebuggerClient.h: Moved the log function to
          DebuggerDocumentPlatform.
        * Drosera/mac/DebuggerClient.mm: Ditto. Also do not release the server
          Because it's owned by an own Ptr in DebuggerDocument.  Also moved the
          call for the server name up from the ServerConnection class.
        (-[DebuggerClient dealloc]):
        (-[DebuggerClient webView:didReceiveTitle:forFrame:]): Moved the call
          for the server name up from the ServerConnection.
        * Drosera/mac/DebuggerDocumentPlatform.mm: Made the server an OwnPtr.
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog): Log directly from here. No need to call
          DebuggerClient.
        * Drosera/mac/ServerConnection.h: Removed the knownServers function. The
          way I see it, a ServerConnection should only know about its connection
          and the group of all possible servers should be kept by the
          application.
        * Drosera/mac/ServerConnection.mm: Removed knownServer but added
          currentServerName, it makes sense that the connection should know that
          name.
        (-[ServerConnection currentServerName]):

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Integrated changes from mac drosera.  Recently I've encapsulated
        out the server connection object from the rest of Drosera because
        it is very platform dependent right now and RPC is not implemented on
        windows.  This functionality, of communicating with the WebKit server
        is the next area I will be focusing on in Windows.

        - Other changes and cleanup were made to organize the code and add notes
        on which parts still need work.  Also some mac code is added and
        commented out, to act as pseudocode for the logic of those parts.

        * Drosera/DebuggerDocument.h: Make the ServerConnection live in a smart
          pointer.
        * Drosera/config.h: Added whitespace.
        * Drosera/win/DebuggerApplication.cpp: Removed. The functionality of
          these files got moved into Drosera.h/cpp
        * Drosera/win/DebuggerApplication.h: Removed.
        * Drosera/win/DebuggerClient.cpp: Lots of cleanup and restructuring
          happened here to better match the logic flow of the same code on the
          mac side and to use the new ServerConnection class.
        (DebuggerClient::DebuggerClient): Constructor that takes a server name.
        (DebuggerClient::initWithServerName): Initializer that will set up the
          class to use a ServerConnection object.  This was necessary so I could
          create a DebuggerClient without having to initilaize it at
          construction.
        (DebuggerClient::QueryInterface): Moved from Drosera.cpp, the Client
          will be the UIDelegate and FrameLoadDelegate.
        (DebuggerClient::AddRef): For IUnknown.
        (DebuggerClient::Release): For IUnknown.
        (DebuggerClient::didFinishLoadForFrame): Part of the FrameLoadDelegate
          this still needs to set the global context of the server, but
          IWebFrame does not have an accessor for the global context yet.
        (DebuggerClient::windowScriptObjectAvailable): Part of FrameLoadDelegate
          this is a pass through for the same function in the document.
        (DebuggerClient::didReceiveTitle): Unimplemented part of
          FrameLoadDelegate this would change the title of the window.
        (DebuggerClient::createWebViewWithRequest): Part of the
          FrameLoadDelegate.  This is about new windows via Window.open() and
          how their delegates are set.
        (DebuggerClient::runJavaScriptAlertPanelWithMessage): Part of the
          UIDelegate.  Just a debug function for printing messages.
        * Drosera/win/DebuggerClient.h: Moved functionality from Drosera.h
          because the Client should be the UIDelegate and FrameLoadDelegate
          to match the delegates on mac.
        (DebuggerClient::webViewLoaded): Added accessor method.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Added. I had apperently
          forgotten to add this file before.  This is where the platform
          dependent versions of the Documents functions live. Most of these are
          unimplemented because some piece of functionality does not exist on
          Windows yet.
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/win/Drosera.cpp: Removed UIDelegate and FrameLoadDelegate
          responsibilities becaue they belong in the Client. Also I laid the
          groundwork for attaching Drosera to a WebKit process
        (attachWndProc): Now if a server is selected the Client becomes it's
          delegate.
        (Drosera::Drosera): Added the construction of the Client and dictionary
          of server names.
        (Drosera::initUI): This is no longer the delegates, the Client is.
        (Drosera::webViewLoaded): Now asks the Client instead of holding local
          state.
        (Drosera::applicationDidFinishLaunching): Placeholder for needed
          notification registration when it's possible to implement.
        (Drosera::serverLoaded): Ditto
        (Drosera::serverUnloaded): Ditto
        (Drosera::attach): Attach Drosera to the WebKit server.
        * Drosera/win/Drosera.h: Ditto for Drosera.cpp comment.
        (Drosera::getInst):
        (Drosera::setInst):
        (Drosera::knownServers):
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Removed DebuggerApplication
          and added the ServerConnection.
        * Drosera/win/DroseraPrefix.h: Added an ifndef check.
        * Drosera/win/ServerConnection.cpp: Added. This is the interesting part
          Most of the functions are completely unimlemented because they cannot
          connect with the WebKit server, because one does not exist on Windows
          yet.
        (ServerConnection::initWithServerName):
        (ServerConnection::~ServerConnection):
        (ServerConnection::setGlobalContext):
        (ServerConnection::pause):
        (ServerConnection::resume):
        (ServerConnection::stepInto):
        (ServerConnection::switchToServerNamed):
        (ServerConnection::applicationTerminating):
        (ServerConnection::serverConnectionDidDie):
        (ServerConnection::currentFrame):
        * Drosera/win/ServerConnection.h: Added. Ditto.
        (ServerConnection::ServerConnection):

2007-10-19  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin Adler.

        Fix for these broken layout tests on Windows:

        fast/forms/focus-selection-input.html
        fast/forms/focus-selection-textarea.html
        fast/forms/select-accesskey.html

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        correct the VK code for alt key.

2007-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Make the GtkLauncher code slightly more readable.

        * GtkLauncher/main.cpp:
        (setupMainMenu): Added.
        (setupMainWindowUI): Added.
        (main):

2007-10-19  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Adam.

        - don't delay-load WebKit in DumpRenderTree.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2007-10-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix <rdar://problem/5313523>
        REGRESSION(Leopard): http/tests/incremental/slow-utf8-text.pl fails on Leopard

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Changed to use _responseMIMEType.

2007-10-17  Adam Roben  <aroben@apple.com>

        Make it possible to have Windows-specific tests and results

        When searching for tests to run and the Skipped file, we will only
        look in platform/win and the cross-platform directory. When looking
        for expected results, we will look in platform/win, then
        platform/mac-leopard, then platform/mac, then finally the
        cross-platform directory.

        Reviewed by Sam.

        * Scripts/run-webkit-tests:
        (sub expectedDirectoryForTest): Search in mac-leopard and mac before
        searching in the cross-platform directory.
        (sub buildPlatformHierarchy): Removed some unneeded calls to
        dirname/basename.

2007-10-17  Adam Roben  <aroben@apple.com>

        Add back the call to register WebKit that we had before WebKitInitializer existed

        This is needed to ensure that the right WebKit is used when
        instantiating COM objects.

        Reviewed by Oliver.

        * DumpRenderTree/win/debug_internal.vsprops: Define
        DEBUG_WEBKIT_HAS_SUFFIX.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize):

2007-10-17  Adam Roben  <aroben@apple.com>

        Import File::Basename in webkitdirs since we use it

        * Scripts/webkitdirs.pm:

2007-10-17  Kevin McCullough  <kmccullough@apple.com>

        - Updated the tiger leaks list to make the internal bots green.

        * Scripts/run-webkit-tests:

2007-10-17  Adam Roben  <aroben@apple.com>

        Build fix for VC++ Express

        * FindSafari/FindSafari.vcproj: Explicitly link against advapi32.lib
        and ole32.lib.

2007-10-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Minor mac improvements based on observations I made while implementing the
        Windows code.

        * Drosera/mac/DebuggerApplication.mm: Attach does not need to create the server
        then hand it to the Client who will retain it, it should just be the client who
        creates and owns the server.
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerClient.h: Can now be created with just a server name.
        * Drosera/mac/DebuggerClient.mm: Creates the server.
        (-[DebuggerClient initWithServerName:]):
        * Drosera/mac/ServerConnection.mm: Does not need to include 2 header files, but
        can instead forward declare what it needs.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        * Scripts/run-webkit-tests: Added --add-platform-exceptions; useful when you
        want to turn failing tests into platform-specific test results. Also did a
        number of tweaks, including fixing a potential bug where expectedDirectoryForTest
        would take the type of results into account only some of the time.

2007-10-16  Adam Roben  <aroben@apple.com>

        Add a new nightly launcher script for Windows

        This new script is for versions of Safari that don't delay-load
        WebKit. I had to make FindSafari be able to print out the nightly
        launcher script on stdout because Windows shell scripts can't capture
        the output from a command into an environment variable.

        Reviewed by Steve.

        * FindSafari/FindSafari.cpp:
        (_tmain): Added /printSafariLauncher option.
        * Scripts/run-webkit-nightly.cmd: Added.

2007-10-16  Adam Roben  <aroben@apple.com>

        Replace WebKitInitializer with FindSafari

        We now rely on setting the PATH environment variable to tell Windows
        where to find WebKit and its dependencies (similar to
        DYLD_FRAMEWORK_PATH on Mac).

        This change also make DumpRenderTree no longer delay-load WebKit.

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.sln: Removed WebKitInitializer, added
        FindSafari.
        * DumpRenderTree/win/DumpRenderTree.cpp: Don't use WebKitInitializer.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Don't link against
        WebKitInitializer, don't delay-load WebKit.
        * Scripts/run-javascriptcore-tests: Call setPathForRunningWebKitApp.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/webkitdirs.pm:
        (sub setPathForRunningWebKitApp): Added.
        * WebKitInitializer/WebKitInitializer.cpp: Removed.
        * WebKitInitializer/WebKitInitializer.h: Removed.
        * WebKitInitializer/WebKitInitializer.vcproj: Removed.
        * WebKitInitializer/debug.vsprops: Removed.
        * WebKitInitializer/debug_internal.vsprops: Removed.
        * WebKitInitializer/release.vsprops: Removed.

2007-10-16  Adam Roben  <aroben@apple.com>

        Fix Bug 15532: run-safari fails if Safari is installed in a non-default location

        http://bugs.webkit.org/show_bug.cgi?id=15532

        FindSafari simply prints the location of an installed Safari.exe on
        stdout.

        Reviewed by Darin Adler.

        * FindSafari/FindSafari.cpp: Copied from WebKitTools/WebKitInitializer/WebKitInitializer.cpp.
        (getStringValue):
        (getWebViewCLSID):
        (getInstalledWebKitDirectory):
        (_tmain):
        * FindSafari/FindSafari.vcproj: Added.
        * Scripts/webkitdirs.pm:
        (sub installedSafariPath): Added. Calls FindSafari on Windows.

2007-10-16  Adam Roben  <aroben@apple.com>

        Updated for rename of WebKit_debug.dll to WebKit.dll for the Debug configuration

        Reviewed by Kevin McCullough.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Use WebKitDLLConfigSuffix
        when referring to WebKit.dll.
        * DumpRenderTree/win/debug.vsprops: Added WebKitDLLConfigSuffix.
        * DumpRenderTree/win/debug_internal.vsprops: Ditto.
        * DumpRenderTree/win/release.vsprops: Ditto.
        * Scripts/run-safari: Don't pass /debug to Safari anymore because we
        never have a _debug suffix on WebKit.dll.
        * WebKitInitializer/WebKitInitializer.cpp:
        (initializeWebKit): Only use the _debug suffix for WebKit.dll when
        specified.
        * WebKitInitializer/debug_internal.vsprops: Added
        DEBUG_WEBKIT_HAS_SUFFIX preprocessor definition.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback):
        Remove now-unneeded control/alt key hack; the tests have been updated.

2007-10-16  Kevin McCullough  <kmccullough@apple.com>

        - Updated leaks list because our internal bot upgraded it's version of leopard and
        one of the leaks was fixed between that revision and the bot's previous version of
        leopard.

        * Scripts/run-webkit-tests:

2007-10-15  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - I encapsulated out the server connecton functionality because it is a specific part
        of Drosera that will be platform dependant until the WebScriptDebugServer can be moved
        into WebCore and C++.  But if it is encapsulated out it can be easily replaced on
        Windows.  So the majority of this patch is moving preexisting functionality.

        - Also I removed the prefix header and changed to use config.h because it is more
        standard on how we use config.h in windows and it didn't make much sense to keep
        the prefix header and the config.h

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::DebuggerDocument):
        * Drosera/DebuggerDocument.h:
        * Drosera/config.h:
        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerClient.h:
        * Drosera/mac/DebuggerClient.mm:
        (-[DebuggerClient initWithServerConnection:]):
        (-[DebuggerClient dealloc]):
        (-[DebuggerClient windowDidLoad]):
        (-[DebuggerClient windowWillClose:]):
        (-[DebuggerClient webView:didFinishLoadForFrame:]):
        (-[DebuggerClient webView:didReceiveTitle:forFrame:]):
        * Drosera/mac/DebuggerDocumentPlatform.mm:
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/mac/Drosera.pch: Removed.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * Drosera/mac/ServerConnection.h: Added.
        * Drosera/mac/ServerConnection.mm: Added.
        (-[ServerConnection initWithServerName:]):
        (-[ServerConnection dealloc]):
        (-[ServerConnection setGlobalContext:]):
        (-[ServerConnection pause]):
        (-[ServerConnection resume]):
        (-[ServerConnection stepInto]):
        (-[ServerConnection switchToServerNamed:]):
        (-[ServerConnection applicationTerminating:]):
        (-[ServerConnection serverConnectionDidDie:]):
        (-[ServerConnection webView:didLoadMainResourceForDataSource:]):
        (-[ServerConnection webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[ServerConnection webView:failedToParseSource:baseLineNumber:fromURL:withError:forWebFrame:]):
        (-[ServerConnection webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[ServerConnection webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[ServerConnection webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        (-[ServerConnection webView:exceptionWasRaised:sourceId:line:forWebFrame:]):
        (-[ServerConnection currentFrame]):
        (-[ServerConnection webScriptAttributeKeysForScriptObject:]):
        (-[ServerConnection knownServers]):

2007-10-15  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15002
          Script to automatically search nightly builds for regressions (bisect-builds)

        * Scripts/bisect-builds: Added.

2007-10-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - New JavaScript benchmark
        http://bugs.webkit.org/show_bug.cgi?id=15515

        * Scripts/run-sunspider: Added. Wrapper to run sunspider on the
        current development or release build of JavaScriptCore.

2007-10-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam.

        Fix 'run-webkit-tests --qt' complaining about the --qt argument.

        * Scripts/webkitdirs.pm:
        - Change checkArgv to remove the options from @ARGV to prevent
        them from interfering with further option processing.
        - Fix logic error in determineIsQt that would prevent it from bailing out early.
        - Change isOSX to mean OS X and not Qt or Gtk.  Most of our uses of isOSX assume that this is the meaning
        already, so this change fixes several broken areas of the scripts including 'run-webkit-tests --qt' on a Mac
        incorrectly using the Mac results, and 'run-webkit-tests --gtk' attempting to build the Mac DumpRenderTree.

2007-10-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - added logging of window.prompt and window.confirm

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        Implement the recommended delegate rather than the deprecated one.
        (-[UIDelegate webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:]):
        Added.
        (-[UIDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:]):
        Added.

        * DumpRenderTree/win/UIDelegate.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runJavaScriptAlertPanelWithMessage): Got rid of unnecessary check for null string.
        (UIDelegate::runJavaScriptConfirmPanelWithMessage): Added.
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt): Added.
        (UIDelegate::webViewAddMessageToConsole): Got rid of unnecessary check for null string.

2007-10-15  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Fixed <rdar://5382546> layoutTestController.setCustomPolicyDelegate is unimplemented causing tests to fail

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Like on mac, before running each test, set the webview's policy delegate to null
        (main): allocate the global policy delegate for DRT's custom use
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        Adding files to project
        * DumpRenderTree/win/DumpRenderTreeWin.h: declaring global DRT policy delegate
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        set the webview's policy delegate to DRT's custom one if the test requests it.
        * DumpRenderTree/win/PolicyDelegate.cpp: Added.
        Implementation is a direct port of DumpRenderTree/mac/PolicyDelegate.mm
        (PolicyDelegate::PolicyDelegate):
        (PolicyDelegate::QueryInterface):
        (PolicyDelegate::AddRef):
        (PolicyDelegate::Release):
        (PolicyDelegate::decidePolicyForNavigationAction):
        * DumpRenderTree/win/PolicyDelegate.h: Added.
        (PolicyDelegate::decidePolicyForNewWindowAction):
        (PolicyDelegate::decidePolicyForMIMEType):
        (PolicyDelegate::unableToImplementPolicyWithError):

2007-10-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        * Scripts/webkitdirs.pm: Use qmake binary specified via --qmake on command-line
        when querying for QMAKE_MKSPECS.

2007-10-14  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Adam Roben.

        Fix run-webkit-tests is too greedy calculating platform hierarchy
        http://bugs.webkit.org/show_bug.cgi?id=15465

        Fix run-webkit-tests being too greedy in trying to split the platform name up
        causing it to try and find tests in every directory above the first "-" in the
        path to the LayoutTests

        * Scripts/run-webkit-tests:

2007-10-14  Oleg Sukhodolsky <son.two@gmail.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=15006
        Refactoring of buildQMakeGdkProject()/buildQMakeQtProject() and isGdk()/isQt()
        to reduce code duplication.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        buildQMakeProject() renamed to buildQMakeQtProject().
        buildQMakeGdkProject()/buildQMakeQtProject() now take just one parameter (directory),
        unused $colorize has been removed.

=== Start merge of feature-branch 2007-10-12 ===

2007-10-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        * Scripts/build-webkit: add --help, remove unused --color

2007-10-07  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        * Drosera/mac/DebuggerDocumentPlatform.mm:
        (DebuggerDocument::platformEvaluateScript): null check before trying to make a JSString

2007-10-03  Rob Buis  <buis@kde.org>

        Reviewed by Olliej.

        Adapt to changed location of Ahem font.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

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

        Reviewed by Adam Roben.

        Make pixel tests more useful!
        Finally fix the image diff 0.00% mystery problem
        Highlight any image differences in the image diff.
        Add a link from image diffs back to original test file.

        * DumpRenderTree/mac/ImageDiff.m:
        (compareImages): highlight any differences
        (computePercentageDifferent): round to two decimal places
        * Scripts/run-webkit-tests: add a few more toURL calls for the windows folks

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

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-webkit-tests: print the % image difference on main results page

2007-10-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Update WebKitLauncher to notify you of new builds from the correct branch, rather than always checking trunk.

        * BuildSlaveSupport/build-launcher-app: Generate a file named BRANCH into WebKit.app so that it knows which branch it was built from.
        * WebKitLauncher/start.html: Use the new URL format that includes the branch we were built from.

2007-10-01  Mark Rowe  <mrowe@apple.com>

        * BuildSlaveSupport/build-launcher-dmg: Tweak once more to handle nightly builds for branches.

2007-09-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        DerivedSources.make was finding "ENABLE_SVG" in the string
        "ENABLE_SVG_EXPERIMENTAL_FEATURES" thus --no-svg wasn't functioning
        quite correctly.

        * Scripts/build-webkit: make --no-svg imply --no-svg-experimental

2007-09-25  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Eric.

        * BuildSlaveSupport/build-launcher-dmg: Allow the platform tag to be specified on the command line.
        This makes it possible to automate nightly builds for the feature-branch.

2007-07-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Mark.

        Enable svg experimental features as default here in feature-branch.

        * Scripts/build-webkit:

2007-06-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Weinig.

        Add VIDEO flag for timed media features

        * Scripts/build-webkit

=== End merge of feature-branch 2007-10-12 ===

2007-10-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Updated rational for the leaks list to be more clear.

        * Scripts/run-webkit-tests:

2007-10-11  Kevin McCullough  <kmccullough@apple.com>

        Rubber Stamp by Sam.

        Adding a known Leopard leak that is already fixed but the bot is on an old version of Leopard.
        I believe there was a radar on this leak, it looks familiar to me, but I could not find it.

        * Scripts/run-webkit-tests:

2007-10-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fix compilation using gcc 4.3. Header files have been reorganized and as a result some extra
        includes are needed for INT_MAX, std::auto_ptr and the like.

        * DumpRenderTree/qt/main.cpp:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement layoutTestController.encode/decodeHostName. We still don't pass fast/encoding/idn-security.html, since our QUrl::from/toACE is somewhat stricter than ICU.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::encodeHostName):
        (LayoutTestController::decodeHostName):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Don't set up connections inside QWebPage::createFrame, as users might be reimplementing that method. Make sure we get only one titleChanged() signal per title change, and implement the support for testing this in DRT.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::createFrame):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::titleChanged):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add a dummy implementation for layoutTestController.display() and implement layoutTestController.clearBackForwardList().

        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::clearBackForwardList):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make --git-reviewer work again.

        * Scripts/prepare-ChangeLog:

2007-10-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Eric.

        Connect to the "hovering-over-link" signal emitted by WebKitPage and
        show the current link inside the statusbar.
        This shows how to make use of this signal and allows to easily test
        http://bugs.webkit.org/show_bug.cgi?id=15299.

        * GtkLauncher/main.cpp:
        (hoveringOverLink):
        (main):

2007-10-05  Lars Knoll  <lars@trolltech.com>

        add proper error messages to the FrameLoaderClient.
        Implement ChromeClientQt::closeWindowSoon and
        FrameLoaderClientQt::dispatchCreatePage (which should go away IMO).
        Some fixes in DRT to make it work correctly with multiple windows.

        Reviewed by Maciej.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::createWindow):
        (WebCore::DumpRenderTree::windowCount):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::maybeDump):
        (LayoutTestController::windowCount):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-05  Lars Knoll  <lars@trolltech.com>

        Add a dummy plugin to DRT  to fix fast/dom/Window/Plug-Ins.html.
        Add support for layoutTextController.setCanOpenWindows() to DRT
        fixing another 2 test cases in fast/dom/Window.

        Reviewed by Maciej.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::createWindow):
        (WebCore::DumpRenderTree::resetJSObjects):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/qt/jsobjects.h:
        * DumpRenderTree/qt/main.cpp:
        * DumpRenderTree/qt/testplugin.cpp: Added.
        * DumpRenderTree/qt/testplugin.h: Added.

2007-10-04  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam.

        Remove empty directories.

        * DumpRenderTree/DumpRenderTree.qtproj: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts: Removed.

2007-10-03  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * Scripts/webkitdirs.pm: Automatically use "Debug_Internal" if
        we find the internal libraries in the libraries directory. This
        is helpful for Safari team engineers at Apple.

2007-10-03  Adam Roben  <aroben@apple.com>

        Update the location of AHEM___.TTF after r25968

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-10-03  Alp Toker  <alp@atoker.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=14726
        [gtk] API design. Mapping the WebView delegates to signals.

        Change the API namespace of the Gtk+ port from 'WebKitGtk' to 'WebKit'.

        * GtkLauncher/main.cpp:
        (goToURLBarText):
        (titleChanged):
        (progressChanged):
        (menuMainBackCallback):
        (menuMainForwardCallback):
        (main):

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Reviewed by Rob.

        This fixes --strict mode in run-webkit-tests again after
        the platform dependent test results have been moved.

        * Scripts/run-webkit-tests:

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        remove the hack in run-webkit-tests that forced text only test
        to be taken from the platform independent dir. It was only left
        there from early days.

        Remove platform dependent results for tests that are text only nowadays,
        and add one platform dependent result for a text only test that requires it.

        * Scripts/run-webkit-tests:

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Reviewed by olliej.

        Move the Qt version of DRT into the correct place and put the binary into BUILDDIR/bin.

        * DumpRenderTree/qt/DumpRenderTree.cpp: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp.
        (WebCore::WebFrame::WebFrame):
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::createFrame):
        (WebCore::WebPage::javaScriptAlert):
        (WebCore::WebPage::javaScriptConsoleMessage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::resetJSObjects):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dumpFramesAsText):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTree.h: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h.
        (WebCore::DumpRenderTree::layoutTestController):
        (WebCore::DumpRenderTree::eventSender):
        * DumpRenderTree/qt/DumpRenderTree.pro: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro.
        * DumpRenderTree/qt/fonts.conf: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/fonts.conf.
        * DumpRenderTree/qt/fonts/AHEM____.TTF: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/fonts/AHEM____.TTF.
        * DumpRenderTree/qt/jsobjects.cpp: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp.
        (HackWebFrame::mousePressEvent):
        (HackWebFrame::mouseReleaseEvent):
        (HackWebFrame::mouseMoveEvent):
        (HackWebFrame::HackWebFrame):
        (HackWebFrame::~HackWebFrame):
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::maybeDump):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::queueReload):
        (LayoutTestController::provisionalLoad):
        (LayoutTestController::timerEvent):
        (EventSender::EventSender):
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::leapForward):
        (EventSender::keyDown):
        (EventSender::frameUnderMouse):
        * DumpRenderTree/qt/jsobjects.h: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h.
        (LayoutTestController::isLoading):
        (LayoutTestController::setLoading):
        (LayoutTestController::shouldDumpAsText):
        (LayoutTestController::shouldDumpChildrenAsText):
        (LayoutTestController::shouldWaitUntilDone):
        (LayoutTestController::dumpAsText):
        (LayoutTestController::dumpChildFramesAsText):
        * DumpRenderTree/qt/main.cpp: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/main.cpp.
        (messageHandler):
        (crashHandler):
        (main):
        * Scripts/run-webkit-tests:

2007-10-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Fix build-webkit when both QTDIR and --gtk are set.  The presence of --gtk
        should take precedence over QTDIR when determining which port we are working with.

        * Scripts/webkitdirs.pm:

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

        Add keychain to the list of default packages to install

        Rubberstamped by Sam.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip: Regenerated.

2007-10-02  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        Make "--git-commit trunk..HEAD" work with prepare-ChangeLog.
        Also makes WebCore regression test case logic work when using git.

        * Scripts/prepare-ChangeLog:
        (reviewerAndDescriptionForGitCommit): Added.

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        Add API to retrieve the frame name from QWebFrame.
        Implement support for DRT::dumpChildrenAsText.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::dumpFramesAsText):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        Fix the handling of the response header for data urls. Make sure we always pass absolute URLs to WebKit from both DRT and QtLauncher.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):

2007-10-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Update WebKitLauncher to notify you of new builds from the correct branch, rather than always checking trunk.

        * BuildSlaveSupport/build-launcher-app: Generate a file named BRANCH into WebKit.app so that it knows which branch it was built from.
        * WebKitLauncher/start.html: Use the new URL format that includes the branch we were built from.

2007-10-02  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Maciej.

        Configuration changes from build.webkit.org.  The major change is refactoring to work
        with Buildbot 0.7.6, but it does include other smaller changes that have been made in the
        last few weeks.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/build.webkit.org-config/webkit/auth.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/basesteps.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/schedulers.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py:

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by Maciej.

        Add support for eventSender.mouseMove to DRT.
        Fixes fast/css/hover-affects-child.html

        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (EventSender::mouseMoveTo):

2007-10-01  Mark Rowe  <mrowe@apple.com>

        * BuildSlaveSupport/build-launcher-dmg: Tweak once more to handle nightly builds for branches.

2007-10-01  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Hyatt.

        Make svn-apply and svn-unapply work with added files in git-diff formatted patches.

        * Scripts/svn-apply:
        (gitdiff2svndiff): Ignore lines beginning with "new file".
        * Scripts/svn-unapply:
        (gitdiff2svndiff): Ditto.

2007-09-30  George Staikos  <staikos@kde.org>

        Qt build fix (Mac OS X specific)

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-09-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        -Fix http://bugs.webkit.org/show_bug.cgi?id=13226.
        Remove Bakefiles from svn.

        * GtkLauncher/Bakefiles.bkgen: Removed.
        * GtkLauncher/ENV: Removed.
        * GtkLauncher/gdklauncher.bkl: Removed.
        * GtkLauncher/mk: Removed.
        * Scripts/regenerate-makefiles: Removed.

2007-09-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by John.

        - Updating leopard leak list to refelct bugs that have been fixed and no longer leak.

        * Scripts/run-webkit-tests:

2007-09-26  Adam Roben  <aroben@apple.com>

        Make not finding an installed WebKit non-fatal

        What really matters is that we are able to load WebKit and its
        dependencies, not whether we think we've found an installed WebKit.

        Reviewed by Sam.

        * WebKitInitializer/WebKitInitializer.cpp:
        (getWebViewCLSID): Use new LOG_WARNING macro.
        (getInstalledWebKitDirectory): Ditto.
        (initializeWebKit): Don't die if we didn't find an installed WebKit,
        and use new macros.
        * WebKitInitializer/WebKitInitializer.vcproj: Disabled a warning.

2007-09-26  Adam Roben  <aroben@apple.com>

        Committed this file before saving it

        * WebKitInitializer/debug_internal.vsprops:

2007-09-26  Adam Roben  <aroben@apple.com>

        Load WebKit and its dependencies manually so they come from DllDirectory

        I had to change WebKitInitializer to use malloc/free instead of
        new/delete to avoid pulling in WebKit (and its dependencies) early
        through use of fastMalloc.

        Reviewed by Oliver.

        * WebKitInitializer/WebKitInitializer.cpp:
        (getStringValue): Changed to use malloc/free.
        (getInstalledWebKitDirectory): Ditto.
        (initializeWebKit): Call SetDllDirectory first, then load all of
        WebKit's dependencies manually, finally followed by WebKit itself.
        * WebKitInitializer/WebKitInitializer.vcproj: Added a new
        configuration to match our other projects.
        * WebKitInitializer/debug_internal.vsprops: Added.

2007-09-25  Adam Roben  <aroben@apple.com>

        Actually define DEBUG/NDEBUG so that we load WebKit correctly

        Rubberstamped by Sam.

        * WebKitInitializer/WebKitInitializer.vcproj:

2007-09-25  Adam Roben  <aroben@apple.com>

        Make DumpRenderTree delay-load its dependencies

        This lets WebKitInitializer re-route the dependencies to be loaded out
        of the Safari installation directory.

        Also replaced all uses of kCFAllocatorDefault with 0 (which means the
        same thing), since we can't import the kCFAllocatorDefault symbol when
        delay-loading CoreFoundation.dll.

        Rubberstamped by Sam.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        (javaScriptThreads):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWaitToDump):

2007-09-25  Adam Roben  <aroben@apple.com>

        Pull ole32.lib into WebKitInitializer

        Rubberstamped by Sam.

        * WebKitInitializer/WebKitInitializer.vcproj:

2007-09-25  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=14885
          LGPL'ed files contain incorrect FSF address

        * Drosera/config.h:

2007-09-25  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        Make svn-apply and svn-unapply work with git-diff formatted patches.

        * Scripts/svn-apply: Apply a filter to the input if we find a git-diff marker before a patch.
        (gitdiff2svndiff): Added.
        * Scripts/svn-unapply: Ditto.
        (gitdiff2svndiff): Added.

2007-09-25  Adam Roben  <aroben@apple.com>

        Pull advapi32.lib into WebKitInitializer

        This is needed to get the registry functions we use.

        Rubberstamped by Sam.

        * WebKitInitializer/WebKitInitializer.vcproj:

2007-09-25  Adam Roben  <aroben@apple.com>

        Add python and rsync to cygwin-downloader

        Our build slaves need this, and it can't hurt for everyone else to
        have it, too.

        Reviewed by Sam.

        * CygwinDownloader/cygwin-downloader.py: Added python and rsync.
        * CygwinDownloader/cygwin-downloader.zip: Regenerated.

2007-09-25  Adam Roben  <aroben@apple.com>

        Add WebKitInitializer and use it in DumpRenderTree

        WebKitInitializer is a static library that has one function,
        initializeWebKit(). This registers WebKit and sets up the DLL search
        path so that WebKit's dependencies that are installed with Safari can
        be found.

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.sln: Added WebKitInitializer and made
        DumpRenderTree depend on it.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Call initializeWebKit.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Link against
        WebKitInitializer.lib.
        * WebKitInitializer/WebKitInitializer.cpp: Added.
        (getStringValue):
        (getWebViewCLSID):
        (getInstalledWebKitDirectory):
        (initializeWebKit):
        * WebKitInitializer/WebKitInitializer.h: Added.
        * WebKitInitializer/WebKitInitializer.vcproj: Added.
        * WebKitInitializer/debug.vsprops: Added.
        * WebKitInitializer/release.vsprops: Added.

2007-09-25  Adam Roben  <aroben@apple.com>

        Make run-webkit-tests respect set-webkit-configuration

        Reviewed by Sam.

        * Scripts/run-webkit-tests: Initialize $configuration to whatever
        set-webkit-configuration was last set to.

2007-09-25  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Eric.

        * BuildSlaveSupport/build-launcher-dmg: Allow the platform tag to be specified on the command line.
        This makes it possible to automate nightly builds for the feature-branch.

2007-09-25  Adam Roben  <aroben@apple.com>

        A couple of fixes/enhancements to update-webkit-*-libs

        You can now specify WEBKITSUPPORTLIBRARIESZIPDIR=C:\my\special\place
        to tell update-webkit-support-libraries where it should find the
        WebKitSupportLibrary.zip file you downloaded.

        These scripts also now correctly interpret WEBKITLIBRARIESDIR as a
        Windows-style path.

        Reviewed by Sam.

        * Scripts/update-webkit-auxiliary-libs: Also renamed $supportLibsURL
        to $auxiliaryLibsURL and removed an irrelevant comment.
        * Scripts/update-webkit-support-libs:

2007-09-25  Adam Treat  <treat@kde.org>

        Reviewed by Simon and Lars.

        Refactors and cleans up Qt DRT member variable names, member variable
        initialization, style fixes and general code cleanup.

        Adds queueReload slot to LayoutTestController that some tests require.

        Subclasses QWebFrame to make sure that all frames have an associated
        LayoutTestController JS window object.

        Takes advantage of new QWebFrame provisionalLoad signal to ensure frames
        aren't dumped twice.

        EOF fixes.

        Together, this patch fixes some 20+ layout tests in QtWebKit.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::WebFrame::WebFrame):
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::createFrame):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        (WebCore::DumpRenderTree::layoutTestController):
        (WebCore::DumpRenderTree::eventSender):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::maybeDump):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::queueReload):
        (LayoutTestController::provisionalLoad):
        (EventSender::EventSender):
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::frameUnderMouse):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:
        (LayoutTestController::isLoading):
        (LayoutTestController::setLoading):
        (LayoutTestController::dumpAsText):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2007-09-24  Kevin McCullough  <kmccullough@apple.com>


        - Reverted an accidentally checked in file.

        * Drosera/win/DebuggerDocumentPlatform.cpp: Removed.

2007-09-24  Kevin McCullough  <kmccullough@apple.com>
        Reviewed by Sam.

        - Updated project files to not use Edit and Continue for Debug Information since it doesn't work and breaks some functionality.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2007-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Adam.

        * GdkLauncher: Removed.
        * GdkLauncher/Bakefiles.bkgen: Removed.
        * GdkLauncher/ENV: Removed.
        * GdkLauncher/GdkLauncher.pro: Removed.
        * GdkLauncher/gdklauncher.bkl: Removed.
        * GdkLauncher/main.cpp: Removed.
        * GdkLauncher/mk: Removed.
        * GdkLauncher/simple.svg: Removed.
        * GdkLauncher/text.html: Removed.
        * GtkLauncher: Added.
        * GtkLauncher/GdkLauncher.pro: Removed.
        * GtkLauncher/GtkLauncher.pro: Added.
        * GtkLauncher/main.cpp:
        (updateWindowTitle):
        (main):
        * Scripts/build-webkit:
        * Scripts/regenerate-makefiles:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2007-09-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5491013> REGRESSION: -[WebView windowScriptObject] returns a dummy object or nil if a page hasn't loaded (breaks EA Sports Online)

        Assert that the -[WebScriptObject JSObject] return value is only NULL for non-window objects.
        This is tested by plugins/root-object-premature-delete-crash.html.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController accessStoredWebScriptObject]):

2007-09-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver.

        - We need to initialize the ref count to 1 at initialization so that objects are not garbage collected. (actual patch written by Oliver)

        * DumpRenderTree/win/FrameLoaderDelegate.cpp:
        (FrameLoadDelegate::FrameLoadDelegate):

2007-09-20  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Adam.

        Fix: http://bugs.webkit.org/show_bug.cgi?id=15223
        webkitdir.pm::isQt() is not working properly in run-webkit-tests under Linux/Qt

        Added determineIsQt() and determineIsGdk() to webkitdirs.pm.
        Now isQt() and isGdk() use global variables that are only set once.

        An array of all the parameters is now given to build-dumprender which includes
        the platform on linux.

        * Scripts/build-dumprendertree:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2007-09-19  Adam Roben  <aroben@apple.com>

        Rubberstamped by Hyatt.

        * Spinneret: Removed.

2007-09-19  Tuukka Hastrup  <Tuukka.Hastrup@iki.fi>

        Reviewed by David Kilzer.

        * Scripts/webkitdirs.pm: On Gdk and Qt, check that flex, bison, gperf are available.

2007-09-18  Sam Weinig  <sam@webkit.org>

        Add JSRetainPtr.h #include to fix some builds.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:

2007-09-18  Mike Hommey  <glandium@debian.org>

        Reviewed by Adam.

        * Scripts/prepare-ChangeLog:
        - Properly parse GECOS field.
        - Use git configuration for user name and email when appropriate.

2007-09-17  Sam Weinig  <sam@webkit.org>

        Build fix.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Share more code between mac and windows DRT.
            - GCController is now shared.
            - Rename WaitUntilDoneDelegate to FrameLoadDelegate for consistency.

        * DumpRenderTree/GCController.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/FrameLoaderDelegate.cpp: Copied from DumpRenderTree/win/WaitUntilDoneDelegate.cpp.
        (FrameLoadDelegate::FrameLoadDelegate):
        (FrameLoadDelegate::~FrameLoadDelegate):
        (FrameLoadDelegate::windowScriptObjectAvailable):
        * DumpRenderTree/win/FrameLoaderDelegate.h: Copied from DumpRenderTree/win/WaitUntilDoneDelegate.h.
        * DumpRenderTree/win/GCController.cpp: Removed.
        * DumpRenderTree/win/GCController.h: Removed.
        * DumpRenderTree/win/GCControllerWin.cpp: Copied from DumpRenderTree/win/GCController.cpp.
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/win/WaitUntilDoneDelegate.cpp: Removed.
        * DumpRenderTree/win/WaitUntilDoneDelegate.h: Removed.

2007-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Begin sharing code between mac and windows DRT.
            - both now share LayoutTestController.h/cpp and implement platform dependant
              operations in LayoutTestControllerMac/Win.
            - DumpRenderTree.h is now shared.
            - WorkQueue and WorkQueueItem are also shared.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (displayWebView):
        (dumpFrameScrollPosition):
        (dumpFramesAsText):
        (dump):
        (runTest):
        * DumpRenderTree/win/DumpRenderTree.h: Removed.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeWin.h: Copied from DumpRenderTree/win/DumpRenderTree.h.
        * DumpRenderTree/win/EditingDelegate.cpp:
        (EditingDelegate::shouldBeginEditingInDOMRange):
        (EditingDelegate::shouldEndEditingInDOMRange):
        (EditingDelegate::shouldInsertNode):
        (EditingDelegate::shouldInsertText):
        (EditingDelegate::shouldDeleteDOMRange):
        (EditingDelegate::shouldChangeSelectedDOMRange):
        (EditingDelegate::shouldApplyStyle):
        (EditingDelegate::shouldChangeTypingStyle):
        (EditingDelegate::doPlatformCommand):
        (EditingDelegate::webViewDidBeginEditing):
        (EditingDelegate::webViewDidChange):
        (EditingDelegate::webViewDidEndEditing):
        (EditingDelegate::webViewDidChangeTypingStyle):
        (EditingDelegate::webViewDidChangeSelection):
        * DumpRenderTree/win/LayoutTestController.cpp: Removed.
        * DumpRenderTree/win/LayoutTestController.h: Removed.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Copied from DumpRenderTree/win/LayoutTestController.cpp.
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::copyDecodedHostName):
        (LayoutTestController::copyEncodedHostName):
        (LayoutTestController::display):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::notifyDone):
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):
        (jsStringRefToWString):
        (LayoutTestController::queueLoad):
        (LayoutTestController::queueReload):
        (LayoutTestController::queueScript):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setWindowIsKey):
        (waitUntilDoneWatchdogFired):
        (LayoutTestController::setWaitToDump):
        (LayoutTestController::windowCount):
        * DumpRenderTree/win/WaitUntilDoneDelegate.cpp:
        (FrameLoadDelegate::didReceiveTitle):
        (FrameLoadDelegate::processWork):
        (FrameLoadDelegate::locationChangeDone):
        (FrameLoadDelegate::windowScriptObjectAvailable):
        * DumpRenderTree/win/WorkQueue.cpp: Removed.
        * DumpRenderTree/win/WorkQueue.h: Removed.
        * DumpRenderTree/win/WorkQueueItem.cpp: Removed.
        * DumpRenderTree/win/WorkQueueItem.h: Removed.
        * DumpRenderTree/win/WorkQueueItemWin.cpp: Copied from DumpRenderTree/win/WorkQueueItem.cpp.
        (jsStringRefToWString):
        (LoadItem::invoke):
        (ScriptItem::invoke):

2007-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        - Move Windows DumpRenderTree and TestNetscapePlugin to WebCoreTools/DumpRenderTree/win

        * DumpRenderTree/DumpRenderTree.sln: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.sln.
        * DumpRenderTree/DumpRenderTree.vcproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.sln: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DraggingInfo.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/GCController.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/GCController.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/debug.vsprops: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/debug_internal.vsprops: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/release.vsprops: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/TestNetscapePlugin.def: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/TestNetscapePlugin.rc: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/TestNetscapePlugin.vcproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/main.c: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/resource.h: Removed.
        * DumpRenderTree/win: Added.
        * DumpRenderTree/win/DraggingInfo.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DraggingInfo.h.
        * DumpRenderTree/win/DumpRenderTree.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp.
        * DumpRenderTree/win/DumpRenderTree.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.h.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj.
        * DumpRenderTree/win/EditingDelegate.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.cpp.
        * DumpRenderTree/win/EditingDelegate.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.h.
        * DumpRenderTree/win/EventSender.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.cpp.
        * DumpRenderTree/win/EventSender.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.h.
        * DumpRenderTree/win/GCController.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/GCController.cpp.
        * DumpRenderTree/win/GCController.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/GCController.h.
        * DumpRenderTree/win/LayoutTestController.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.cpp.
        * DumpRenderTree/win/LayoutTestController.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.h.
        * DumpRenderTree/win/TestNetscapePlugin: Copied from DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin.
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/UIDelegate.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.cpp.
        * DumpRenderTree/win/UIDelegate.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.h.
        * DumpRenderTree/win/WaitUntilDoneDelegate.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.cpp.
        * DumpRenderTree/win/WaitUntilDoneDelegate.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.h.
        * DumpRenderTree/win/WorkQueue.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.cpp.
        * DumpRenderTree/win/WorkQueue.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.h.
        * DumpRenderTree/win/WorkQueueItem.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.cpp.
        * DumpRenderTree/win/WorkQueueItem.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.h.
        * DumpRenderTree/win/debug.vsprops: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/debug.vsprops.
        * DumpRenderTree/win/debug_internal.vsprops: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/debug_internal.vsprops.
        * DumpRenderTree/win/release.vsprops: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/release.vsprops.
        * Scripts/run-webkit-tests: Update to point to the new location of the sln.

2007-09-15  Mark Rowe  <mrowe@apple.com>

        Build fix for DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:  Reinstate -Wno-deprecated-declarations on DumpRenderTree.mm.

2007-09-14  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam Roben.

        Split the WaitUntilDoneDelegate into a UIDelegate and a FrameLoadDelegate.
          - The UIDelegate was put into a new file while the FrameLoadDelegate was
            kept in the WaitUntilDoneDelegate file for the time being.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.cpp: Added.
        (UIDelegate::QueryInterface):
        (UIDelegate::AddRef):
        (UIDelegate::Release):
        (UIDelegate::hasCustomMenuImplementation):
        (UIDelegate::setFrame):
        (UIDelegate::webViewFrame):
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::webViewAddMessageToConsole):
        (UIDelegate::doDragDrop):
        (UIDelegate::webViewGetDlgCode):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.h: Added.
        (UIDelegate::UIDelegate):
        (UIDelegate::createWebViewWithRequest):
        (UIDelegate::webViewShow):
        (UIDelegate::webViewClose):
        (UIDelegate::webViewFocus):
        (UIDelegate::webViewUnfocus):
        (UIDelegate::webViewFirstResponder):
        (UIDelegate::makeFirstResponder):
        (UIDelegate::setStatusText):
        (UIDelegate::webViewStatusText):
        (UIDelegate::webViewAreToolbarsVisible):
        (UIDelegate::setToolbarsVisible):
        (UIDelegate::webViewIsStatusBarVisible):
        (UIDelegate::setStatusBarVisible):
        (UIDelegate::webViewIsResizable):
        (UIDelegate::setResizable):
        (UIDelegate::setContentRect):
        (UIDelegate::webViewContentRect):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage):
        (UIDelegate::runOpenPanelForFileButtonWithResultListener):
        (UIDelegate::mouseDidMoveOverElement):
        (UIDelegate::contextMenuItemsForElement):
        (UIDelegate::validateUserInterfaceItem):
        (UIDelegate::shouldPerformAction):
        (UIDelegate::dragDestinationActionMaskForDraggingInfo):
        (UIDelegate::willPerformDragDestinationAction):
        (UIDelegate::dragSourceActionMaskForPoint):
        (UIDelegate::willPerformDragSourceAction):
        (UIDelegate::contextMenuItemSelected):
        (UIDelegate::trackCustomPopupMenu):
        (UIDelegate::measureCustomMenuItem):
        (UIDelegate::drawCustomMenuItem):
        (UIDelegate::addCustomMenuDrawingData):
        (UIDelegate::cleanUpCustomMenuDrawingData):
        (UIDelegate::canTakeFocus):
        (UIDelegate::takeFocus):
        (UIDelegate::registerUndoWithTarget):
        (UIDelegate::removeAllActionsWithTarget):
        (UIDelegate::setActionTitle):
        (UIDelegate::undo):
        (UIDelegate::redo):
        (UIDelegate::canUndo):
        (UIDelegate::canRedo):
        (UIDelegate::webViewResizerRect):
        (UIDelegate::webViewDrawResizer):
        (UIDelegate::webViewScrolled):
        (UIDelegate::webViewShouldInterruptJavaScript):
        (UIDelegate::webViewReceivedFocus):
        (UIDelegate::webViewLostFocus):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.cpp:
        (FrameLoadDelegate::QueryInterface):
        (FrameLoadDelegate::AddRef):
        (FrameLoadDelegate::Release):
        (FrameLoadDelegate::didStartProvisionalLoadForFrame):
        (FrameLoadDelegate::didCommitLoadForFrame):
        (FrameLoadDelegate::didReceiveTitle):
        (FrameLoadDelegate::processWork):
        (processWorkTimer):
        (FrameLoadDelegate::locationChangeDone):
        (FrameLoadDelegate::didFinishLoadForFrame):
        (FrameLoadDelegate::didFailLoadWithError):
        (FrameLoadDelegate::windowScriptObjectAvailable):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.h:
        (FrameLoadDelegate::FrameLoadDelegate):

2007-09-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Kevin McCullough.

        Move mac specific globals in to mac/DumpRenderTreeMac.h

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.mm: Removed.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm: Copied from DumpRenderTree/DumpRenderTree.mm.
        * DumpRenderTree/mac/DumpRenderTreeMac.h: Added.

2007-09-14  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Weinig

        You know, Sam, some of us use case-sensitve filesystems...

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/mac/UIDelegate.mm:

2007-09-14  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam Roben.

        - Move dump state data to LayoutTestContoller and add getter/setters to accommodate.
        - Move mac specific DumpRenderTree files to DumpRenderTree/mac

        * DumpRenderTree/AppleScriptController.h: Removed.
        * DumpRenderTree/AppleScriptController.m: Removed.
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.mm:
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        (activateAhemFont):
        (setDefaultColorProfileToRGB):
        (makeLargeMallocFailSilently):
        (dumpFrameScrollPosition):
        (dumpFramesAsText):
        (dump):
        (runTest):
        (-[DumpRenderTreeWindow isKeyWindow]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeDraggingInfo.h: Removed.
        * DumpRenderTree/DumpRenderTreeDraggingInfo.m: Removed.
        * DumpRenderTree/EditingDelegate.h: Removed.
        * DumpRenderTree/EditingDelegate.m: Removed.
        * DumpRenderTree/EventSendingController.h: Removed.
        * DumpRenderTree/EventSendingController.m: Removed.
        * DumpRenderTree/FrameLoadDelegate.h: Removed.
        * DumpRenderTree/FrameLoadDelegate.mm: Removed.
        * DumpRenderTree/GCController.mm: Removed.
        * DumpRenderTree/ImageDiff.m: Removed.
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpAsTextCallback):
        (dumpBackForwardListCallback):
        (dumpChildFramesAsTextCallback):
        (dumpChildFrameScrollPositionsCallback):
        (dumpDOMAsWebArchiveCallback):
        (dumpEditingCallbacksCallback):
        (dumpFrameLoadCallbacksCallback):
        (dumpResourceLoadCallbacksCallback):
        (dumpSelectionRectCallback):
        (dumpSourceAsWebArchiveCallback):
        (dumpTitleChangesCallback):
        (repaintSweepHorizontallyCallback):
        (setCallCloseOnWebViewsCallback):
        (setCanOpenWindowsCallback):
        (setCloseRemainingWindowsWhenCompleteCallback):
        (testRepaintCallback):
        (addFileToPasteboardOnDragCallback):
        (waitUntilDoneCallback):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpAsText):
        (LayoutTestController::setDumpAsText):
        (LayoutTestController::dumpBackForwardList):
        (LayoutTestController::setDumpBackForwardList):
        (LayoutTestController::dumpChildFrameScrollPositions):
        (LayoutTestController::setDumpChildFrameScrollPositions):
        (LayoutTestController::dumpChildFramesAsText):
        (LayoutTestController::setDumpChildFramesAsText):
        (LayoutTestController::dumpDOMAsWebArchive):
        (LayoutTestController::setDumpDOMAsWebArchive):
        (LayoutTestController::dumpSelectionRect):
        (LayoutTestController::setDumpSelectionRect):
        (LayoutTestController::dumpSourceAsWebArchive):
        (LayoutTestController::setDumpSourceAsWebArchive):
        (LayoutTestController::dumpTitleChanges):
        (LayoutTestController::setDumpTitleChanges):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::setDumpEditingCallbacks):
        (LayoutTestController::dumpResourceLoadCallbacks):
        (LayoutTestController::setDumpResourceLoadCallbacks):
        (LayoutTestController::dumpFrameLoadCallbacks):
        (LayoutTestController::setDumpFrameLoadCallbacks):
        (LayoutTestController::addFileToPasteboardOnDrag):
        (LayoutTestController::setAddFileToPasteboardOnDrag):
        (LayoutTestController::callCloseOnWebViews):
        (LayoutTestController::setCallCloseOnWebViews):
        (LayoutTestController::canOpenWindows):
        (LayoutTestController::setCanOpenWindows):
        (LayoutTestController::closeRemainingWindowsWhenComplete):
        (LayoutTestController::setCloseRemainingWindowsWhenComplete):
        (LayoutTestController::testRepaint):
        (LayoutTestController::setTestRepaint):
        (LayoutTestController::testRepaintSweepHorizontally):
        (LayoutTestController::setTestRepaintSweepHorizontally):
        (LayoutTestController::waitToDump):
        (LayoutTestController::windowIsKey):
        * DumpRenderTree/LayoutTestControllerMac.mm: Removed.
        * DumpRenderTree/NavigationController.h: Removed.
        * DumpRenderTree/NavigationController.m: Removed.
        * DumpRenderTree/ObjCController.h: Removed.
        * DumpRenderTree/ObjCController.m: Removed.
        * DumpRenderTree/ObjCPlugin.h: Removed.
        * DumpRenderTree/ObjCPlugin.m: Removed.
        * DumpRenderTree/ObjCPluginFunction.h: Removed.
        * DumpRenderTree/ObjCPluginFunction.m: Removed.
        * DumpRenderTree/PolicyDelegate.h: Removed.
        * DumpRenderTree/PolicyDelegate.m: Removed.
        * DumpRenderTree/ResourceLoadDelegate.h: Removed.
        * DumpRenderTree/ResourceLoadDelegate.m: Removed.
        * DumpRenderTree/TextInputController.h: Removed.
        * DumpRenderTree/TextInputController.m: Removed.
        * DumpRenderTree/UIDelegate.h: Removed.
        * DumpRenderTree/UIDelegate.mm: Removed.
        * DumpRenderTree/WorkQueueItemMac.mm: Removed.
        * DumpRenderTree/mac: Added.
        * DumpRenderTree/mac/AppleScriptController.h: Copied from DumpRenderTree/AppleScriptController.h.
        * DumpRenderTree/mac/AppleScriptController.m: Copied from DumpRenderTree/AppleScriptController.m.
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h: Copied from DumpRenderTree/DumpRenderTreeDraggingInfo.h.
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm: Copied from DumpRenderTree/DumpRenderTreeDraggingInfo.m.
        * DumpRenderTree/mac/EditingDelegate.h: Copied from DumpRenderTree/EditingDelegate.h.
        * DumpRenderTree/mac/EditingDelegate.mm: Copied from DumpRenderTree/EditingDelegate.m.
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        (-[EditingDelegate webViewDidChangeSelection:]):
        * DumpRenderTree/mac/EventSendingController.h: Copied from DumpRenderTree/EventSendingController.h.
        * DumpRenderTree/mac/EventSendingController.mm: Copied from DumpRenderTree/EventSendingController.m.
        * DumpRenderTree/mac/FrameLoadDelegate.h: Copied from DumpRenderTree/FrameLoadDelegate.h.
        * DumpRenderTree/mac/FrameLoadDelegate.mm: Copied from DumpRenderTree/FrameLoadDelegate.mm.
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didReceiveIcon:forFrame:]):
        (-[FrameLoadDelegate webView:didChangeLocationWithinPageForFrame:]):
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):
        (-[FrameLoadDelegate webView:didCancelClientRedirectForFrame:]):
        (-[FrameLoadDelegate webView:willCloseFrame:]):
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):
        (-[FrameLoadDelegate webView:didHandleOnloadEventsForFrame:]):
        * DumpRenderTree/mac/GCControllerMac.mm: Copied from DumpRenderTree/GCController.mm.
        * DumpRenderTree/mac/ImageDiff.m: Copied from DumpRenderTree/ImageDiff.m.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Copied from DumpRenderTree/LayoutTestControllerMac.mm.
        (LayoutTestController::notifyDone):
        (LayoutTestController::setWindowIsKey):
        (LayoutTestController::setWaitToDump):
        * DumpRenderTree/mac/NavigationController.h: Copied from DumpRenderTree/NavigationController.h.
        * DumpRenderTree/mac/NavigationController.m: Copied from DumpRenderTree/NavigationController.m.
        * DumpRenderTree/mac/ObjCController.h: Copied from DumpRenderTree/ObjCController.h.
        * DumpRenderTree/mac/ObjCController.m: Copied from DumpRenderTree/ObjCController.m.
        * DumpRenderTree/mac/ObjCPlugin.h: Copied from DumpRenderTree/ObjCPlugin.h.
        * DumpRenderTree/mac/ObjCPlugin.m: Copied from DumpRenderTree/ObjCPlugin.m.
        * DumpRenderTree/mac/ObjCPluginFunction.h: Copied from DumpRenderTree/ObjCPluginFunction.h.
        * DumpRenderTree/mac/ObjCPluginFunction.m: Copied from DumpRenderTree/ObjCPluginFunction.m.
        * DumpRenderTree/mac/PolicyDelegate.h: Copied from DumpRenderTree/PolicyDelegate.h.
        * DumpRenderTree/mac/PolicyDelegate.mm: Copied from DumpRenderTree/PolicyDelegate.m.
        * DumpRenderTree/mac/ResourceLoadDelegate.h: Copied from DumpRenderTree/ResourceLoadDelegate.h.
        * DumpRenderTree/mac/ResourceLoadDelegate.mm: Copied from DumpRenderTree/ResourceLoadDelegate.m.
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willCacheResponse:fromDataSource:]):
        * DumpRenderTree/mac/TextInputController.h: Copied from DumpRenderTree/TextInputController.h.
        * DumpRenderTree/mac/TextInputController.m: Copied from DumpRenderTree/TextInputController.m.
        * DumpRenderTree/mac/UIDelegate.h: Copied from DumpRenderTree/UIDelegate.h.
        * DumpRenderTree/mac/UIDelegate.mm: Copied from DumpRenderTree/UIDelegate.mm.
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):
        (-[UIDelegate webViewFocus:]):
        (-[UIDelegate webView:createWebViewWithRequest:]):
        (-[UIDelegate webViewClose:]):
        * DumpRenderTree/mac/WorkQueueItemMac.mm: Copied from DumpRenderTree/WorkQueueItemMac.mm.

2007-09-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Changing Win version of Drosera work with recent changes.

        * Drosera/DebuggerDocument.cpp:
        * Drosera/DebuggerDocument.h:
        * Drosera/mac/DebuggerDocumentPlatform.mm:
        (NSStringCreateWithJSStringRef):
        (JSValueRefCreateWithNSString):
        * Drosera/win/DebuggerClient.cpp:
        (DebuggerClient::stepInto):
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-09-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - Moved isPaused into the JS for efficiency and simplicity.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::DebuggerDocument):
        (DebuggerDocument::pauseCallback):
        (DebuggerDocument::resumeCallback):
        (DebuggerDocument::isPaused):
        (DebuggerDocument::staticFunctions):
        * Drosera/DebuggerDocument.h:
        * Drosera/console.js:
        * Drosera/debugger.js:
        * Drosera/mac/DebuggerClient.mm:
        (-[DebuggerClient validateUserInterfaceItem:]):

2007-09-13  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Darin Adler.

        Make DumpRenderTree more cross platform ready.
        - Convert GCController to use the JSCore API instead of the WebScriptObject.
        - Use CF types instead of NS objects.
        - General cleanup.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.mm:
        (dumpRenderTree):
        (dump):
        (runTest):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/EditingDelegate.m:
        * DumpRenderTree/FrameLoadDelegate.h:
        * DumpRenderTree/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        * DumpRenderTree/GCController.cpp: Added.
        (GCController::GCController):
        (GCController::~GCController):
        (collectCallback):
        (collectOnAlternateThreadCallback):
        (getJSObjectCountCallback):
        (GCController::makeWindowObject):
        (GCController::getJSClass):
        (GCController::staticFunctions):
        * DumpRenderTree/GCController.h:
        * DumpRenderTree/GCController.mm:
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::makeWindowObject):
        (LayoutTestController::getJSClass):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/LayoutTestControllerMac.mm:
        (LayoutTestController::addDisallowedURL):
        (waitUntilDoneWatchdogFired):
        (LayoutTestController::waitUntilDone):
        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):

2007-09-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Stephanie.

        Fix leaks in mac DumpRenderTree.

        * DumpRenderTree/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]): Initalize in the correct order.
        (-[FrameLoadDelegate processWork:]): Delete WorkQueueItem's after dequeueing them.
        * DumpRenderTree/LayoutTestController.cpp:
        (decodeHostNameCallback): Put return value in a temporary JSRetainPtr to ensure it gets released.
        (encodeHostNameCallback): ditto.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/LayoutTestControllerMac.mm:
        (LayoutTestController::copyDecodedHostName): Rename function to signal that it follows the Create rule.
        (LayoutTestController::copyEncodedHostName): ditto
        (LayoutTestController::queueLoad): Use a JSRetainPtr to ensure the url gets released.

2007-09-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof.

        - Updated Leopard leak list to include a leak which appears to be fixed in 9A549 but not the version the bot is on.  This will allow us to get the bot green, but later we should remove it.

        * Scripts/run-webkit-tests:

2007-09-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Simplified code paths and extracted out functions to increase encapsulation.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::breakpointEditorHTMLCallback):
        (DebuggerDocument::isPausedCallback):
        (DebuggerDocument::pauseCallback):
        (DebuggerDocument::resumeCallback):
        (DebuggerDocument::stepIntoCallback):
        (DebuggerDocument::evaluateScriptCallback):
        (DebuggerDocument::currentFunctionStackCallback):
        (DebuggerDocument::localScopeVariableNamesForCallFrameCallback):
        (DebuggerDocument::valueForScopeVariableNamedCallback):
        (DebuggerDocument::logCallback):
        * Drosera/DebuggerDocument.h:
        (DebuggerDocument::getPaused):
        * Drosera/mac/DebuggerClient.mm:
        (-[DebuggerClient pause:]):
        (-[DebuggerClient resume:]):
        (-[DebuggerClient stepInto:]):
        (-[DebuggerClient stepOver:]):
        (-[DebuggerClient stepOut:]):
        (-[DebuggerClient showConsole:]):
        (-[DebuggerClient closeCurrentFile:]):
        (-[DebuggerClient validateUserInterfaceItem:]):
        * Drosera/mac/DebuggerDocumentPlatform.mm: Added.
        (+[NSString stringOrNilFromWebScriptResult:]):
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:

2007-09-12  Sam Weinig  <sam@webkit.org>

        Build fix for Buildbot.

        * DumpRenderTree/DumpRenderTree.mm:
        (dump):

2007-09-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        - Updated the leaks list for leopard to help identify regressions.

        * Scripts/run-webkit-tests:

2007-09-12  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Darin Adler.

        Convert the LayoutTestController to use the JSCore API instead of WebScriptObject.

        * DumpRenderTree/DumpRenderTree.h: Re-order variables.
        * DumpRenderTree/DumpRenderTree.m: Removed.
        * DumpRenderTree/DumpRenderTree.mm: Copied from DumpRenderTree/DumpRenderTree.m.
        (stopJavaScriptThreads): Fix initialization.
        (setDefaultColorProfileToRGB): Add explicit cast from void*.
        (dumpRenderTree): Ditto.
        (runTest):
        Used the WorkQueue from the windows DRT instead of the old NSMutableArray one.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/FrameLoadDelegate.h: Add LayoutTestController instance variable.
        * DumpRenderTree/FrameLoadDelegate.m: Removed.
        * DumpRenderTree/FrameLoadDelegate.mm: Copied from DumpRenderTree/FrameLoadDelegate.m.
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        Convert to use the new JSCore based LayoutTestController and the new WorkQueue.

        * DumpRenderTree/LayoutTestController.cpp: Added.
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::~LayoutTestController):
        (dumpAsTextCallback):
        (dumpBackForwardListCallback):
        (dumpChildFramesAsTextCallback):
        (dumpChildFrameScrollPositionsCallback):
        (dumpDOMAsWebArchiveCallback):
        (dumpEditingCallbacksCallback):
        (dumpFrameLoadCallbacksCallback):
        (dumpResourceLoadCallbacksCallback):
        (dumpSelectionRectCallback):
        (dumpSourceAsWebArchiveCallback):
        (dumpTitleChangesCallback):
        (repaintSweepHorizontallyCallback):
        (setCallCloseOnWebViewsCallback):
        (setCanOpenWindowsCallback):
        (setCloseRemainingWindowsWhenCompleteCallback):
        (testRepaintCallback):
        (addFileToPasteboardOnDragCallback):
        (addDisallowedURLCallback):
        (clearBackForwardListCallback):
        (decodeHostNameCallback):
        (displayCallback):
        (encodeHostNameCallback):
        (keepWebHistoryCallback):
        (notifyDoneCallback):
        (queueBackNavigationCallback):
        (queueForwardNavigationCallback):
        (queueLoadCallback):
        (queueReloadCallback):
        (queueScriptCallback):
        (setAcceptsEditingCallback):
        (setCustomPolicyDelegateCallback):
        (setMainFrameIsFirstResponderCallback):
        (setTabKeyCyclesThroughElementsCallback):
        (setUseDashboardCompatibilityModeCallback):
        (setUserStyleSheetEnabledCallback):
        (setUserStyleSheetLocationCallback):
        (setWindowIsKeyCallback):
        (waitUntilDoneCallback):
        (windowCountCallback):
        (LayoutTestController::makeWindowObject):
        (LayoutTestController::getLayoutTestControllerJSClass):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h: Replaced.
        * DumpRenderTree/LayoutTestController.m: Removed.
        * DumpRenderTree/LayoutTestControllerMac.mm: Added.
        (LayoutTestController::dumpAsText):
        (LayoutTestController::dumpBackForwardList):
        (LayoutTestController::dumpChildFramesAsText):
        (LayoutTestController::dumpChildFrameScrollPositions):
        (LayoutTestController::dumpDOMAsWebArchive):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::dumpFrameLoadCallbacks):
        (LayoutTestController::dumpResourceLoadCallbacks):
        (LayoutTestController::dumpSelectionRect):
        (LayoutTestController::dumpSourceAsWebArchive):
        (LayoutTestController::dumpTitleChanges):
        (LayoutTestController::repaintSweepHorizontally):
        (LayoutTestController::setCallCloseOnWebViews):
        (LayoutTestController::setCanOpenWindows):
        (LayoutTestController::setCloseRemainingWindowsWhenComplete):
        (LayoutTestController::testRepaint):
        (LayoutTestController::addFileToPasteboardOnDrag):
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::decodeHostName):
        (LayoutTestController::encodeHostName):
        (LayoutTestController::display):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::notifyDone):
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):
        (LayoutTestController::queueLoad):
        (LayoutTestController::queueReload):
        (LayoutTestController::queueScript):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setWindowIsKey):
        (+[WaitToDumpWatchdog waitUntilDoneWatchdogFired]):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::windowCount):
        Use the JSCore API to implement the LayoutTestController.

        * DumpRenderTree/ObjCController.h:
        * DumpRenderTree/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController accessStoredWebScriptObject]):
        (-[ObjCController storeWebScriptObject:]):
        (-[ObjCController dealloc]):
        (-[ObjCController invokeUndefinedMethodFromWebScript:withArguments:]):
        Move WebScriptObject tests to ObjCController.

        * DumpRenderTree/UIDelegate.m: Removed.
        * DumpRenderTree/UIDelegate.mm: Copied from DumpRenderTree/UIDelegate.m.

        * DumpRenderTree/WorkQueue.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.cpp.
        * DumpRenderTree/WorkQueue.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.h.
        * DumpRenderTree/WorkQueueItem.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.h.
        (WorkQueueItem::~WorkQueueItem):
        (LoadItem::LoadItem):
        (LoadItem::url):
        (LoadItem::target):
        (ScriptItem::ScriptItem):
        (ScriptItem::script):
        * DumpRenderTree/WorkQueueItemMac.mm: Added.
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):
        Copy WorkQueue and WorkQueueItem from windows DRT. Changed the WorkQueueItem to use JSStringRefs instead of wstrings
        to avoid conversion until the last possible moment.  These changes will be merged with the windows DRT when we start
        sharing code.

2007-09-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - Updated Win side to take advantage of the platform separating changes.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::localScopeVariableNamesForCallFrame):
        * Drosera/DebuggerDocument.h:
        * Drosera/win/DebuggerClient.cpp:
        (DebuggerClient::pause):
        (DebuggerClient::resume):
        (DebuggerClient::stepInto):
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/win/DebuggerClient.h:
        * Drosera/win/Drosera.cpp:
        (Drosera::Drosera):
        (Drosera::windowScriptObjectAvailable):
        (Drosera::initWithServerName):
        (Drosera::switchToServerNamed):
        * Drosera/win/Drosera.h:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-09-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Just doing the moves in a separate patch so the changes are easier to see.

        * Drosera/win/DebuggerClient.cpp: Copied from Drosera/win/DebuggerDocumentWin.cpp.
        * Drosera/win/DebuggerClient.h: Copied from Drosera/win/DebuggerDocumentWin.h.
        * Drosera/win/DebuggerDocumentWin.cpp: Removed.
        * Drosera/win/DebuggerDocumentWin.h: Removed.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-09-11  Sven Herzberg  <sven@imendio.com>

        Don't overwrite LD_LIBRARY_PATH, prepend to it. Fixes:
        http://bugs.webkit.org/show_bug.cgi?id=15176

        * Scripts/run-launcher: don't replace LD_LIBRARY_PATH with
        $projectDir, but prepend $projectDir to LD_LIBRARY_PATH (to preserve
        other paths eg. from jhbuild)

2007-09-10  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Made an order-of-deletion mistake.

        * Drosera/DebuggerDocument.h:
        * Drosera/ForwardingHeaders/wtf/Assertions.h: Removed.
        * Drosera/ForwardingHeaders/wtf/Noncopyable.h: Removed.
        * Drosera/ForwardingHeaders/wtf/OwnPtr.h: Removed.
        * Drosera/mac/DebuggerClient.mm:
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:

2007-09-10  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Renaming DebuggerDocument[platform] to DebuggerClient to be more clear.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::DebuggerDocument):
        * Drosera/DebuggerDocument.h:
        * Drosera/ForwardingHeaders/wtf/Assertions.h: Added.
        * Drosera/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * Drosera/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerClient.h: Copied from Drosera/mac/DebuggerDocumentMac.h.
        * Drosera/mac/DebuggerClient.mm: Copied from Drosera/mac/DebuggerDocumentMac.mm.
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/mac/DebuggerDocumentMac.h: Removed.
        * Drosera/mac/DebuggerDocumentMac.mm: Removed.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:

2007-09-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove 'objC' prefix from methods now in the ObjCController.

        * DumpRenderTree/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController classNameOf:]):
        (-[ObjCController objectOfClass:]):
        (-[ObjCController identityIsEqual::]):
        (-[ObjCController longLongRoundTrip:]):
        (-[ObjCController unsignedLongLongRoundTrip:]):

2007-09-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Initial refactor of DumpRenderTree in preparation of making it more platform independent.
        - Move LayoutTestController into its own file.
        - Move Objective-C only functions on LayoutTestController into a new controller called the
          ObjCController.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (displayWebView):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/FrameLoadDelegate.m:
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        * DumpRenderTree/LayoutTestController.h: Added.
        * DumpRenderTree/LayoutTestController.m: Added.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController clearBackForwardList]):
        (-[LayoutTestController setUseDashboardCompatibilityMode:]):
        (-[LayoutTestController setCloseRemainingWindowsWhenComplete:]):
        (-[LayoutTestController setCustomPolicyDelegate:]):
        (-[LayoutTestController keepWebHistory]):
        (-[LayoutTestController setCallCloseOnWebViews:]):
        (-[LayoutTestController setCanOpenWindows]):
        (-[LayoutTestController waitUntilDone]):
        (-[LayoutTestController waitUntilDoneWatchdogFired]):
        (-[LayoutTestController notifyDone]):
        (-[LayoutTestController dumpAsText]):
        (-[LayoutTestController addFileToPasteboardOnDrag]):
        (-[LayoutTestController addDisallowedURL:]):
        (-[LayoutTestController setUserStyleSheetLocation:]):
        (-[LayoutTestController setUserStyleSheetEnabled:]):
        (-[LayoutTestController dumpDOMAsWebArchive]):
        (-[LayoutTestController dumpSourceAsWebArchive]):
        (-[LayoutTestController dumpSelectionRect]):
        (-[LayoutTestController dumpTitleChanges]):
        (-[LayoutTestController dumpBackForwardList]):
        (-[LayoutTestController windowCount]):
        (-[LayoutTestController dumpChildFrameScrollPositions]):
        (-[LayoutTestController dumpChildFramesAsText]):
        (-[LayoutTestController dumpEditingCallbacks]):
        (-[LayoutTestController dumpResourceLoadCallbacks]):
        (-[LayoutTestController dumpFrameLoadCallbacks]):
        (-[LayoutTestController setWindowIsKey:]):
        (-[LayoutTestController setMainFrameIsFirstResponder:]):
        (-[LayoutTestController display]):
        (-[LayoutTestController testRepaint]):
        (-[LayoutTestController repaintSweepHorizontally]):
        (-[LayoutTestController invokeUndefinedMethodFromWebScript:withArguments:]):
        (-[LayoutTestController _addWorkForTarget:selector:arg1:arg2:]):
        (-[LayoutTestController _doLoad:target:]):
        (-[LayoutTestController _doBackOrForwardNavigation:]):
        (-[LayoutTestController queueBackNavigation:]):
        (-[LayoutTestController queueForwardNavigation:]):
        (-[LayoutTestController queueReload]):
        (-[LayoutTestController queueScript:]):
        (-[LayoutTestController queueLoad:target:]):
        (-[LayoutTestController setAcceptsEditing:]):
        (-[LayoutTestController setTabKeyCyclesThroughElements:]):
        (-[LayoutTestController storeWebScriptObject:]):
        (-[LayoutTestController accessStoredWebScriptObject]):
        (-[LayoutTestController dealloc]):
        (-[LayoutTestController decodeHostName:]):
        (-[LayoutTestController encodeHostName:]):
        * DumpRenderTree/ObjCController.h: Added.
        * DumpRenderTree/ObjCController.m: Added.
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController objCClassNameOf:]):
        (-[ObjCController objCObjectOfClass:]):
        (-[ObjCController objCIdentityIsEqual::]):
        (-[ObjCController objCLongLongRoundTrip:]):
        (-[ObjCController objCUnsignedLongLongRoundTrip:]):
        (-[ObjCController testWrapperRoundTripping:]):

2007-09-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Alice.

        Strip trailing and leading space/newline characters from skiplist file names.

        * Scripts/run-webkit-tests:

2007-09-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - Changed Drosera to take advantage of the JSRetainPtr changes.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::breakpointEditorHTML):
        (DebuggerDocument::evaluateScript):
        (DebuggerDocument::valueForScopeVariableNamed):
        (DebuggerDocument::log):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::toJSArray):
        (DebuggerDocument::callFunctionOnObject):
        (DebuggerDocument::logException):
        * Drosera/mac/DebuggerDocumentMac.mm:
        (-[DebuggerClientMac webView:didLoadMainResourceForDataSource:]):
        (-[DebuggerClientMac webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):

2007-09-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam, Sam, Darin.

        - Separated what is platform dependant from what is not.  Creating the structure needed for Drosera for Win.

        * Drosera/Debugger.h: Added.
        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::breakpointEditorHTMLCallback):
        (DebuggerDocument::isPausedCallback):
        (DebuggerDocument::pauseCallback):
        (DebuggerDocument::resumeCallback):
        (DebuggerDocument::stepIntoCallback):
        (DebuggerDocument::evaluateScriptCallback):
        (DebuggerDocument::currentFunctionStackCallback):
        (DebuggerDocument::localScopeVariableNamesForCallFrameCallback):
        (DebuggerDocument::valueForScopeVariableNamedCallback):
        (DebuggerDocument::logCallback):
        (DebuggerDocument::breakpointEditorHTML):
        (DebuggerDocument::isPaused):
        (DebuggerDocument::pause):
        (DebuggerDocument::resume):
        (DebuggerDocument::stepInto):
        (DebuggerDocument::evaluateScript):
        (DebuggerDocument::currentFunctionStack):
        (DebuggerDocument::localScopeVariableNamesForCallFrame):
        (DebuggerDocument::valueForScopeVariableNamed):
        (DebuggerDocument::log):
        (DebuggerDocument::toolbarPause):
        (DebuggerDocument::toolbarResume):
        (DebuggerDocument::toolbarStepInto):
        (DebuggerDocument::toolbarStepOver):
        (DebuggerDocument::toolbarStepOut):
        (DebuggerDocument::toolbarShowConsole):
        (DebuggerDocument::toolbarCloseCurrentFile):
        (DebuggerDocument::updateFileSource):
        (DebuggerDocument::didParseScript):
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::exceptionWasRaised):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::toJSArray):
        (DebuggerDocument::callGlobalFunction):
        (DebuggerDocument::callFunctionOnObject):
        (DebuggerDocument::getDroseraJSClass):
        (DebuggerDocument::staticFunctions):
        (DebuggerDocument::logException):
        * Drosera/DebuggerDocument.h:
        (DebuggerDocument::DebuggerDocument):
        * Drosera/ForwardingHeaders: Added.
        * Drosera/ForwardingHeaders/wtf: Added.
        * Drosera/ForwardingHeaders/wtf/Platform.h: Added.
        * Drosera/config.h:
        * Drosera/console.html:
        * Drosera/console.js:
        * Drosera/debugger.js:
        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerDocumentMac.h:
        * Drosera/mac/DebuggerDocumentMac.mm:
        (+[NSString stringOrNilFromWebScriptResult:]):
        (+[DebuggerClientMac log:]):
        (-[DebuggerClientMac initWithServerName:]):
        (-[DebuggerClientMac dealloc]):
        (-[DebuggerClientMac pause]):
        (-[DebuggerClientMac resume]):
        (-[DebuggerClientMac pause:]):
        (-[DebuggerClientMac resume:]):
        (-[DebuggerClientMac stepInto:]):
        (-[DebuggerClientMac stepOver:]):
        (-[DebuggerClientMac stepOut:]):
        (-[DebuggerClientMac showConsole:]):
        (-[DebuggerClientMac closeCurrentFile:]):
        (-[DebuggerClientMac validateUserInterfaceItem:]):
        (-[DebuggerClientMac webView:windowScriptObjectAvailable:]):
        (-[DebuggerClientMac webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerClientMac webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[DebuggerClientMac webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerClientMac webView:exceptionWasRaised:sourceId:line:forWebFrame:]):
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::platformCurrentFunctionStack):
        (DebuggerDocument::platformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:

2007-09-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Register the WebKit DLL on initialization of the DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (initialize):

2007-09-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Fix many layout test failures caused by r25364.
        Set text size to standand size at the begining of each test matching the mac.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (runTest):

2007-09-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Fix for <rdar://problem/5382277>
        Implement eventSender.textZoomIn and eventSender.textZoomOut for windows DRT.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.cpp:
        (textZoomInCallback):
        (textZoomOutCallback):

2007-08-29  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Adam.

        Added case-insensitivity to checks for adding regression tests.

        * Scripts/prepare-ChangeLog:
        (generateFileList):

2007-08-28  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Maciej.

        Ignore files in /resources/ subdirectories when creating a list of added tests.

        * Scripts/prepare-ChangeLog:
        (generateFileList):

2007-08-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by John.

        - Removed Leopard leaks list since all of those radars were fixed.

        * Scripts/run-webkit-tests:

2007-08-27  Adam Roben  <aroben@apple.com>

        Rubberstamped by Mark.

        * Scripts/pdevenv: Pass arguments along to devenv.com.

2007-08-26  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Mark Rowe.

        Update prepare-ChangeLog to generate the datestamp in the correct timezone.

        * Scripts/prepare-ChangeLog:
        (changeLogDate): Added.

2007-08-24  Sam Weinig  <sam@webkit.org>

        Revert r25216 which renamed the COM DOM bindings to use Deprecated prefix.

2007-08-24  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        <rdar://problem/5434593> Deprecate current manually written COM DOM bindings in anticipation of autogeneration

        Rename COM DOM bindings to use Deprecated prefix.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dump):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.cpp:
        (dumpPath):
        (dump):
        (EditingDelegate::shouldBeginEditingInDOMRange):
        (EditingDelegate::shouldEndEditingInDOMRange):
        (EditingDelegate::shouldInsertNode):
        (EditingDelegate::shouldInsertText):
        (EditingDelegate::shouldDeleteDOMRange):
        (EditingDelegate::shouldChangeSelectedDOMRange):
        (EditingDelegate::shouldApplyStyle):
        (EditingDelegate::shouldChangeTypingStyle):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.h:

2007-08-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by John H.

        WebDataSource::response can legitimately have a null response, so we
        must check that case.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.cpp:
        (queueLoadCallback):

2007-08-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin and Adam.

        - DumpRenderTree changes to allow testing for
          http://bugs.webkit.org/show_bug.cgi?id=11756
          REGRESSION: link targeting a frame in another window does not work
          <rdar://problem/5286420>

        Use a frame group name for all WebViews created by DumpRenderTree to
        allow testing of cross-page frame lookup.

        * DumpRenderTree/DumpRenderTree.m:
        (createWebView): Pass group name to -[WebView initWithFrame:frameName:groupName:].
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main): Pass group name to WebView::initWithFrame(RECT, BSTR, BSTR).

2007-08-23  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        Quote the $sslCertificate path in case it contains a space.

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2007-08-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by John and Adam.

        WebDataSource::response can legitimately have a null response, so we
        must check that case.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (dump):

2007-08-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof.

        - Changing the usage to be more clear.

        * Scripts/run-testkjs:

2007-08-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben

        * DumpRenderTree/DumpRenderTree.m:
        (runTest):
        call new +[WebView _setUsesTestModeFocusRingColor:YES] so we get the same focus ring colors
        in layout tests on Tiger and Leopard

2007-08-20  Adam Roben  <aroben@apple.com>

        Put LayoutTests after all other ChangeLogs in commit logs

        We use "~" to sort LayoutTests after all the other ChangeLogs because
        "~" is the last ASCII character (other than "DEL").

        Reviewed by Sam.

        * Scripts/commit-log-editor:

2007-08-20  Adam Roben  <aroben@apple.com>

        Detect that DRT crashed even if a crash dialog is running

        On Windows, when DRT crashes a crash dialog commonly appears. The DRT
        process is still running at this point, so run-webkit-tests wouldn't
        detect that DRT had crashed. We now record the crash in our SIGPIPE
        handler so that we know if DRT crashed even if the crash dialog is up.

        Reviewed by Sam.

        * Scripts/run-webkit-tests:
        (sub catch_pipe): Set the crashed bit.
        (sub openDumpTool): Reset the crashed bit.
        (sub dumpToolDidCrash): Check the crashed bit.

2007-08-20  Adam Roben  <aroben@apple.com>

        Fix Bug 15026: prepare-ChangeLog should list new tests in WebCore/ChangeLog

        http://bugs.webkit.org/show_bug.cgi?id=15026

        Reviewed by David Kilzer and Darin Adler.

        * Scripts/prepare-ChangeLog:
        (sub isModifiedStatus): Split out from isModifiedOrAddedStatus.
        (sub isAddedStatus): Ditto.
        (sub testListForChangeLog): Added.

2007-08-19  Oleg Sukhodolsky  <son.two@gmail.com>

        Reviewed by Mark.

        -fixes http://bugs.webkit.org/show_bug.cgi?id=14632

        * Scripts/webkitdirs.pm:
        qt and gtk ports now explicitly pass debug (or release) mode to qmake.

2007-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - don't look for Apple-style localizable strings in the GTK version of WebKit

        * Scripts/extract-localizable-strings: Add a feature where you can pass in the
        name of subdirectories to skip.
        * Scripts/update-webkit-localizable-strings: Pass WebKit/gtk as a subdirectory
        to skip.

2007-08-17  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_SetWindow):

2007-08-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5379040>
        REGRESSION (Tiger-Leopard): ADOBE: Safari calls NPP_SetWindow with bad values sometimes

        Add a way for the plug-in to dump the width and height when it gets its  NPP_SetWindow call.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_New):
        (NPP_SetWindow):

2007-08-16  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Fix <rdar://problem/5360135> REGRESSION (Leopard only): editing/selection/5354455-1.html is causing subsequent tests to fail

        * DumpRenderTree/DumpRenderTree.m:
        (createWebView):
        Create a DumpRenderTreeWindow instead of a NSWindow, now that a DumpRenderTreeWindow no longer poses as a NSWindow.
        (dumpRenderTree):
        Don't pose as a NSWindow, since when the spelling panel gets created, it creates an NSWindow which ends up creating a DumpRenderTreeWindow.

2007-08-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Added tests for regressions in other components.  In this case we also need to add a skipped list for Tiger since this functionality didn't exist in 10.4.

        * Scripts/run-webkit-tests:

2007-08-15  Timothy Hatcher  <timothy@apple.com>

        Look for the new Xcode 3 preference key (PBXApplicationwideBuildSettings) for the global build locations.
        The value of PBXApplicationwideBuildSettings is a dictionary, so we have to pull the SYMROOT out of it.

        Also pass xcodebuild OBJROOT with the same value as SYMROOT if we fallback to the default WebKitBuild,
        this prevents making "build" directories in each project folder.

        * Scripts/webkitdirs.pm:

2007-08-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Kevin Mccullough.

        Removed special case that didn't belong. (It would allow a global
        initializer to sneak into production builds, which would cause a
        system-wide performance regression on Mac OS X.)

        * Scripts/check-for-global-initializers:

2007-08-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Tim.

        <rdar://problem/5408255> REGRESSION: In Mail, clicking the containing element's UI closebox doesn't delete element

        * DumpRenderTree/EditingDelegate.m:
        (-[EditingDelegate webView:shouldShowDeleteInterfaceForElement:]): Added, return YES
        only for elements with the class needsDeletionUI.

2007-08-14  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14965
          svn-create-patch uses deprecated tail switch

        * Scripts/svn-create-patch: Use 'tail -n +3' instead of 'tail +3'.

2007-08-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Use the cygwin specific Apache config file under cygwin.

        * Scripts/run-webkit-httpd:

2007-08-12  Adam Roben  <aroben@apple.com>

        Generate results for new tests in a more logical location

        New platform-specific tests always have their results generated right
        next to the test. New cross-platform tests will have their results
        generated a) in the cross-platform directory, if they are text-only,
        or b) in the least-specific platform directory, if they are render
        tree dumps.

        Reviewed by Lars.

        * Scripts/run-webkit-tests:

2007-08-12  Adam Roben  <aroben@apple.com>

        Print the actual directory where new results are generated.

        Before, we were printing an unpredictable, context-specific substring
        of the directory.

        Reviewed by Lars.

        * Scripts/run-webkit-tests:

2007-08-12  Adam Roben  <aroben@apple.com>

        Factor some common code into a stripExtension() subroutine.

        Reviewed by Lars.

        * Scripts/run-webkit-tests: Also removed some debugging output.

2007-08-11  Matt Lilek  <pewtermoose@gmail.com>

        Reviewed over and over and over by Adam Roben.

        Bug 14740: Hierarchical layout tests and platform organization
        http://bugs.webkit.org/show_bug.cgi?id=14740

        Add support for platform-specific layout tests and results.

        * Scripts/run-webkit-tests:

2007-08-11  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        Refactored svn-create-path to use a hash-of-hashes data structure to keep
        track of changed files.  In the top level hash, keys are paths to files and
        values are 'fileData' hashes with the following keys and values:

        - isBinary: boolean value (set to true for non-text files like images, etc.)
        - isTestFile: boolean value (set to true if file exists within a known test
          directory)
        - modificationType: string equal to one of 'addition', 'additionWithHistory',
          'modification' or 'deletion'
        - path: string equal to the path to the file (this may seem redundant, but it
          is required to use the second-level 'fileData' hash independent of the
          top-level hash)
        - sourceFile: [optional] string equal to the path of the original file that was
          copied or moved
        - sourceRevision: [optional] string equal to the revision of the original file
          that was copied or moved

        * Scripts/svn-create-patch: Moved call to GetOptions() to its own statement
        that saves the return value in $result, then checks it before printing help.
        Combined sourceFiles, %testFiles, and %binaryFiles into single %diffFiles hash
        and eliminated two for() loops.
        (binarycmp): Added.  Used with sort() to order non-binary files before binary
        files.
        (findBaseUrl): Added.  Extracted from findSourceFileAndRevision().
        (findMimeType): Added optional second argument that takes a revision number.
        (generateDiff): Updated to take one fileData argument instead of three ($file,
        $modificationType, $isBinary).
        (generateFileList): Updated to take one hash ref argument (%diffFiles)
        instead of three (%sourceFiles, %testFiles, %binaryFiles).  Populates
        %diffFiles using paths for keys and fileData hashes for values.
        (manufacturePatchForAdditionWithHistory): Updated to take one fileData
        argument.
        (pathcmp): Updated to take two fileData arguments instead of two strings.
        (testfilecmp): Added.  Used with sort() to order non-test files before test
        files.

2007-08-11  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Give a different message when only the pixel test failed.

2007-08-06  Nigel Tao  <nigeltao@gnome.org>

        Reviewed by David Kilzer.

        Fix bug 14745: WebKitTools/Scripts/run-launcher doesn't speak --gdk
        http://bugs.webkit.org/show_bug.cgi?id=14745

        * Scripts/run-launcher:
        Scrub the "--gdk" out of the command line args, if given, so that
        GdkLauncher doesn't try to interpret it as a URL.

2007-08-03  Adam Roben  <aroben@apple.com>

        Catch SIGPIPE on Windows so that run-webkit-tests doesn't quit when DRT crashes

        Reviewed by Sam.

        * Scripts/run-webkit-tests: Also close ERROR when we finish running the tests.

2007-08-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Recursively dump all frames as text using new
        layoutTestController.dumpChildFramesAsText() function.

        * DumpRenderTree/DumpRenderTree.m:
        (dumpFramesAsText):
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpChildFramesAsText]):
        (runTest):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dump):
        (runTest):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.cpp:
        (dumpChildFramesAsTextCallback):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-08-02  Adam Roben  <aroben@apple.com>

        Fix fast/dom/Window/alert-undefined.html

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.cpp:
        (WaitUntilDoneDelegate::runJavaScriptAlertPanelWithMessage): Don't let
        Windows translate a null BSTR into "(null)"

2007-08-02  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - It would help if I actually called the right function.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::showConsole):

2007-08-02  Adam Roben  <aroben@apple.com>

        Don't delete the stderr file right after creating it

        * Scripts/run-webkit-tests:

2007-08-01  Adam Roben  <aroben@apple.com>

        When DRT crashes, record stderr and restart DRT

        This prevents a DRT crash from causing the next few hundred tests to
        "fail" because DRT is no longer running.

        I also changed the terminology that run-webkit-tests uses in its
        output a bit, so that crashing tests are referred to as "crashes"
        instead of "failures".

        Reviewed by Mark.

        * Scripts/run-webkit-tests: Detect a crash and record it as a tool
        failure.
        (sub openDumpTool): Use open3 so that we can access stderr.
        (sub dumpToolCrashed): Added.
        (sub printFailureMessageForTest): Added.
        (sub htmlForExpectedAndActualResults): Added.
        (sub deleteExpectedAndActualResults): Added.
        (sub recordActualResultsAndDiff): Added.

2007-07-30  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * DumpRenderTree/DumpRenderTree.m: (dump): Fix dumping for documents that include null
        characters. This turned out not to be needed for the test case that motivated me to
        do it, but it's nice to have this for the future.

2007-07-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Link QtLauncher into $$OUTPUT_DIR/bin

        * Scripts/run-launcher:

2007-07-27  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Geoff and Darin.

        Use a subroutine for validating the --skipped switch.

        * Scripts/run-webkit-tests:

2007-07-27  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * Scripts/run-webkit-tests: Remove exception for leaks bug that has been fixed on Leopard.

2007-07-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Correct the path of GdkLauncher and make checkFrameworks work on OSX
        when building the Qt or Gtk+ port.

        * GdkLauncher/GdkLauncher.pro: Don't create an app bundle on OSX
        * Scripts/run-launcher:
        * Scripts/webkitdirs.pm: Don't add WebKit if we build the Qt or Gtk+ port.

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix build-webkit for the Qt build on Windows with msvc/nmake by trying to detect the Qt mkspec and using "nmake" instead of "make" as build command.

        * Scripts/webkitdirs.pm:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        For detecting the SVG support for the Qt build don't do the nm hack. Just always claim SVG support is enabled because that's what it is. The nm hack doesn't work on Windows anyway.

        * Scripts/webkitdirs.pm:

2007-07-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin, Geoff, Sam.

        - <rdar://problem/5150461> Resizing the window larger than the screen causes no resize.

        - Added delegate methods to intercept and fake the frame location so methods like resizeTo and moveTo can change the window location without actually making the window appear on-screen.

        * DumpRenderTree/UIDelegate.h:
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:setFrame:]):
        (-[UIDelegate webViewFrame:]):

2007-07-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Lars wanted this check for Qt but it breaks platform specific layout tests.

        * Scripts/run-webkit-tests:

2007-07-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim, Darin, Oliver.

        - <rdar://problem/5329440> REGRESSION: Clicking links with the feed:// protocol in Safari 3 does nothing
        - Change DRT to be able to intercept the requst to load so it can check if a scheme was allowed or not.

        * ChangeLog:
        * DumpRenderTree/DumpRenderTree.m:
        (createWebView):
        (dumpRenderTree):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setCustomPolicyDelegate:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/FrameLoadDelegate.h:
        * DumpRenderTree/PolicyDelegate.h: Added.
        * DumpRenderTree/PolicyDelegate.m: Added.
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        * DumpRenderTree/ResourceLoadDelegate.h:

2007-07-25  Adam Treat  <treat@kde.org>

        Reviewed by Niko.

        Fix build for some reported systems.

        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:

2007-07-23  Adam Treat  <treat@kde.org>

        Reviewed by Nikolas.

        Fix qt DRT to suppress js popup alerts and log instead.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::WebPage::javaScriptAlert):

2007-07-22  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Make the GdkLauncher use the new WebKit/Gtk API. Change webkitdirs.pm to
        honor --qmakearg for the Gdk/Gtk build as well.

        * GdkLauncher/main.cpp: Switch to the new API
        * Scripts/webkitdirs.pm: Allow to specify --qmakearg, e.g. to control the WEBKIT_{INC,LIB}_DIR

2007-07-22  Darin Adler  <darin@apple.com>

        * DumpRenderTree/TextInputController.m: (-[TextInputController interpretKeyEvents:withSender:]):
        Fix a leak by releasing the array used here.

2007-07-22  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14713
          Script to update iExploder cssproperties.in file based on CSSPropertyNames.in

        Added script to update WebKitTools/iExploder/htdocs/cssproperties.in based on the contents
        of WebCore/css/CSSPropertyNames.in.  Also updated cssproperties.in.

        * Scripts/update-iexploder-cssproperties: Added.
        * iExploder/htdocs/cssproperties.in: Updated by running update-iexploder-cssproperties script.
        Added new CSS3 property section and Moved box-sizing property to it.

2007-07-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=14710

        Add preliminary support for testing Input Method/WebKit behaviour and interaction
        in DRT.  This provides the NSTextInput API which is most of what should be necessary
        to mimic the event sequences Input Methods trigger.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TextInputController.h:
        * DumpRenderTree/TextInputController.m:
        (-[WebHTMLView interpretKeyEvents:]):
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController initWithWebView:]):
        (-[TextInputController dealloc]):
        (-[TextInputController textInput]):
        (-[TextInputController setInputMethodHandler:]):
        (-[TextInputController interpretKeyEvents:withSender:]):

2007-07-20  Adam Roben  <aroben@apple.com>

        * Scripts/commit-log-editor: Small fix to make an all-whitespace log
        message not count as an existing log.

2007-07-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Updated DumpRenderTree for <rdar://problem/5348384> Restore old return
        value behavior of stringByEvaluatingJavaScriptFromString

        * DumpRenderTree/DumpRenderTree.m:
        (testStringByEvaluatingJavaScriptFromString):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-07-19  Adam Roben  <aroben@apple.com>

        Make commit-log-editor work with git

        Reviewed by Sam.

        * Scripts/commit-log-editor: Use VCSUtils and accept a git-style
        commit message template. Also removed the unused $breakPoint variable.

2007-07-19  Adam Roben  <aroben@apple.com>

        Move generally-useful VCS code into a new VCSUtils.pm module

        This is in preparation for making commit-log-editor git-friendly.

        Reviewed by Sam.

        * Scripts/VCSUtils.pm: Added. Code moved here from prepare-ChangeLog.
        * Scripts/prepare-ChangeLog: Use VCSUtils.

2007-07-19  Lars Knoll <lars@trolltech.com>

        Fix a crash on exit when running DRT against a current
        Qt 4.4 snapshot.

        Reviewed by Zack

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

2007-07-18  Adam Roben  <aroben@apple.com>

        Don't try to use an SSL certificate on Windows until <rdar://problem/5345985> is fixed

        Reviewed by Mark.

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2007-07-18  Adam Roben  <aroben@apple.com>

        More git friendliness for prepare-ChangeLog

        The overall change is to remove the use of git-status and replace it
        with git-diff --name-status (which we were already using in the
        --git-commit case).

        This lets us respect directories specified on the command line when
        using git, just as we do for Subversion. It also speeds things up a
        bit, especially in the subdirectory case, as git-status is pretty slow.

        I also fixed some issues where we wouldn't detect copied files and
        would reverse the new filename and the original filename for renamed files.

        Reviewed by Mark.

        * Scripts/prepare-ChangeLog:
        (sub diffFromToString): Added.
        (sub diffCommand): Don't append the paths in the --git-commit case, as
        we should be operating on the entire commit.
        (sub statusCommand): Always use git-diff --name-status, and added an
        extra -C option to git-diff to make it find a few more copied files.
        (sub createPatchCommand): Collapsed the two git cases a bit, and added
        the extra -C option as above.
        (sub generateFileList): Remove the git-status codepath, and recognize
        file copies in the --name-status output.
        (sub isModifiedOrAddedStatus): Collapsed the status codes into one
        dictionary.
        (sub isConflictStatus): Updated the git dictionary.
        (sub statusDescription): Updated the git dictionary.

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        * Scripts/build-drosera: Update where we look for the Xcode project.

2007-07-18  Adam Treat <treat@kde.org>

        Reviewed by bdash.

        Use the old wording for Safari.

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

2007-07-18  Adam Treat <treat@kde.org>

        Reviewed by bdash.

        Add convenience script for launching test apps for Qt and Gdk ports.
        Change the build-webkit script accordingly.

        * Scripts/build-webkit:
        * Scripts/run-launcher: Added.
        * Scripts/webkitdirs.pm:

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Make the Page with the now required InspectorClient.

        * GdkLauncher/main.cpp:
        (main):

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Remove the redundant copies of Makefile.shared and the new Makefile.Drosera.
        Now included the main Makefile.shared and change the SCRIPTS_PATH variable as needed.

        * Drosera/Makefile: Added.
        * Drosera/mac/Makefile:
        * DumpRenderTree/Makefile:
        * Makefile:
        * Makefile.Drosera: Removed.
        * Makefile.shared: Removed.

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        The console log was 20px down from the top for no reason, move it up.

        * Drosera/console.css:

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Use contentDocument to get the source view's iframe document.
        Also adds a null/undefined check for localVariableNames.

        * Drosera/debugger.js:

2007-07-18  Lars Knoll <lars@trolltech.com>

        We really don't want to compare non text only tests to the
        Mac results if we don't have a result for Qt, as this would
        give a failure and not a notification that the test is new.

        Reviewed by Zack

        * Scripts/run-webkit-tests:

2007-07-18  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack & Simon

        Adjust to changed API in QWebFrame

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-07-18  Mark Rowe  <mrowe@apple.com>

        Update path to the Drosera Xcode project now that it has moved into a subdirectory.

        * BuildSlaveSupport/build-launcher-app:

2007-07-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Antti Koivisto.

        Added watchdog timer to waitUntilDone to prevent a run-away test from
        hanging the test harness.

        * DumpRenderTree/DumpRenderTree.m:
        (dump):
        (-[LayoutTestController waitUntilDone]):
        (-[LayoutTestController waitUntilDoneWatchdogFired]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-07-17  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Implemented cross-platform code for functions calling into the JavaScript.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::callAsFunction):
        (DebuggerDocument::pauseJS):
        (DebuggerDocument::resumeJS):
        (DebuggerDocument::stepIntoJS):
        (DebuggerDocument::stepOverJS):
        (DebuggerDocument::stepOutJS):
        (DebuggerDocument::showConsoleJS):
        (DebuggerDocument::closeCurrentFileJS):
        (DebuggerDocument::updateFileSource):
        (DebuggerDocument::didParseScript):
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::exceptionWasRaised):
        * Drosera/DebuggerDocument.h:
        * Drosera/mac/DebuggerDocumentMac.mm:
        (-[DebuggerDocumentMac pause:]):
        (-[DebuggerDocumentMac resume:]):
        (-[DebuggerDocumentMac stepInto:]):
        (-[DebuggerDocumentMac stepOver:]):
        (-[DebuggerDocumentMac stepOut:]):
        (-[DebuggerDocumentMac showConsole:]):
        (-[DebuggerDocumentMac closeCurrentFile:]):
        (-[DebuggerDocumentMac webView:didLoadMainResourceForDataSource:]):
        (-[DebuggerDocumentMac webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[DebuggerDocumentMac webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerDocumentMac webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[DebuggerDocumentMac webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerDocumentMac webView:exceptionWasRaised:sourceId:line:forWebFrame:]):

2007-07-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Continued x-platform modifications.

        * Drosera/win/DebuggerDocumentWin.cpp: Copied from Drosera/win/DebuggerObjectCallbacks.cpp.
        * Drosera/win/DebuggerDocumentWin.h: Copied from Drosera/win/DebuggerObjectCallbacks.h.
        * Drosera/win/DebuggerObjectCallbacks.cpp: Removed.
        * Drosera/win/DebuggerObjectCallbacks.h: Removed.
        * Drosera/win/Drosera.cpp:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * Drosera/win/stdafx.cpp: Removed.
        * Drosera/win/stdafx.h: Removed.

2007-07-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Modified files to use cross-platform code.

        * Drosera/DebuggerDocument.cpp: Added.
        (DebuggerDocument::breakpointEditorHTML):
        (DebuggerDocument::isPaused):
        (DebuggerDocument::pause):
        (DebuggerDocument::resume):
        (DebuggerDocument::stepInto):
        (DebuggerDocument::evaluateScript):
        (DebuggerDocument::currentFunctionStack):
        (DebuggerDocument::localScopeVariableNamesForCallFrame):
        (DebuggerDocument::valueForScopeVariableNamed):
        * Drosera/DebuggerDocument.h: Added.
        (DebuggerDocument::DebuggerDocument):
        * Drosera/config.h: Added.
        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerDocument.h: Removed.
        * Drosera/mac/DebuggerDocument.mm: Removed.
        * Drosera/mac/DebuggerDocumentMac.h: Copied from Drosera/mac/DebuggerDocument.h.
        * Drosera/mac/DebuggerDocumentMac.mm: Copied from Drosera/mac/DebuggerDocument.mm.
        (-[DebuggerDocumentMac initWithServerName:]):
        (-[DebuggerDocumentMac dealloc]):
        (-[DebuggerDocumentMac breakpointEditorHTML]):
        (-[DebuggerDocumentMac isPaused]):
        (-[DebuggerDocumentMac pause]):
        (-[DebuggerDocumentMac resume]):
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * Drosera/win/DebuggerApplication.cpp:
        * Drosera/win/DebuggerObjectCallbacks.cpp:
        (breakpointEditorHTMLCallback):
        (currentFunctionStackCallback):
        (evaluateScript_inCallFrame_Callback):
        (isPausedCallback):
        (localScopeVariableNamesForCallFrame_Callback):
        (pauseCallback):
        (resumeCallback):
        (stepIntoCallback):
        (valueForScopeVariableNamed_inCallFrame_Callback):
        (staticFunctions):
        * Drosera/win/Drosera.cpp:
        * Drosera/win/DroseraPrefix.cpp: Added.
        * Drosera/win/DroseraPrefix.h: Added.

2007-07-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam, Sam and Tim.

        - Moving files to prepare for cross-platform architecture.

        * Drosera/DebuggerApplication.h: Removed.
        * Drosera/DebuggerApplication.m: Removed.
        * Drosera/DebuggerDocument.h: Removed.
        * Drosera/DebuggerDocument.m: Removed.
        * Drosera/Drosera.pch: Removed.
        * Drosera/Drosera.xcodeproj: Removed.
        * Drosera/Drosera.xcodeproj/project.pbxproj: Removed.
        * Drosera/Info.plist: Removed.
        * Drosera/LauncherInfo.plist: Removed.
        * Drosera/Makefile: Removed.
        * Drosera/launcher.m: Removed.
        * Drosera/mac: Added.
        * Drosera/mac/DebuggerApplication.h: Copied from Drosera/DebuggerApplication.h.
        * Drosera/mac/DebuggerApplication.mm: Copied from Drosera/DebuggerApplication.m.
        * Drosera/mac/DebuggerDocument.h: Copied from Drosera/DebuggerDocument.h.
        * Drosera/mac/DebuggerDocument.mm: Copied from Drosera/DebuggerDocument.m.
        * Drosera/mac/Drosera.pch: Copied from Drosera/Drosera.pch.
        * Drosera/mac/Drosera.xcodeproj: Copied from Drosera/Drosera.xcodeproj.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * Drosera/mac/Info.plist: Copied from Drosera/Info.plist.
        * Drosera/mac/LauncherInfo.plist: Copied from Drosera/LauncherInfo.plist.
        * Drosera/mac/Makefile: Copied from Drosera/Makefile.
        * Drosera/mac/launcher.m: Copied from Drosera/launcher.m.
        * Drosera/mac/main.m: Copied from Drosera/main.m.
        * Drosera/main.m: Removed.
        * Makefile:
        * Makefile.Drosera: Added.

2007-07-15  Mark Rowe  <mrowe@apple.com>

        * Scripts/generate-coverage-data: Don't fail if WebKitBuild directory does not exist.

2007-07-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Add support for running SSL tests over HTTPS.

        * DumpRenderTree/DumpRenderTree.m:
        (runTest):
        * DumpRenderTree/FrameLoadDelegate.m:
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2007-07-13  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Darin Adler.

        Added support for -h|--help argument and verify that all command line arguments parse
        correctly.

        * Scripts/run-webkit-httpd:

2007-07-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Ada.

        Remove leak suppression for xmlDocPtrForString now that <rdar://problem/5329877> is fixed.

        * Scripts/run-webkit-tests:

2007-07-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Made the leaks tests pass on Leopard.

        * Scripts/run-webkit-tests: Added some leaks to exclude on Leopard.
        * Scripts/run-leaks: Updated parser for slight change in text output.

2007-07-11  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Maciej.

        Update the iExploder list of CSS properties after box-sizing was renamed to
        -webkit-box-sizing in r21026 to fix <rdar://problem/4667227>.

        * iExploder/htdocs/cssproperties.in:  Added -webkit-box-sizing.  Both box-sizing and
        -moz-box-sizing remain.

2007-07-10  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Add an ignore item for a leak in Tiger's
        Foundation's multipart/mixed-replace support -- I already verified that
        the bug has been fixed.

2007-07-10  Alice Liu  <alice.liu@apple.com>

        rubber stamped by Maciej.

        fixed <rdar://5137972> editing/selection/editable-links.html fails on Windows

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (initializePreferences):
        set editable link behavior to match Mac DRT.

2007-07-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.

        Ignore Page.o in debug builds because it now has a static PageCounter
        object.

        * Scripts/check-for-global-initializers:

2007-07-09  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Moved leaks from Tiger that are marked as fixed in Leopard to a Tiger-only section.

2007-07-09  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben.

        setting DOM Paste Allowed Pref

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (initializePreferences):

2007-07-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam, Sam, and Ada.

        - Inital checkin of Drosera for Win.  This isn't pretty and doesn't connect to Safari but debug builds and runs.

        * Drosera/Images/Drosera.ico: Added.
        * Drosera/Images/small.ico: Added.
        * Drosera/win: Added.
        * Drosera/win/BaseDelegate.h: Added.
        (BaseDelegate::QueryInterface):
        (BaseDelegate::didFinishLoadForFrame):
        (BaseDelegate::windowScriptObjectAvailable):
        (BaseDelegate::didStartProvisionalLoadForFrame):
        (BaseDelegate::didReceiveServerRedirectForProvisionalLoadForFrame):
        (BaseDelegate::didFailProvisionalLoadWithError):
        (BaseDelegate::didCommitLoadForFrame):
        (BaseDelegate::didReceiveTitle):
        (BaseDelegate::didReceiveIcon):
        (BaseDelegate::didFailLoadWithError):
        (BaseDelegate::didChangeLocationWithinPageForFrame):
        (BaseDelegate::willPerformClientRedirectToURL):
        (BaseDelegate::didCancelClientRedirectForFrame):
        (BaseDelegate::willCloseFrame):
        (BaseDelegate::createWebViewWithRequest):
        (BaseDelegate::webViewShow):
        (BaseDelegate::webViewClose):
        (BaseDelegate::webViewFocus):
        (BaseDelegate::webViewUnfocus):
        (BaseDelegate::webViewFirstResponder):
        (BaseDelegate::makeFirstResponder):
        (BaseDelegate::setStatusText):
        (BaseDelegate::webViewStatusText):
        (BaseDelegate::webViewAreToolbarsVisible):
        (BaseDelegate::setToolbarsVisible):
        (BaseDelegate::webViewIsStatusBarVisible):
        (BaseDelegate::setStatusBarVisible):
        (BaseDelegate::webViewIsResizable):
        (BaseDelegate::setResizable):
        (BaseDelegate::setFrame):
        (BaseDelegate::webViewFrame):
        (BaseDelegate::setContentRect):
        (BaseDelegate::webViewContentRect):
        (BaseDelegate::runJavaScriptAlertPanelWithMessage):
        (BaseDelegate::runJavaScriptConfirmPanelWithMessage):
        (BaseDelegate::runJavaScriptTextInputPanelWithPrompt):
        (BaseDelegate::runBeforeUnloadConfirmPanelWithMessage):
        (BaseDelegate::runOpenPanelForFileButtonWithResultListener):
        (BaseDelegate::mouseDidMoveOverElement):
        (BaseDelegate::contextMenuItemsForElement):
        (BaseDelegate::validateUserInterfaceItem):
        (BaseDelegate::shouldPerformAction):
        (BaseDelegate::dragDestinationActionMaskForDraggingInfo):
        (BaseDelegate::willPerformDragDestinationAction):
        (BaseDelegate::dragSourceActionMaskForPoint):
        (BaseDelegate::willPerformDragSourceAction):
        (BaseDelegate::contextMenuItemSelected):
        (BaseDelegate::hasCustomMenuImplementation):
        (BaseDelegate::trackCustomPopupMenu):
        (BaseDelegate::measureCustomMenuItem):
        (BaseDelegate::drawCustomMenuItem):
        (BaseDelegate::addCustomMenuDrawingData):
        (BaseDelegate::cleanUpCustomMenuDrawingData):
        (BaseDelegate::canTakeFocus):
        (BaseDelegate::takeFocus):
        (BaseDelegate::registerUndoWithTarget):
        (BaseDelegate::removeAllActionsWithTarget):
        (BaseDelegate::setActionTitle):
        (BaseDelegate::undo):
        (BaseDelegate::redo):
        (BaseDelegate::canUndo):
        (BaseDelegate::canRedo):
        * Drosera/win/DebuggerApplication.cpp: Added.
        (DebuggerApplication::serverLoaded):
        (DebuggerApplication::serverUnloaded):
        (DebuggerApplication::attach):
        (DebuggerApplication::numberOfRowsInTableView):
        (DebuggerApplication::tableView):
        * Drosera/win/DebuggerApplication.h: Added.
        (DebuggerApplication::DebuggerApplication):
        (DebuggerApplication::knownServers):
        * Drosera/win/DebuggerObjectCallbacks.cpp: Added.
        (breakpointEditorHTMLCallback):
        (currentFunctionStackCallback):
        (doubleClickMillisecondsCallback):
        (evaluateScript_inCallFrame_Callback):
        (isPausedCallback):
        (localScopeVariableNamesForCallFrame_Callback):
        (pauseCallback):
        (resumeCallback):
        (stepIntoCallback):
        (valueForScopeVariableNamed_inCallFrame_Callback):
        (staticFunctions):
        * Drosera/win/DebuggerObjectCallbacks.h: Added.
        * Drosera/win/Drosera.cpp: Added.
        (_tWinMain):
        (RegisterDroseraClass):
        (DroseraWndProc):
        (About):
        (Attach):
        (Drosera::Drosera):
        (Drosera::initUI):
        (Drosera::QueryInterface):
        (Drosera::AddRef):
        (Drosera::Release):
        (Drosera::didFinishLoadForFrame):
        (getDroseraJSClass):
        (Drosera::windowScriptObjectAvailable):
        (Drosera::webViewClose):
        (Drosera::validateUserInterfaceItem):
        (Drosera::runJavaScriptAlertPanelWithMessage):
        (Drosera::onSize):
        * Drosera/win/Drosera.h: Added.
        (Drosera::webViewLoaded):
        * Drosera/win/Drosera.vcproj: Added.
        * Drosera/win/Drosera.vcproj/Drosera.rc: Added.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Added.
        * Drosera/win/Drosera.vcproj/debug.vsprops: Added.
        * Drosera/win/Drosera.vcproj/release.vsprops: Added.
        * Drosera/win/HelperFunctions.h: Added.
        (CFStringToBSTR):
        * Drosera/win/Info.plist: Added.
        * Drosera/win/resource.h: Added.
        * Drosera/win/stdafx.cpp: Added.
        * Drosera/win/stdafx.h: Added.

2007-07-09  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame from a QFrame to a pure QObject to eliminate all
        traces of widgets.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/4954319>
        Acrobat 7 / Safari crash: CrashTracer: 99 crashes in Safari at
        com.apple.WebCore: WebCore::NetscapePlugInStreamLoader::isDone const + 0

        If the src url is "data:application/x-webkit-test-netscape,returnerrorfromnewstream",
        return an error from NPP_NewStream.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_New):
        (NPP_NewStream):

2007-07-08  Mark Rowe  <mrowe@apple.com>

        Change name from WebKit/Qt to WebKit.

        * CodeCoverage/regenerate-coverage-display:

2007-07-08  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=14209
        DRT should be able to deal with text zoom

        Allow increasing/decreasing text zoom using eventSender.

        * DumpRenderTree/DumpRenderTree.m:
        (runTest):
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController initialize]):
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (-[EventSendingController textZoomIn]):
        (-[EventSendingController textZoomOut]):

2007-07-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        * DumpRenderTree/DumpRenderTree.m:
        (convertWebResourceResponseToDictionary): Fix leak of two NSMutableString's introduced in r24076.

2007-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Kilzer.

        <rdar://problem/5313502>
        Many webarchive tests fail due to different NSURLResponse serialization on Leopard

        Don't dump the serialized form of NSURLResponse. Instead, create a dictionary with the
        response's attributes. Also change the JavaScript MIME type to be "text/javascript".

        * DumpRenderTree/DumpRenderTree.m:
        (convertMIMEType):
        (convertWebResourceDataToString):
        (convertWebResourceResponseToDictionary):
        (serializeWebArchiveToXML):

2007-07-06  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Oliver.

        Initialize the NSMutableAttributedString directly instead of creating
        a NSAttributedString first.

        * DumpRenderTree/TextInputController.m:
        (-[TextInputController attributedStringWithString:]):

2007-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Kilzer.

        Replace "Apple Computer" with "Apple" in the DTD declaration.

        * DumpRenderTree/DumpRenderTree.m:
        (serializeWebArchiveToXML):

2007-07-06  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Adjust for conversion of QWebFrame to a QFrame from a scroll area.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-07-06  George Staikos  <staikos@kde.org>

        Reviewed by Anders.

        Allow passing of additional arguments to qmake with --qmakearg=

        * Scripts/webkitdirs.pm:

2007-07-05  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Add --qt and --qmake= to force Qt even when QTDIR isn't present and to
        give a path to a specific qmake binary.  Both are optional.

        * Scripts/webkitdirs.pm:

2007-07-05  Adam Roben  <aroben@apple.com>

        Warn about tests in the Skipped file that succeeded

        * Scripts/run-webkit-tests:

2007-07-05  Adam Roben  <aroben@apple.com>

        Removed unused install-win-extras script

        Rubberstamped by Mark.

        * Scripts/install-win-extras: Removed.

2007-07-05  Adam Roben  <aroben@apple.com>

        Show the test's extension in the results page

        * Scripts/run-webkit-tests:

2007-07-05  Adam Roben  <aroben@apple.com>

        Add more options for controlling the interpretation of the Skipped file

        Reviewed by Mark.

        * Scripts/run-webkit-tests:

2007-07-04  Adam Roben  <aroben@apple.com>

        Add --skipped-only option to run-webkit-tests

        When this option is specified, only those tests listed in the Skipped
        file are run.

        Reviewed by Mark.

        * Scripts/run-webkit-tests:

2007-07-04  Adam Roben  <aroben@apple.com>

        Clean up/alphabetize the run-webkit-tests help message

        * Scripts/run-webkit-tests:

2007-07-04  Adam Roben  <aroben@apple.com>

        Enable a Leopard-specific Skipped list.

        Reviewed by Mark.

        * Scripts/run-webkit-tests: Check for Leopard.
        * Scripts/webkitdirs.pm: Added isTiger/isLeopard.

2007-07-03  Adam Roben  <aroben@apple.com>

        Fixed update-webkit-localizable-strings to work with new extract-localizable-strings

        Got rid of extract-webkit-localizable-strings because it was trying to
        do update-webkit-localizable-strings' job.

        Rubberstamped by Darin Adler.

        * Scripts/extract-webkit-localizable-strings: Removed.
        * Scripts/update-webkit-localizable-strings: Renamed from
        extract-localizable-strings.

2007-07-03  Adam Roben  <aroben@apple.com>

        Modify scripts to keep Mac/Windows localized strings in sync

        extract-webkit-localizable-strings now handles extracting strings from
        both the Mac and Windows WebKit ports and updating their respective
        Localizable.strings files. extract-localizable-strings is now really a
        piece of plumbing rather than a top-level tool.

        Reviewed by Darin and Anders.

        * Scripts/extract-localizable-strings: Changed to handle multiple
        directories.
        * Scripts/extract-webkit-localizable-strings: Added.

2007-07-03  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Extended DumpRenderTree to test encoding and decoding host names.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Added cases for encodeHostName and decodeHostName.
        (+[LayoutTestController webScriptNameForSelector:]): ditto.
        (-[LayoutTestController decodeHostName:]): Added.
        (-[LayoutTestController encodeHostName:]): Added.

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Eleventh round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        Add functions to test long long and unsigned long long.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController objCLongLongRoundTrip:]):
        (-[LayoutTestController objCUnsignedLongLongRoundTrip:]):

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

        Fix some paths to make http tests work again on Windows

        Rubberstamped by Sam.

        * Scripts/run-webkit-tests:

2007-06-28  Stephanie  <slewis@apple.com>

        Reviewed by Adam,

        Allow tests to use pre-built roots instead of building the tests.

        * Scripts/run-javascriptcore-tests: added --root option
        * Scripts/run-webkit-tests: added --root option
        * Scripts/webkitdirs.pm: added support for using a root

2007-06-25  Adam Roben  <aroben@apple.com>

        Fix Bug 14405: LayoutTestResults/qt should be in LayoutTests/qt
        http://bugs.webkit.org/show_bug.cgi?id=14405

        Reviewed by Anders.

        * Scripts/run-webkit-tests:

2007-06-25  Adam Roben  <aroben@apple.com>

        Enable running the regression tests on Windows.

        These changes were developed alongside the Windows WebKit port and
        have been well tested.

        Rubberstamped by Sam.

        * Scripts/run-webkit-tests:

2007-06-25  Adam Roben  <aroben@apple.com>

        Fix Bug 14403: prepare-ChangeLog --git-commit doesn't support --diff
        http://bugs.webkit.org/show_bug.cgi?id=14403

        Reviewed by Mark Rowe.

        * Scripts/prepare-ChangeLog: Don't spew to stdout, use stderr instead.
        (sub createPatchCommand): Generate a correct diff in the $gitCommit
        case.

2007-06-25  Adam Roben  <aroben@apple.com>

        Land pdevenv and supporting scripts/programs

        pdevenv is a script that will open an instance of Visual Studio that
        can compile multiple files in parallel, similar to make -jN. It uses
        the following scripts/programs to accomplish this:

        CLWrapper: Compiles to vcbin/cl.exe. Calls Scripts/parallelcl.

        parallelcl: Actually performs the parallel compilation by forking
        multiple instances of the Microsoft-supplied cl.exe.

        MIDLWrapper: Compiles to vcbin/midl.exe. Calls through to the
        Microsoft-supplied midl.exe. This avoids having to invoke perl for
        every invocation of midl.exe, which would be quite slow.

        Rubberstamped by Sam.

        * CLWrapper/CLWrapper.cpp: Added.
        (wmain):
        * CLWrapper/CLWrapper.sln: Added.
        * CLWrapper/CLWrapper.vcproj: Added.
        * MIDLWrapper/MIDLWrapper.cpp: Added.
        (wmain):
        * MIDLWrapper/MIDLWrapper.sln: Added.
        * MIDLWrapper/MIDLWrapper.vcproj: Added.
        * Scripts/parallelcl: Added.
        * Scripts/pdevenv: Added.
        * vcbin/cl.exe: Added.
        * vcbin/midl.exe: Added.

2007-06-23  Adam Roben  <aroben@apple.com>

        Land num-cpus for the Windows build.

        Reviewed by Mark Rowe.

        * Scripts/num-cpus: Added.

2007-06-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Adam Roben.

        Added support for populating ChangeLog entries from given git commits
        using --git-commit=<commitish> and --git-reviewer=<name>.

        * Scripts/prepare-ChangeLog:

2007-06-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders.

        <rdar://problem/5228168> Leopard regression test failures: fast/applescript

        There were some changes in Leopard that made our test output inconsistent with Tiger.

        NSAppleEventDescriptor no longer returns a stringValue for typeType descriptors
        on Leopard, so output our own readable string for typeType descriptors.

        NSArray's description also changed on Leopard to output more whitespace, so
        make our own string representation for typeAEList descriptors. This requires
        a special case typeUnicodeText too, so the output is a quoted string.

        * DumpRenderTree/AppleScriptController.m:
        (convertAEDescToObject):

2007-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Don't dump didFirstLayout callbacks, they happen intermittently.

        * DumpRenderTree/FrameLoadDelegate.m:

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        look for the Qt library in the installed location

        * Scripts/webkitdirs.pm:

2007-06-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adele Peterson, Oliver Hunt, Anders Carlsson.

        Added tests for stringByEvaluatingJavaScriptFromString.

        * DumpRenderTree/DumpRenderTree.m:
        (testStringByEvaluatingJavaScriptFromString):
        (dumpRenderTree):

2007-06-19  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe.

        Support applications with spaces or special characters in their names

        * Scripts/run-webkit-app:

2007-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Assert that the frame has a dataSource.

        * DumpRenderTree/FrameLoadDelegate.m:
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):

2007-06-18  Adam Treat <adam@staikos.net>

        Reviewed by George.

        Reflect the library name change.

        * Scripts/webkitdirs.pm:

2007-06-18  Jake Helfert  <jake@jakeonthenet.com>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14154
          Spinneret doesn't build against the new Win32 port.

        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
            -Changed IWebViewExt to IWebViewPrivate
            -Changed Co[Un]initialize to Ole[Un]initialize because WebKit now calls
             the WIN32 function RegisterDragDrop which requires the Ole* calls.
        * Spinneret/Spinneret/Spinneret.h:
        (SpinneretWebHost::didReceiveIcon): Updated method signature.
        (SpinneretWebHost::willPerformClientRedirectToURL): Updated method signature.
        (SpinneretWebHost::windowScriptObjectAvailable): Updated method signature.

2007-06-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady.

        Update set of files to download for cygwin to include
        diffutils and regenerate the zip file.  This should fix
        an issue on vista where svn-create-patch doesn't work.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

2007-06-14  Mark Rowe  <mrowe@apple.com>

        Update script to match new nightly.webkit.org infrastructure.

        * BuildSlaveSupport/build-launcher-dmg:  Upload to the live web server, not the caching proxy.  Let the server know it's a Mac build.

2007-06-12  Adam Roben  <aroben@apple.com>

        Land CygwinDownloader.

        Rubberstamped by Hyatt.

        * CygwinDownloader/cygwin-downloader.py: Added.
        * CygwinDownloader/cygwin-downloader.zip: Added.
        * CygwinDownloader/make-zip.sh: Added.
        * CygwinDownloader/setup.py: Added.

2007-06-06  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Mark Rowe.

        Fixes Bug 13996: http://bugs.webkit.org/show_bug.cgi?id=13996
        [Drosera] Items in the file list don't get un-highlighted when
        files are selected from the file drop-down

        * Drosera/debugger.js: currentFile was getting modified before file in the file
        browser got un-highlighted. Changed the order in which the functions execute.

2007-06-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=13988
        Bug 13988: Colon in file path crashes WebKit Nightly

        The WebKit launcher makes use of two `dyld' variables to coerce Safari into running with
        the bundled WebKit framework.  Both of these variables are interpreted as containing a
        colon-delimited list of paths.  There is no escaping mechanism defined, so if we detect
        a path with a colon in it we need to bail out to prevent `dyld' from throwing an error
        when we execute Safari.

        * WebKitLauncher/main.m:
        (main):

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

        Reviewed by Anders.

        * WebKitLauncher/Info.plist: Update CFBundleGetInfoString, and add CFBundleShortVersionString.

2007-05-30  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Brady.

        Enable logging in the Gdk port.
        http://bugs.webkit.org/show_bug.cgi?id=13936

        * GdkLauncher/main.cpp:
        (main):

2007-05-29  Holger Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        Create a GtkLayout and pass it to the FrameView/ScrollView. Embed the GtkLayout into a GtkScrolledWindow
        to provide ScrollBars for the FrameView.

        * GdkLauncher/main.cpp:
        (registerRenderingAreaEvents):
        (layout_realize_callback): Only after realization we can access the GtkLayout::bin_window
        (frameResizeCallback): Inform the ScrollView about its new viewport size, and ask the FrameView to adjust
        (main):

2007-05-29  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13901
          run-pageloadtest does not obey testName on command-line

        * Scripts/run-pageloadtest: Grab $testName from the command-line if it is present,
        otherwise default to "svg".  Added dummy check to make sure $testName.pltsuite
        exists.

2007-05-29  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13900
          svnStatus($) subroutine in svn-[un]apply does not work properly with directories

        This patch also fixes an instance of the "broken pipe" warning that happened when
        a directory contained modified files that were not part of an applied or unapplied
        patch.

        * Scripts/svn-apply:
        (svnStatus($)): If we're trying to get status on a directory (instead of a file),
        make sure we actually get the directory's status (if it has one), not the first
        file's status reported within the directory.  Fix "broken pipe" warnings by
        reading all of the output from the SVN filehandle before closing it.
        * Scripts/svn-unapply:
        (svnStatus($)): Ditto.

2007-05-28  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10342
          prepare-ChangeLog only shows removed files but not added files when files are moved
        - fix prepare-ChangeLog part of http://bugs.webkit.org/show_bug.cgi?id=13408
          prepare-ChangeLog and svn-create-patch don't show replaced files

        Switched method used to find list of changed files from "diff" to "status".  This
        makes added and replaced files with history appear in the changed file list for svn.
        Added check for "+" in output from the svn status command to detect file history, and
        handle it in the generateFileList(\@\@\%) and in statusDescription($$) subroutines.

        * Scripts/prepare-ChangeLog:
        (diffCommand(@)): Switched argument from hash ref to array to match statusCommand(@).
        (statusCommand(@)): Switched argument from array ref to array.  Necessary to use
        the output of "keys $paths" without creating a temporary array variable.
        (findOriginalFileFromSvn($)): Added.  Based on findSourceFileAndRevision($)
        subroutine in svn-create-patch.
        (generateFileList(\@\@\%)): Added.  Extracted from main body of script.  Runs status
        command using command-line arguments instead of list of changed files from the diff
        command.  Changed svn regex to only accept file statuses that we know how to handle.
        Identify original file when an added/replaced status with history is present.
        (statusDescription($$)): Handled added/replaced statuses with history.  Added
        fall-through return statement.

2007-05-28  Holger Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        Add scripts and data to generate a coverage data for WebKit.

        * CodeCoverage/README: Added.
        * CodeCoverage/amber.png: Added.
        * CodeCoverage/cov.py: Added.
        * CodeCoverage/emerald.png: Added.
        * CodeCoverage/gcov.css: Added.
        * CodeCoverage/glass.png: Added.
        * CodeCoverage/regenerate-coverage-display: Added.
        * CodeCoverage/ruby.png: Added.
        * CodeCoverage/run-generate-coverage-data: Added.
        * CodeCoverage/snow.png: Added.
        * Scripts/build-webkit: Add --coverage by Niko
        * Scripts/check-for-global-initializers: Skip the check on coverage builds
        * Scripts/generate-coverage-data: Added.
        * Scripts/run-javascriptcore-tests: Add --coverage by Niko

2007-05-29  Mark Rowe  <mrowe@apple.com>

        Build fix after r21745.

        * Scripts/check-for-global-initializers: Skip CachedPage.o as it now has a global initializer in debug builds.

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * DumpRenderTree/DumpRenderTree.m:
        * DumpRenderTree/FrameLoadDelegate.m:

2007-05-25  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        For the keyDown binding use QStringList instead of QList<QString>. The former is a default
        registered metatype. Also print out critical messages in dumprendertree's qt message handler.

        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:

2007-05-20  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13565
          Change svn-create-patch to put LayoutTests in the end

        In addition to reordering test files under the LayoutTests directory so that they
        appear after source code files, this patch fixes an issue with prepare-ChangeLog
        if the first argument passed to it is a file name instead of a directory name.

        * Scripts/prepare-ChangeLog:
        (isGIT()): If first value in @dirs array is a file, use dirname() to get the directory.
        (isSVN()): Ditto.
        * Scripts/svn-create-patch:
        (generateFileList($\%\%\%)): Differentiate test files in the LayoutTests directory from
        source code files.

2007-05-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Force LC_ALL to C when parsing locale-specific strings in 'svn' output.

        * Scripts/svn-create-patch:
        * Scripts/webkitdirs.pm:

2007-05-18  Holger Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        * GdkLauncher/main.cpp: Call setGtkWidget
        (main):

2007-05-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        * GdkLauncher/main.cpp:
        (main): Call Frame::init to catch up with Maciej's changes.
        * Scripts/run-javascriptcore-tests: Remove --gdk from the command line
        passed to the helper scripts.

2007-05-16  Brady Eidson  <beidson@apple.com>

        Build fix for some dev configurations

        * DumpRenderTree/DumpRenderTree.m:

2007-05-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Justin.

        - created a new mechanism to log FrameLoadDelegate callbacks in directories named "loading"

        The reason for doing things in this slightly odd way is to make sure we don't miss the load delegates
        that happen before the load commits.

        Basically I moved WaitUntilDoneDelegate into a separate file (FrameLoadDelegate.m) and added
        optional logging for every FrameLoadDelegate callback, including SPI callbacks.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (createWebView):
        (dumpRenderTree):
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController clearBackForwardList]):
        (-[LayoutTestController setUseDashboardCompatibilityMode:]):
        (-[LayoutTestController dumpFrameLoadCallbacks]):
        (-[LayoutTestController setWindowIsKey:]):
        (-[LayoutTestController setMainFrameIsFirstResponder:]):
        (-[LayoutTestController _doLoad:target:]):
        (-[LayoutTestController _doBackOrForwardNavigation:]):
        (-[LayoutTestController queueReload]):
        (-[LayoutTestController queueScript:]):
        (-[LayoutTestController queueLoad:target:]):
        (-[LayoutTestController setAcceptsEditing:]):
        (-[LayoutTestController setTabKeyCyclesThroughElements:]):
        (shouldLogFrameLoadDelegates):
        (runTest):
        (displayWebView):
        (+[DumpRenderTreeEvent mouseLocation]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeDraggingInfo.m:
        (-[DumpRenderTreeDraggingInfo draggingDestinationWindow]):
        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController contextClick]):
        * DumpRenderTree/FrameLoadDelegate.h: Added.
        * DumpRenderTree/FrameLoadDelegate.m: Added.
        (-[WebFrame _drt_descriptionSuitableForTestResult]):
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didReceiveIcon:forFrame:]):
        (-[FrameLoadDelegate webView:didChangeLocationWithinPageForFrame:]):
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):
        (-[FrameLoadDelegate webView:didCancelClientRedirectForFrame:]):
        (-[FrameLoadDelegate webView:willCloseFrame:]):
        (-[FrameLoadDelegate webView:didFirstLayoutInFrame:]):
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):
        (-[FrameLoadDelegate webView:didHandleOnloadEventsForFrame:]):
        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[NSURL _drt_descriptionSuitableForTestResult]):
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webViewFocus:]):

2007-05-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin and Geoff.

        - rdar://problem/4981886
        - Now windows opened by the DOM can be closed by JS.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController windowCount]):

2007-05-15  Adam Roben  <aroben@apple.com>

        Reviewed by David Kilzer.

        http://bugs.webkit.org/show_bug.cgi?id=13732
        prepare-ChangeLog should work with git

        * Scripts/prepare-ChangeLog: Added support for Git.

2007-05-15  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add the EventSender object to DRT. Currently it implements
        mouseDown, mouseUp and mouseMoveTo.

        Make run-webkit-tests --strict work somewhat better for form elements.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (HackWebFrame::mousePressEvent):
        (HackWebFrame::mouseReleaseEvent):
        (EventSender::EventSender):
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::leapForward):
        (EventSender::keyDown):
        (EventSender::frameUnderMouse):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:
        * Scripts/run-webkit-tests:

2007-05-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        Add new api to DRT to allow us to test a file being dragged
        onto <input type="file">

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController addFileToPasteboardOnDrag]):
        (runTest):
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):

2007-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Bug 13656: [gdk] Resize the drawing area of the GdkLauncher
        http://bugs.webkit.org/show_bug.cgi?id=13656

        * GdkLauncher/main.cpp: Handle resizing the drawing area
        (frameResizeCallback):
        (main):

2007-05-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Updated test now that +[WebScriptObject scriptObjectForJSObject:frame:]
        is gone.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didClearWindowObject:forFrame:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController testWrapperRoundTripping:]):

2007-05-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - don't clear events whenever an EventSendingController goes away, only do it at predictable times,
        since destroying a subframe can make one go away

        (Discovered while fixing:

        <rdar://problem/5063277> blank screen after login to Citibank Online (accessing document before frame starts loading cancels load)
        <rdar://problem/5159541> REGRESSION (r20972): Wall Street Journal pages replaced by advertisements (13465)

        * DumpRenderTree/DumpRenderTree.m:
        (runTest): explicitly clear saved events after every page load
        * DumpRenderTree/EventSendingController.h:
        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController dealloc]): don't clear saved events here...
        (+[EventSendingController clearSavedEvents]): do it here
        * Scripts/check-for-global-initializers:

2007-05-10  Mark Rowe  <mrowe@apple.com>

        Build fix for DumpRenderTree. Enable Objective-C exceptions in Release configuration.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-05-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added support for testing ObjC/JS type bridging.

        Added ASSERT that -JSObject returns nil when the underlying JSObject
        is no longer GC protected.

        * DumpRenderTree/DumpRenderTree.m:
        (returnThisCallback):
        (returnThisClass):
        (-[WaitUntilDoneDelegate webView:didClearWindowObject:forFrame:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController accessStoredWebScriptObject]):
        (-[LayoutTestController testWrapperRoundTripping]):
        (-[LayoutTestController objCClassNameOf:]):
        (-[LayoutTestController objCObjectOfClass:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-05-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Simon

        Move setting of the DPI value a few lines up. Should fix
        the last two remaining failures in the layout tests.

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

2007-05-09  Holger Freyther <zecke@selfish.org>

        Reviewed by Mark Rowe.

        * GdkLauncher/main.cpp: Always include config.h.

2007-05-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Added support for testing ObjC object identity.

        Added ASSERT to verify that you can round-trip the object passed to you
        in -didClearWindowObject:forFrame:.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didClearWindowObject:forFrame:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController accessStoredWebScriptObject]):
        (-[LayoutTestController objCIdentityIsEqual::]):

2007-05-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added tests for new APIs: -[WebFrame windowObject], -[WebFrame globalContext],
        and - (void)webView:(WebView *)webView didClearWindowObject:(WebScriptObject *)windowObject
        forFrame:(WebFrame *)frame, in the form of ASSERTs.

        * DumpRenderTree/DumpRenderTree.m:
        (runJavaScriptThread): Fixed quote mismatch that prepare-changelog likes
        to complain about.

        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        (-[WaitUntilDoneDelegate webView:didClearWindowObject:forFrame:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-05-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Dump JavaScript console messages as well. Also requires a slight
        change in run-webkit-tests, so we still correctly differentiate
        between text only and rendertree tests.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::javaScriptConsoleMessage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::dump):
        * Scripts/run-webkit-tests:

2007-05-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Specify what the serif, sans-serif and monospace aliases
        should map to and explicitly select the Gui style of
        DRT to be plastique.

        Fixes most of the test failures still seen on the build bot.

        * DumpRenderTree/DumpRenderTree.qtproj/fonts.conf:
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2007-05-07  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix the default font to 9pt Sans Serif.

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

2007-05-04  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Revert on line of the last commit. We still want to keep the RPATH
        support in the pro file.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-05-04  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Remove the old bitmap fonts I tried using to get reliable results from
        DumpRenderTree on X11. Instead we now use the URW Type1 fonts from
        ghostscript. I've added a mirror to simply check them out at
        svn://labs.trolltech.com/svn/webkit/testfonts.

        Fixed DumpRenderTree to make sure these fonts are the only ones we use
        on X11 and added a fonts.conf file to get a well defined fontconfig
        configuration.

        Made sure run-webkit-tests forwards the WEBKIT_TESTFONTS environment variable
        I use to find the fonts to DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:
        * DumpRenderTree/DumpRenderTree.qtproj/fontoverload.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/COPYING: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierBold.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierBoldOblique.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierMedium.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierMediumOblique.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaBold.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaBoldOblique.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaMedium.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaMediumOblique.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/SymbolMedium.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesBold.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesBoldItalic.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesMedium.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesMediumItalic.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts.conf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):
        * Scripts/run-webkit-tests:

2007-05-03  Holger Freyther <freyther@kde.org>

        Reviewed by Zack, landed by Simon.
        This is bugzilla bug 13499.

        * GdkLauncher/GdkLauncher.pro: Build the GdkLauncher using qmake
        * GdkLauncher/main.cpp: We don't have a config.h with the qmake build
        * Scripts/build-webkit: Add --gdk for the Gdk port
        * Scripts/webkitdirs.pm: Add helper methods for the Gdk port

2007-05-03  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Add AllInOneFile.o to the ignore list, since it includes files
        in the ignore list.

        * Scripts/check-for-global-initializers:

2007-05-02  Holger Freyther <freyther@kde.org>

        Reviewed by Mark Rowe.

        * Scripts/build-webkit: Remove the CMake call.
        * Scripts/webkitdirs.pm: Remove isQtWithQMake as QMake is now the only
        buildsystem for the Qt port.

2007-04-27  Kevin McCullough  <kmccullough@apple.com>

        - Removed debugging statements and took out the removal of the deletion
          of the symlink.  This is because multiple instances of run-webkit-tests
          can be running at the same time.
        * Scripts/run-webkit-tests:

2007-04-27  Adam Roben <aroben@apple.com>

        Reviewed by Maciej.

        Cleaned up prepare-ChangeLog

        * Scripts/prepare-ChangeLog: No code changes, but style now matches
        the prevalent style of our perl scripts.

2007-04-27  Nazar Kulyk  <schamane@myeburg.net>

        Reviewed by Mark Rowe.

        Basic auto-correction of user-entered URLs.

        * GdkLauncher/main.cpp:
        (autocorrectURL):
        (goToURLBarText):
        (main):

2007-04-28  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Anders.

        Rename some methods and variables to match the style guidelines.

        * GdkLauncher/main.cpp:
        (stringIsEmpty):
        (stringIsEqual):
        (goToURLBarText):
        (goButtonClickedCallback):
        (urlBarEnterCallback):
        (frameResizeCallback):
        (frameDestroyCallback):
        (menuMainBackCallback):
        (menuMainForwardCallback):
        (menuMainQuitCallback):
        (main):

2007-04-27  Holger Freyther <freyther@kde.org>

        Reviewed by Maciej.

        Remove unmaintained CMake build system.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt: Removed.
        * Scripts/build-webkit: Remove references to CMake.
        * Scripts/webkitdirs.pm: Remove references to CMake.

2007-04-26  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        * GdkLauncher/main.cpp:
        (main): Avoid use of deprecated API.

2007-04-26  Kevin McCullough  <kmccullough@apple.com>

        - Changed debugging statements for more information.

        * Scripts/run-webkit-tests:

2007-04-26  Kevin McCullough  <kmccullough@apple.com>

        - Adding debugging statements to see why these tests fail.  These will be removed.

        * Scripts/run-webkit-tests:

2007-04-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Add a setUseDashboardCompatibilityMode method to LayoutTestController which is used to toggle
        the dashboard compatibility mode.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setUseDashboardCompatibilityMode:]):
        (runTest):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-04-24  Timothy Hatcher  <timothy@apple.com>

        Setting the valid architectures to 32-bit only, so these projects
        will ignore requests to build them 64-bit. Once they can be built 64-bit,
        the valid architectures can be updated.

        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-04-23  Adam Roben  <aroben@apple.com>

        Reviewed by Mark Rowe and David Kilzer.

        * Scripts/build-webkit: Print the path to the run-safari script when
        finished building so that users can copy-and-paste the command to
        execute it.

2007-04-23  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - rename box-sizing to -webkit-box-sizing

        * Drosera/console.css: Here.
        * Drosera/debugger.css: And here.
        * Drosera/viewer.css: And here.

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=13350
          Build Ahem into DumpRenderTree

        * DumpRenderTree/DumpRenderTree.m:
        (activateAhemFont): Added. Activates the copy of Ahem included in the
        DumpRenderTree binary.
        (dumpRenderTree): Replaced the check that Ahem is available with a call
        to activateAhemFont().
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
          Added linker options to include Ahem in the data section of the
          DumpRenderTree binary.

2007-04-20  Adam Roben  <aroben@apple.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=13421
        Bug 13421: prepare-ChangeLog should use svn-create-patch when spewing diffs

        * Scripts/prepare-ChangeLog: Use svn-create-patch instead of svn diff.

2007-04-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim

        <rdar://problem/5008925>
        Expose the NSURLConnection delegate willCacheResponse API to WebResourceLoadDelegate

        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:resource:willCacheResponse:fromDataSource:]):
          Add the willCacheResponse delegate call

2007-04-18  Adam Roben  <aroben@apple.com>

        Reviewed by David Kilzer.

        * Scripts/webkitdirs.pm:
        (sub setConfiguration): Added an optional argument to set the
        configuration instead of parsing it from ARGV.

2007-04-17  Adam Roben  <aroben@apple.com>

        * Scripts/find-included-framework-headers: Search Obj-C and Obj-C++
        files as well.

2007-04-17  Adam Roben  <aroben@apple.com>

        Added a simple shell script to find all the headers from a specified
        framework or frameworks that are included by files beneath the working
        directory.

        * Scripts/find-included-framework-headers: Added.

2007-04-16  Timothy Hatcher  <timothy@apple.com>

        * Drosera/debugger.css: hide the borders for iframes

2007-04-13  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: #include
        stdio.h so that snprintf is defined.

2007-04-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Add the ability to dump the back/forward history of all windows open at the end of a test

        * DumpRenderTree/DumpRenderTree.m:
        (dumpBackForwardListForWebView): Dump B/F list for the given WebView
        (dump): Call dumpBackForwardListForWebView for each WebView open after the test

2007-04-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        By default, close any windows that have been opened during a test. This can be overridden by
        calling setCloseRemainingWindowsWhenComplete(false).

        Change the windows set to an array so we can gurantee the enumeration order.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setCloseRemainingWindowsWhenComplete:]):
        (runTest):
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow dealloc]):

2007-04-13  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (handleCallback): Explicitly cast the void* returned by malloc.

2007-04-12  Deneb Meketa  <dmeketa@adobe.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=13029
        rdar://problem/4994849
        Bug 13029: Permit NPAPI plug-ins to see HTTP response headers.
        Changes in WebKitTools are only for the NPAPI test plugin.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: main test logic.
        (pluginInvoke): support null window argument for NPStream creation.
        (pluginAllocate): initialization.
        (pluginDeallocate): cleanup.
        (handleCallback): add second JS callback arg: header dump.
        (notifyStream): added; hook from NPP_NewStream to record headers.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: declarations.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c: call new header hook.
        (NPP_NewStream): call new header hook.

2007-04-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed fast/forms/textarea-paste-newline.html.

        This failure was pretty funny. run-webkit-tests kills and respawns
        DumpRenderTree once every 1000 runs. Adding a few tests caused
        textarea-paste-newline.html to run right at the beginning of DumpRenderTree's
        lifetime, before any render tree dumps had occurred. However, WebCore
        used a render tree dump as the hook that set a global flag to allow
        pasting through the DOM API, so running before any render tree dumps had
        occurred caused this test to fail.

        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree): Explicitly tell WebKit to allow pasting through the DOM
        API, instead of hoping it will read the tea leaves.

2007-04-07  Mark Rowe  <mrowe@apple.com>

        Not reviewed.  Update to match some configuration changes that have been active on build.webkit.org.

        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py:

2007-04-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add support for opening new windows in DumpRenderTree.

        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setCallCloseOnWebViews:]):
        (-[LayoutTestController setCanOpenWindows]):
        Add two new methods callable from JavaScript. setCanOpenWindows controls whether a test
        can open new windows, and setCallCloseOnWebViews controls whether -[WebView close] should be called on
        web views that are about to be closed.

        (runTest):
        Make sure that only the main window is around when a test has finished running.

        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow dealloc]):
        Manage the set of windows.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_Destroy):
        Add a "logDestroy" property which controls whether plugins should print when they are destroyed or not.

        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:createWebViewWithRequest:]):
        Create new windows.

        (-[UIDelegate webViewClose:]):
        Close windows.

2007-04-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        Move WebView and NSWindow creation to a separate function in preparation of supporting opening new
        windows in DRT.

        * DumpRenderTree/DumpRenderTree.m:
        (createWebView):
        (dumpRenderTree):

2007-04-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add the notion of a "disallowed URL", which the resource loader won't allow to be loaded.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController addDisallowedURL:]):
        (runTest):
        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):

2007-04-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Antti.

        * BuildSlaveSupport/build-launcher-dmg: Use bzip2 compression in nightly build disk images rather than gzip.

2007-04-02  Anders Carlsson  <andersca@apple.com>

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        Don't use #import in a header included by C files.

2007-03-31  Mark Rowe  <mrowe@apple.com>

        Reviewed by Mitz.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13239
        Bug 13239: REGRESSION (r20343): Drosera hits exception trying to call "count" cross-process

        Use -[WebScriptObject valueForKey:@"length"] to retrieve the length of a JavaScript array
        rather than -[WebScriptObject count].

        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument webScriptAttributeKeysForScriptObject:]):

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Add an "onstreamload" attribute to the plugin which is called when a stream starts loading.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_New):
        Look for the onstreamload attribute.

        (NPP_Destroy):
        Free the onstreamload attribute.

        (NPP_NewStream):
        Call the onstreamload handler.

2007-03-30  Geoffrey Garen  <ggaren@apple.com>

        Removing an assertion I just added because it's crashing the Leopard
        buildbot. The related layout test will still report a failure, so we
        don't really need this assertion.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c:
        (testAllocate):
        (testEnumerate):
        Add casts.

        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h:
        Don't use #import, use #include.

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Alexey.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):
        Free the identifier string.

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add TestObject.c and TestObject.h

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginGetProperty):
        Implement the testObject property.

        (pluginInvoke):
        Implement testEnumerate which takes an object and an array and enumerates
        the properties of the object and adds them to the array.

        (pluginAllocate):
        Allocate the test object.

        (pluginDeallocate):
        Free the test object.

        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c: Added.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h: Added.
        Add a test object with two enumerable properties.

2007-03-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Layout test for <rdar://problem/5091330> REGRESSION: Repro crash in
        -[WebBaseNetscapePluginView(WebNPPCallbacks) destroyStream:reason:]
        navigating away from page with DivX movie plug-in (13203)

        Added hasStream property and destroyStream function, used by layout test.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginGetProperty):
        (pluginInvoke):
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_NewStream):

2007-03-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):
        Add new function which takes a function and calls it using NPN_InvokeDefault.

2007-03-27  Adele Peterson  <adele@apple.com>

        Adding comment.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didFinishLoadForFrame:]):

2007-03-27  Adele Peterson  <adele@apple.com>

        Fix svg tests by calling displayIfNeeded.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didFinishLoadForFrame:]):

2007-03-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Upload crash logs from DumpRenderTree as part of the test results to ease debugging
        of hard-to-reproduce crashes.

        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py:

2007-03-23  Adam Treat  <adam@staikos.net>

        Reviewed and committed by George.

        Patch by Adam Treat.  Removes hardcoded path to .pro file.

2007-03-22  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Removed eventSender.mouseClick because it was only useful for AppKit
        controls, which we don't use anymore.

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Removed
        mouseClick.

2007-03-22  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Make eventSender.mouseClick actually send a mouse up event.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseClick]):

2007-03-19  David Hyatt  <hyatt@apple.com>

        Update the minimum font size pref to match the actual default setting in Safari.  It should have been 1
        all this time and not 9.

        Reviewed by aroben

        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree):

2007-03-18  Dan Waylonis  <waylonis@mac.com>

        Reviewed by Tim Hatcher.

        DumpRenderTree changes for http://bugs.webkit.org/show_bug.cgi?id=13005
        Bug 13005: WebScriptObject +throwException needs NULL check.

        Add tests to ensure that a plugin can safely throw an exception in dealloc.

        * DumpRenderTree/ObjCPlugin.h:
        * DumpRenderTree/ObjCPlugin.m:
        (+[ObjCPlugin webScriptNameForKey:]):
        (+[ObjCPlugin isKeyExcludedFromWebScript:]):
        (-[ObjCPlugin dealloc]):

2007-03-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Have the nightly launcher prefer Safari found in /Applications or ~/Applications
        if present, otherwise fall back on using LaunchServices to locate it elsewhere
        on the system.  The motivation for this is to make the behaviour of the nightly
        builds more predictable on machines with multiple copies of Safari present.

        * WebKitLauncher/main.m:
        (locateSafariBundle):
        (main):

2007-03-12  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - add a DumpRenderTree feature where you can get the Objective-C
          class name of a JavaScript object

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Add the
        objCClassNameOf: selector.
        (+[LayoutTestController webScriptNameForSelector:]): Add the
        objCClassNameOf: selector, with the name "objCClassName".
        (-[LayoutTestController objCClassNameOf:]): Added.

2007-03-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Beefed up --threaded mode in light of <rdar://problem/4681051> Installer
        crashes in KJS::Collector::markOtherThreadConservatively(KJS::Collector::Thread*)
        trying to install iLife 06 using Rosetta on an Intel Machine

        --threaded mode now runs a bunch of different JavaScript threads, randomly
        killing and respawning them. This was sufficient for reproducing the
        bug on my MacBook Pro.

        * DumpRenderTree/DumpRenderTree.m:
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        (dumpRenderTree):

2007-03-11  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Brady Eidson.

        Add forward/backward/quit menus for easier testing.

        * GdkLauncher/main.cpp:
        (menuMainBackCb):
        (menuMainForwardCb):
        (menuMainQuitCb):
        (main):

2007-03-09  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13007
          svn-create-patch doesn't handle UTF files with BOMs as text

        Force diff to treat files that svn-create-patch thinks are text as text.

        * Scripts/svn-create-patch: Added -a switch to diff command.

2007-03-09  Mark Rowe  <mrowe@apple.com>

        Unreviewed.  Use the new SVN URL on the buildbot.

        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py:

2007-03-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Antti.

        Fix compiler warnings when building Drosera as 64-bit.

        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument breakpointEditorHTML]): Move away from deprecated NSString method.
        (-[DebuggerDocument scriptConfirmSheetDidEnd:returnCode:contextInfo:]): Update type.
        (-[DebuggerDocument webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:]): Update type to accommodate constant.

2007-03-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Update check-for-global-initializers to ignore new debug initializers in bidi.o and kjs_events.o.

        * Scripts/check-for-global-initializers:

2007-03-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add some assertions.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]):
        (-[WaitUntilDoneDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[WaitUntilDoneDelegate webView:didFailLoadWithError:forFrame:]):

2007-03-07  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - WebKitTools part of fix for http://bugs.webkit.org/show_bug.cgi?id=12463
          WebArchiver - attempt to insert nil exception when archive empty iframe

        The dumpDOMAsWebArchive() test method uses the DOMDocument as a basis for creating
        a webarchive while the dumpSourceAsWebArchive() test method uses the original
        dataSource (page source) to create a webarchive.  Most tests currently use
        dumpDOMAsWebArchive() since this is what Safari does when saving a web page as a
        webarchive.

        * DumpRenderTree/DumpRenderTree.m: Renamed dumpAsWebArchive to dumpDOMAsWebArchive.
        Added dumpSourceAsWebArchive.
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpDOMAsWebArchive]):
        (-[LayoutTestController dumpSourceAsWebArchive]):
        (runTest):

2007-03-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Mark and Dave H.

        - rdar://problem/4922454
        - This fixes a security issue by making remote referrers not able to access local
        resources, unless they register their schemes to be treated as local. The result is
        that those schemes can access local resources and cannot be accessed by remote
        referrers.
        Because this behavior is new a link-on-or-after check is made to determine if the
        app should use the older, less safe, behavior.

        * DumpRenderTree/DumpRenderTree.m: Add ability to set user style sheet to DRT.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setUserStyleSheetLocation:]):
        (-[LayoutTestController setUserStyleSheetEnabled:]):

2007-03-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam, Darin.

        <rdar://problem/5025212>
        In Mail, a crash occurs at WebCore::Frame::tree() when clicking on embedded flash object

        Add a "getURLNotify" method to the plugin object. This lets you pass a URL, a target and a callback function
        to be run when the URL has finished (or failed) loading.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):
        (handleCallback):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_URLNotify):

2007-03-04  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Load a url given on a command line in a way that also
        works for local (file://) urls.

        * GdkLauncher/main.cpp:
        (main):

2007-03-02  Geoffrey Garen  <ggaren@apple.com>

        Tweaked parse-malloc-history to work with new malloc_history output format.

        * Scripts/parse-malloc-history:

2007-02-28  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12887
        Bug#12887: [Drosera] Add ability to close loaded files

        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument closeCurrentFile:]): Adds delegation to call a JS script to close files
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/English.lproj/MainMenu.nib/classes.nib:
        * Drosera/English.lproj/MainMenu.nib/info.nib:
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib: Adds Close Current File menu item
        * Drosera/debugger.html: Changed "no files loaded" to "<No files loaded>" to match Xcode style
        * Drosera/debugger.js: Adds implementation of closeFile() to unload currently loaded file

2007-02-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Add new flags to build-webkit to be able to switch on/off xpath, xslt, etc. easily.

        * Scripts/build-webkit:

2007-02-27  Geoffrey Garen  <ggaren@apple.com>

        Small tweak to run-webkit-tests.

        * Scripts/run-webkit-tests: Allow people with lots of RAM to run more than
        1000 MallocStackLogging tests at a time.

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Lars.

        - set ENABLE_XSLT even when compiling without SVG support, since that is no
        longer hardcoded into config.h.

        * Scripts/build-webkit:

2007-02-26  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Rename *_SUPPORT defines to ENABLE_*.

        * GdkLauncher/gdklauncher.bkl:

2007-02-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        * Scripts/run-webkit-tests: Stop ignoring BidiRun leaks, now that they're
        fixed.

2007-02-24  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Improve gdklauncher: add text field for entering url.

        * GdkLauncher/gdklauncher.bkl:
        * GdkLauncher/main.cpp:
        (strEmpty):
        (strEq):
        (handleGdkEvent):
        (goToUrlBarText):
        (goButtonClickedCb):
        (urlBarEnterCb):
        (registerRenderingAreaEvents):
        (frameResizeCb):
        (frameDestroyCb):
        (main):

2007-02-22  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12852
        Bug#12852: Drosera should select function name, not "function" keyword when selecting from function list pop-up
        * Drosera/debugger.js: Fixed some logic errors resulting in generating double IDs and names.

2007-02-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Added option in layoutTestController to setTabKeyCyclesThroughElements, so we
        can test <rdar://problem/5014970> 9A374: Tabs don't work in the message body

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setTabKeyCyclesThroughElements:]):

2007-02-22  Geoffrey Garen  <ggaren@apple.com>

        Used svn merge -r19786:19785 to roll out previous hack to work around
        SVG painting issue in DRT.

        Implemented new work-around, which makes --paint paint *after* dumping
        the render tree instead of before, so that painting doesn't influence
        the SVG render tree.

        This should fix the ~400 new pixel failures introduced in r19786.

        * DumpRenderTree/DumpRenderTree.m:
        (dump):
        * Scripts/run-webkit-tests:

2007-02-22  Geoffrey Garen  <ggaren@apple.com>

        Resetting --leaks mode default to run 1000 tests at a time because setting it
        to 750 didn't stop the stack logging related crashes, and running more tests
        at a time is faster. The crashes seem to be a real bug in stack logging,
        not an out of memory condition.

        * Scripts/run-webkit-tests:

2007-02-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Added hack to force painting when running an SVG test. This is a work-around
        for http://bugs.webkit.org/show_bug.cgi?id=12849 SVG renderers update at
        paint time instead of style resolution time.

        We need this so that --leaks mode, which always paints, doesn't appear to
        fail SVG tests. We also need this if we ever want to test style application
        in SVG, since many SVGs don't apply style to their renderers until they paint.

        * Scripts/run-webkit-tests:

2007-02-21  Geoffrey Garen  <ggaren@apple.com>

        Reduced --leaks mode to running only 750 tests at a time, in the hopes
        of fixing intermittent crasher that may be caused by out of memory
        conditions.

        * Scripts/run-webkit-tests:

2007-02-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Made DRT paint when running run-webkit-tests in --leaks mode, to check
        for painting leaks.

        * DumpRenderTree/DumpRenderTree.m: Removed some "NO" initializations, since
        that's the default for statics.
        (dumpRenderTree): Added --paint command line option, which specifies that
        DRT should paint at the end of every test.
        (displayWebView): New function, called by dump() and -[LayoutTestController display].
        * Scripts/run-webkit-tests: Use the --paint command line option when checking
        for leaks.

        * Scripts/run-webkit-tests: Added a new, painting leak to the ignore list.
        Removed stale comment about THRD leaks -- we now ignore them reliably.

2007-02-21  Geoffrey Garen  <ggaren@apple.com>

        Tools tweak. No review necessary.

        * Scripts/parse-malloc-history: Enabled multiple merge-regexp command line
        arguments. Changed command line argument variables from special implicit
        no-op values to specific empty values that we test explicitly.

2007-02-21  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Bug 12834: Drosera should remember scroll position of open files like Xcode
        http://bugs.webkit.org/show_bug.cgi?id=12834

        * Drosera/debugger.js: Implemented scrolling memory

2007-02-20  Geoffrey Garen  <ggaren@apple.com>

        Tools tweak. No review necessary.

        Made parse-malloc-history executable. (Oops!)

        Made parse-malloc-history parse 'leaks' output in addition to 'malloc_history"
        output.

        Added the ability to merge callstacks by regexp, not just depth, so you
        can ask questions like, "How many of these allocations were due to that one
        call to ...?"

        * Scripts/parse-malloc-history:

2007-02-20  Geoffrey Garen  <ggaren@apple.com>

        * Scripts/parse-malloc-history: Added copyright info.

2007-02-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        New script to parse the output from malloc_history, so we can determine
        what's using memory in WebKit.

        * Scripts/parse-malloc-history: Added.

2007-02-20  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Darin Adler.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12802
        WebKit.framework is built with SVG_SUPPORT for No-SVG build

        * Scripts/build-webkit: Pass the "FEATURE_DEFINES=" option when building WebKit as well.

2007-02-19  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * Scripts/check-for-global-initializers: Ignore the global counter I added
        for SubresourceLoaders.

2007-02-19  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/check-for-global-initializers: Delete the linked executable if the check fails.
        Without this, you only see the global initializer error once, which makes it very easy
        to miss them.

2007-02-16  Mark Rowe  <mrowe@apple.com>

        Not reviewed.

        <rdar://problem/4982312> leaks bot should run in normal mode, rather than quiet mode

        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Switch back to default verbosity for output of leaks tests.

2007-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        * DumpRenderTree/DumpRenderTree.m: Don't ignore NSAttributedString WebCore::Node
        leaks anymore, either, since r19486 fixed them, too.
        (shouldIgnoreWebCoreNodeLeaks):

2007-02-15  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Don't ignore NSAttributedString leaks any more. Those were
        fixed by change 19486.

2007-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Ignore another leak, seen recently on the buildbot.

        * Scripts/run-webkit-tests:

2007-02-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Ignore another leak, seen recently on the buildbot.

        * Scripts/run-webkit-tests:

2007-02-13  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Fix a bug where --reset-results output would all go in one
        giant line.

2007-02-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        - add contextClick() operation to eventSender to be able to test this

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (-[EventSendingController contextClick]):

2007-02-11  Darin Adler  <darin@apple.com>

        * Scripts/check-for-global-initializers: Fix case where executable doesn't exist at all
        so it doesn't give a perl exception (happens in clean builds, for example).

2007-02-10  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        * Scripts/svn-create-patch:
        (findSourceFileAndRevision($)): Use File::Spec->abs2rel() instead of substr() to generate
        a relative path to the copied file.

2007-02-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        * Drosera/Drosera.icns: updated the icon with 512px and 256px variants

2007-02-10  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Timothy.

        * Scripts/svn-apply:
        (handleBinaryChange($$)): Binary patches don't need a trailing newline after the base64
        encoded text.

2007-02-10  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej

        <rdar://problem/4965133> WebKit sends file:// url referrers

        * Scripts/run-webkit-tests: Enhanced the http tests so that we can run layout tests
          on local files, but have an httpd for remote resources

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Ignore another false leak report.

        * Scripts/run-webkit-tests:

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Kevin McCullough.

        * Scripts/run-webkit-tests: Don't try to create /tmp/LayoutTests if it
        already exists, to avoid confusing error message.

        Also, remove /tmp/LayoutTests after running so unsupecting fools don't
        try to rm -rf it, only later to discover that they have completely hosed
        their machines.

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * GdkLauncher/main.cpp: Add -exit-after-loading and
        -dump-render-tree as debugging aid.
        (strEq):
        (main):

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Minor fixup based on Maciej's review last night.

        * Scripts/run-webkit-tests: Use normal "increment at end of loop" behavior,
        and do a little math to make it work.

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * GdkLauncher/gdklauncher.bkl:

2007-02-08  Kevin McCullough  <KMcCullough@apple.com>

        - Fix layout test failures.

        * Scripts/run-webkit-tests:

2007-02-08  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        * Scripts/check-for-global-initializers: For speed, only check files that
        have been modified since the last time we linked. For tidiness, capture
        stderr from nm, and prevent "nm: no name list" messages from going out.

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak, Adam Roben.

        Added 'nthly' support to run-webkit-tests. It's like 'singly', for an
        arbitrary number n.

        Plus some renames:
            - DumpRenderTree => "dumpTool" (to match abstraction elsewhere)
            - checkLeaks => "shouldCheckLeaks" (to match style guidelines)
            - tool => dumpTool (to match abstraction elsewhere)
            - httpdOpen => isHttpdOpen (to match style guidelines)

        Plus a few logic fixups:
            - Don't check isDumpToolOpen when we know we've called openDumpTool().
            - Use a single code path to decide when to shut down dumpTool and
              when to check for leaks, since the operations are coincidental.
            - Use a single code path for running the leaks tool, since the only
              thing that varies between configurations is the output file name.
            - Increment $count after each test finishes, instead of at the end
              of the loop, to help with comparing to the length of the array
              and %-ing by n.
            - Use a more robust test inside the loop to determine if we need to
              close dumpTool, instead of copying the closing code outside the loop.

        Layout tests pass.

        * Scripts/run-webkit-tests:

2007-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin, evil twin to Bethany P. Dakin.

        Ignore known leaks in CFRunLoop. Exclude THRD leaks by type so that we can
        catch all reports of them, not just those inside pthread_create.

        Also, use "\\" instead of "\" because we need the actual \ to get into the
        regexp string if it's going to do any escaping. (Oops!)

        * Scripts/run-webkit-tests:

2007-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Bethany P. Dakin.

        The 's' is optional when the leaks tool reports 'leaks'.

        * Scripts/run-leaks:

2007-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Bethany P. Dakin.

        Hooked up run-webkit-tests to the run-leaks script. No change in behavior yet.

        * Scripts/run-webkit-tests: Changed symbol names to valid regular expressions.

2007-02-06  David Smith  <catfish.man@gmail.com>

        Reviewed by Darin Adler.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12566
        [Drosera] Console history fixups

        * Drosera/console.js: assorted cleanups and fixes

2007-02-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        New script that allows you to ignore leaks by regular expression.

        * Scripts/run-leaks: Added.

2007-02-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12555
        Drosera doesn't handle CR ( carriage returns ) well

        - Normalize all the line endings.

        * Drosera/debugger.js:

2007-02-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Added some more known leaks to the leaks ignore list.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Why does XCode
        hate itself so much?
        * Scripts/run-webkit-tests:

2007-02-02  Geoffrey Garen  <ggaren@apple.com>

        Even better build fix than the last.

        * ChangeLog:
        * DumpRenderTree/DumpRenderTree.m:
        (shouldIgnoreWebCoreNodeLeaks):

2007-02-02  Geoffrey Garen  <ggaren@apple.com>

        Fixed build. Added work-around for GCC bug.

        * DumpRenderTree/DumpRenderTree.m:
        (shouldIgnoreWebCoreNodeLeaks):

2007-02-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added support for selectively ignoring WebCore::Node leaks during layout
        tests, so that we can ignore known leaks in other components.

        * DumpRenderTree/DumpRenderTree.m:
        (shouldIgnoreWebCoreNodeLeaks): Implements a black list of tests whose
        WebCore::Node leaks we have to ignore. Does this CFString gobbledy-gook
        confuse anyone else?
        (runTest):

2007-02-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin Adler.

        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:addMessageToConsole:]):
        Dump console messages.

2007-01-31  Anders Carlsson  <acarlsson@apple.com>

        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        Use an NSString here so we can guarantee that -description always returns the same value.

2007-01-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Added Selection::toRange to the leaks -exclude list, since it comes up
        as a false positive (Radar 4967949).

        Also added RangeCounter to the global initializer exclude list. I added
        a RangeCounter since leaks won't detect all Range leaks anymore.

        * Scripts/check-for-global-initializers:
        * Scripts/run-webkit-tests:

2007-01-31  Anders Carlsson  <acarlsson@apple.com>

        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        Don't try to create an identifier if resource loads shouldn't be dumped.

2007-01-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Add dumping of resource loads. This isn't completely tweaked yet since the test results would
        rely on resources being delivered in the same order which might not always be true. However, it works good
        enough for the simple webarchive tests I want to do right now.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpResourceLoadCallbacks]):
        (runTest):

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ResourceLoadDelegate.h: Added.
        * DumpRenderTree/ResourceLoadDelegate.m: Added.
        Add new resource load delegate.

2007-01-31  Geoffrey Garen  <ggaren@apple.com>

        Backing out the CFRunLoopRunSpecific exclude command because it was overly
        broad. We'll either need to work around this leak in DRT, or do some
        custom grep-based leak ignoring.

        * Scripts/run-webkit-tests:

2007-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Filed some more Radars in other components, added some more leaks to the
        exclusion list.

        * Scripts/run-webkit-tests: Ignore leaks in CFNotificationCenterAddObserver,
        CFRunLoopRunSpecific, and NSSpellChecker.

2007-01-30  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=11882
        Need a way to regression test .webarchive output files

        Implement layoutTestController.dumpAsWebArchive() to test WebArchive format.
        Alters WebResourceResponse and WebResourceURL properties within WebArchive format
        to normalize URLs to remove path where WebKit was checked out.  Also converts
        WebDataResource properties from data to string if the corresponding
        WebResourceMIMEType property starts with "text/" or equals
        "application/x-javascript".

        * DumpRenderTree/DumpRenderTree.m:
        (convertWebResourceDataToString): Added.
        (normalizeWebResourceURL): Added.
        (normalizeWebResourceResponse): Added.
        (serializeWebArchiveToXML): Added.
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpAsWebArchive]): Added.
        (runTest):

2007-01-30  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=12470
        svn-create-patch creates duplicate patches for files within an added/modified directory

        * Scripts/svn-create-patch:
        (sub generateFileList($\%\%)): Ignore directories when generating the file list.

2007-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed <rdar://problem/4485644> REGRESSION: JavaScriptCore has init routines

        No more mollycoddling for you, FastMalloc.o!

        * Scripts/check-for-global-initializers:

2007-01-29  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Maciej.

        Enables layout test for: http://bugs.webkit.org/show_bug.cgi?id=10725
        Image data in from RTFD clipboard data thrown away

        - This method is needed because NSArrays are bridged to JS Arrays,
          which in turn are bridged back to WebScriptObjects when passed from
          JS to ObjC. Hence it is not possbile to pass an NSArray from JS.

        * DumpRenderTree/DumpRenderTree.m:
        (-[DumpRenderTreePasteboard declareType:owner:]): Added a convenience method for JS.

2007-01-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added support for test for <rdar://problem/4608404> WebScriptObject's
        _rootObject lack of ownership policy causes crashes (e.g., in Dashcode)

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController storeWebScriptObject:]):
        (-[LayoutTestController accessStoredWebScriptObject]):
        (-[LayoutTestController dealloc]):

2007-01-26  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Small hack to ensure that our top level frame actually has the
        correct size. Unfortunately this means I'll have to regenerate
        all test cases :/

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-01-25  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin and Zack

        Move the test results for Qt into a directory of it's own
        (WebKit/LayoutTestResults/qt). Leave the Mac results where
        they are for now and share the text only results between
        Mac and Qt.

        Add support for a LayoutTestResults/platform/Skipped file
        to run-webkit-tests to be able to ignore certain tests

        Remove the old tests-skipped.txt from Qts DumpRenderTree
        implementation.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt: Removed.
        * Scripts/run-webkit-tests:

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix crash seen in layout tests

        * DumpRenderTree/EventSendingController.m: (-[EventSendingController dealloc]):
        Add back the line of code that sets savedMouseEvents to nil. I thought it was
        a field of the EventSendingController, but it's actually a global.

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - changed dragMode to be a property instead of a function

        * DumpRenderTree/EventSendingController.h: Renamed inDragMode to dragMode.
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Removed setDragMode.
        (+[EventSendingController isKeyExcludedFromWebScript:]): Added dragMode.
        (-[EventSendingController init]): Updated for name change.
        (-[EventSendingController leapForward:]): Ditto.
        (-[EventSendingController mouseUp]): Ditto.
        (-[EventSendingController mouseMoveToX:Y:]): Ditto.

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - made the deferral of mouse events until drag completes conditional
          it's needed for drag testing, and harmful for selection testing

        * DumpRenderTree/EventSendingController.h: Added inDragMode boolean.
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Added setDragMode:.
        (+[EventSendingController webScriptNameForSelector:]): Added name for setDragMode,
        and remove unneeded clearKillRing name.
        (-[EventSendingController init]): Initialize inDragMode to true.
        (-[EventSendingController dealloc]): Removed overzealous assertions -- we should
        not be asserting things that are dependent on the test content!
        (-[EventSendingController leapForward:]): Only queue events in drag mode.
        (-[EventSendingController setDragMode:]): Added.
        (-[EventSendingController mouseDown]): Removed overzealous assertion.
        (-[EventSendingController mouseUp]): Removed overzealous assertions.
        Only queue events in drag mode.
        (-[EventSendingController mouseMoveToX:Y:]): Only queue events in drag mode.

2007-01-24  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add a signal handler, always dump immediately if we get an
        error during a page load and raise the timeout to 5 seconds
        (as we get a lot less such failures now)

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::maybeDump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::waitUntilDone):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (crashHandler):
        (main):
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2007-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - a couple tiny tweaks to make --reset-results work better

        * Scripts/run-webkit-tests: Always generate results when --reset-results is specified.
        Don't make a separate "new" entry while generating results when --reset-results
        is specified since new results are the norm in that case.

2007-01-21  Sanjay Madhav  <sanjay12@gmail.com>

        Reviewed by Darin Adler.

        Test support for: <rdar://problem/4928583> Memory usage grows when reloading google.com/ig

        This adds a getJSObjectCount test-accessible function to allow test scripts to track JSObject usage.

        * DumpRenderTree/GCController.h:
        * DumpRenderTree/GCController.mm:
        (+[GCController isSelectorExcludedFromWebScript:]):
        (-[GCController getJSObjectCount]):

2007-01-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Track the output of run-javascriptcore-tests,
        catch single regressions, and don't generate tests results for new tests.

2007-01-20  Adam Roben  <aroben@apple.com>

        Rubberstamped by Maciej.

        * Scripts/run-webkit-tests: Change the default behavior back to
        generating results for new tests (this can be disabled with
        --no-new-test-results)

2007-01-19  Lars Knoll <lars@trolltech.com>

        Reviewed by Adam Roben.

        run-webkit-tests does now not generate new results by default anymore.
        You'll have to pass the --new-tests flag to it to force it to do so.

        This is required to make it possible to have tests running on multiple
        platforms peacefully together.

        * Scripts/run-webkit-tests:

2007-01-18  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        * Scripts/run-webkit-tests: Fix handling of configuration so it
        does the right thing when no explicit configuration is passed in.
        The old code assumed that the result of setConfiguration() was the
        configuration, but it's undefined when no configuration is
        explicitly passed in. The correct function to use is
        configuration(), and I also streamlined the code.

2007-01-17  Lars Knoll <lars@trolltech.com>

        Fix my last commit to actually work in all cases.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej

        Make sure DumpRenderTree exits when run-webkit-tests
        is done.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Small fixes in DumpRenderTree, so we don't by
        accident dump twice for the same test.

        Exclude one more test as it currently causes DumpRenderTree to
        hang forever.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::notifyDone):
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add a message handler to DumpRenderTree that will
        suppress all debug output coming from qDebug() statements.
        Like this we can get rid of all the noise coming
        from the notImplemented() macro when running the
        layout tests. You can get it back by adding -v to
        DumpRenderTree's command line.

        Changed run-webkit-tests slightly, so we by default
        don't fail anymore when our output differs from what
        is generated on the Mac. Added a --strict option, so
        that we can still see this cases and fix them one by one.

        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (messageHandler):
        (main):
        * Scripts/run-webkit-tests:

2007-01-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Use the new public API for the Qt build, and don't rely on
        WebKit internals anymore.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::notifyDone):
        (LayoutTestController::timerEvent):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2007-01-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs

        <rdar://problem/4810960>
        Gmail Editor: window.focus() called on keyDown (9640)

        * DumpRenderTree/EventSendingController.m: Send the keyDown event
        to the firstResponder, not the event's locationInWindow.  A
        key press's locationInWindow is meaningless and just a dummy
        coordinate.

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by bdash.

        Add a script to keep our header guards squeaky clean.

        * Scripts/clean-header-guards: Added.

2007-01-15  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix a few smaller issues in here, and update
        our list of skipped tests.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::timerEvent):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2007-01-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam.

        <rdar://problem/4908909> Need to create Leopard nightly build

        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj: Always use the 10.4 Universal SDK.  The disk images don't mount pre-10.4 so we aren't losing anything here.
        * WebKitLauncher/WebKitNightlyEnabler.m:
        (poseAsWebKitApp): Simplify CoreFoundation-related hackery by using _CFGetProcessPath instead of walking the mach-o symbol tables.  The smaller timeframe where the
        CFProcessPath environment variable is set allows this to work correctly on Leopard where the old code failed.
        (enableWebKitNightlyBehaviour):
        * WebKitLauncher/main.m:
        (main): Pass executable path as WebKitAppPath rather than CFProcessPath to prevent it being picked up too early by CoreFoundation.
        * Drosera/launcher.m:
        (main): Ditto

2007-01-12  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Get DumpRenderTree to work again for the Qt build.

        Make run-webkit-tests a little less verbose when testing
        Qt, and add an option to run DumpRenderTree inside valgrind
        (useful for debugging)

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::dump):
        (WebCore::DumpRenderTree::maybeDump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp:
        (WebCore::DumpRenderTreeClient::dispatchDidHandleOnloadEvents):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h:
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:
        * Scripts/run-webkit-tests:

2007-01-12  Zack Rusin  <zack@kde.org>

        Add WEBKIT_FULLBUILD env variable to get the
        build do a make clean before make to cleanout the
        stale depenendencies (for buildbot mainly).

        * Scripts/webkitdirs.pm:

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=10249
          Temporarily disable tests that are causing kernel panics

        Changed the ImageDiff tool not to use CoreImage filters.

        * DumpRenderTree/ImageDiff.m:
        (main):
        (createImageFromStdin):
        (compareImages):
        (getDifferenceBitmap):

2007-01-11  Lars Knoll <lars@trolltech.com>

        Fix compilation

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-01-11  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin Adler.

        Adjust to loader changes.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-01-06  George Staikos  <staikos@kde.org>

        This doesn't build on all unix platforms!

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-01-05  Zack Rusin  <zack@kde.org>

        Reviewed by Simon.

        Fix the undefined warnings and try to detect
        the DISPLAY properly.

        * Scripts/run-webkit-tests:

2007-01-05  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Mark Rowe.

        Speed up svn-create-patch for copied and moved files.

        * Scripts/svn-create-patch:
        (manufacturePatchForAdditionWithHistory($$)): Use 'svn cat' instead of 'svn cat -rNNNNN'
        so svn pulls original from local disk.

2007-01-04  Lars Knoll <lars@trolltech.com>

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:
              Link with RPATH to (hopefully) get the automatic tests working.

2007-01-03  Mark Rowe  <bdash@webkit.org>

        Reviewed by Anders.

        * Scripts/run-webkit-tests: Launch Safari using the same WebKit build configuration as the layout tests used.

2007-01-02  Zack Rusin  <zack@kde.org>

        Make it work after javascriptcore/bindings changes.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-01-01  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=12023
        svn-create-patch and friends should handle moved/copied files

        * Scripts/svn-apply: Identify copied files and handle those before all other patches.
        * Scripts/svn-create-patch: Generate patches with subtle changes for copied files.
        (findMimeType($)): Added.
        (findModificationTime($)): Added.
        (findSourceFileAndRevision($)): Added.
        (generateDiff($$$)): Changed to use svn stat instead of svn diff.
        (isBinaryMimeType($)): Added.
        (manufacturePatchForAdditionWithHistory($$)): Added.
        * Scripts/svn-unapply: Identify copied files and handle those after unapplying all other patches.

2006-12-29  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Stop DumpRenderTree from reporting false Frame/Node leaks due to new SVGImage

        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree): clear WebCore cache before exiting

2006-12-29  David Kilzer  <ddkilzer@webkit.org>

        Reverted last commit until WebResourceData issue is fixed.

        http://bugs.webkit.org/show_bug.cgi?id=11882
        Need a way to regression test .webarchive output files

        * DumpRenderTree/DumpRenderTree.m:
        (serializeWebArchiveToXML): Removed.
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpAsWebArchive]): Removed.
        (runTest):

2006-12-28  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=11882
        Need a way to regression test .webarchive output files

        Implement layoutTestController.dumpAsWebArchive() to test WebArchive format.
        Saves WebArchive plist in xml format, then alters file:// URLs to remove path
        where WebKit was checked out.

        * DumpRenderTree/DumpRenderTree.m:
        (serializeWebArchiveToXML): Added.
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpAsWebArchive]): Added.
        (runTest):

2006-12-28  George Staikos  <staikos@kde.org>

        Reviewed by Olliej.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro: don't build on non-X11

2006-12-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric Seidel. Prose edited by Mitz Pettel.

        Some cleanup I did while debugging the regression in plugins/netscape-dom-access.html.

        No behavior change. Layout tests pass.

        * DumpRenderTree/DumpRenderTree.h: Exported the done BOOL in place of the
        doneLoading() accessor function. This matches the rest of DRT's exports and
        makes it easier to search for clients who check (!done).

        * DumpRenderTree/DumpRenderTree.m: Moved fflush() call to runTest() so
        it would cover both code paths for calling runTest().

        (dumpRenderTree): "doneLoading()" => "done"
        (dump): ditto
        * DumpRenderTree/EditingDelegate.m: ditto
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]): ditto
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]): ditto
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]): ditto
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]): ditto
        (-[EditingDelegate webView:shouldDeleteDOMRange:]): ditto
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]): ditto
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]): ditto
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]): ditto
        (-[EditingDelegate webViewDidBeginEditing:]): ditto
        (-[EditingDelegate webViewDidChange:]): ditto
        (-[EditingDelegate webViewDidEndEditing:]): ditto
        (-[EditingDelegate webViewDidChangeTypingStyle:]): ditto
        (-[EditingDelegate webViewDidChangeSelection:]): ditto
        * DumpRenderTree/UIDelegate.m: ditto
        (-[UIDelegate webView:runJavaScriptAlertPanelWithMessage:]): ditto

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by bradee-oh.

        Add very simple run-pageloadtest script for running SVG page load test.

        * Scripts/run-pageloadtest: Added.

2006-12-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric Seidel.

        Some cleanup in preparation for fixing <rdar://problem/4740328> Safari
        crash on quit in _NPN_ReleaseObject from KJS::Bindings::CInstance::~CInstance

        (dumpRenderTree): Renamed "installedPlugins" to "sharedDatabase."

2006-12-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added --threaded support to run-webkit-tests and DumpRenderTree.

        In "threaded" mode, DRT runs a concurrent JavaScript thread with each test,
        stressing the thread safety of JavaScriptCore and the JavaScriptCore/WebCore
        interface. This is useful for tracking down bugs you might see on a system
        configured to use a PAC file.

        Ironically, I can proudly state that very few layout tests pass.

        * DumpRenderTree/DumpRenderTree.m: Added javaScriptThread and helper functions
        for starting and stopping it.
        (runJavaScriptThread): helper function
        (startJavaScriptThread): helper function
        (stopJavaScriptThread): helper function

        (dumpRenderTree): Added --threaded command line argument.
        * Scripts/run-webkit-tests: ditto

2006-12-22  Mark Rowe  <bdash@webkit.org>

        Reviewed by Brady.

        Fix for <rdar://problem/4265976>
        prepare-ChangeLog sometimes lists the wrong Objective-C class name for a changed method

        * Scripts/prepare-ChangeLog: Treat @end as the end of both the interface and the method declaration.

2006-12-21  Mark Rowe  <bdash@webkit.org>

        Reviewed by Tim Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=11922
        Bug 11922: REGRESSION(r17128): Drosera no longer shows local variables in stack frame

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject webScriptAttributeKeysForScriptObject:]): Use an anonymous function with function.call to
        ensure that the properties are being retrieved from the correct scope object.

2006-12-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add support for the layoutTestController JavaScript object
        to be able to get textOnly dumps.
        Added a Qt specific hack to always get the same fonts (the ones
        added in this submit) and the same dpi when running the layout tests.
        Modified the run-webkit-tests script to also do a comparison to the
        Mac generated outputs (by stripping out positioning information).

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::resetJSObjects):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dump):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp:
        (WebCore::DumpRenderTreeClient::DumpRenderTreeClient):
        (WebCore::DumpRenderTreeClient::partClearedInBegin):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h:
        * DumpRenderTree/DumpRenderTree.qtproj/fontoverload.cpp: Added.
        (QX11Info::appDpiY):
        (QX11Info::appDpiX):
        (qt_x11ft_convert_pattern):
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp: Added.
        (LayoutTestController::shouldDumpAsText):
        (LayoutTestController::shouldWaitUntilDone):
        (LayoutTestController::reset):
        (LayoutTestController::dumpAsText):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/AHEM____.TTF: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/COPYING: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierBold.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierBoldOblique.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierMedium.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierMediumOblique.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaBold.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaBoldOblique.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaMedium.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaMediumOblique.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/SymbolMedium.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesBold.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesBoldItalic.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesMedium.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesMediumItalic.ttf: Added.
        * Scripts/run-webkit-tests:

2006-12-21  Mark Rowe  <bdash@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=11888
        Bug 11888: REGRESSION (r18320): Web Inspector panes broken

        * Drosera/debugger.js: Use removeProperty to reset a style property to its initial value.

2006-12-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Updated EventSender to be able to send mouse up events outside the WebView.
        This is a minor tweak to a hackish implementation. The real solution
        should be to use NSApplication's event sending model instead of rolling
        our own, but I don't have time for that right now.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseUp]):

2006-12-15  Marvin Decker  <marv.decker@gmail.com>

        Reviewed by Darin and Alexey.

        Fix the Windows build, move various Client implementations out of
        WebCore and into WebKit.

        * Spinneret/Spinneret.sln:

2006-12-14  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady.

        * Makefile.shared: use $PIPESTATUS[0] and a sub-shell to exit with xcodebuild's exit status

2006-12-13  Zack Rusin  <zack@kde.org>

        Reviewed by rwlbuis

        Use the qmake build by default with Qt - it's the one that works
        currently.

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

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Some more fixes to the dumprendertree application.
        Fix the run-webkit-tests script for Qt.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro: Added.
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2006-12-10  Rob Buis  <buis@kde.org>

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.m:
        (dump):

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Get the DumpRenderTree app to compile again

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp:
        (WebCore::DumpRenderTreeClient::DumpRenderTreeClient):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h:
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2006-12-09  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Repair QMake build on OS X.

        * Scripts/build-webkit:

2006-12-09  Zack Rusin  <zack@kde.org>

        Fixing small mistakes in the build scripts for
        the qmake builds.

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

2006-12-09  Simon Hausmann  <hausmann@kde.org>

        Reviewed by hyatt.

        Add support for a QMake build using build-webkit --qmake

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

2006-12-09  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Remove reference to Unity.

        * Scripts/webkitdirs.pm:

2006-12-08  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        Fix the compile after recent API changes.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2006-12-08  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Build Qt webkit on non-linux, and prefer it if $QTDIR is set

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

2006-12-06  Steve Falkenburg  <sfalken@apple.com>

        Support C strings for localization

        * Scripts/extract-localizable-strings:

2006-12-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Make extract-localizable-strings compatible with cpp file extensions.

        * Scripts/extract-localizable-strings:

2006-11-21  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - a couple changes to reduce the chance of false positives on the leakbot

        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree): Move the main function into a separate function so we can run
        a final garbage collect afterward without any stray values on the stack. Replaced
        the old way of closing down a WebView (setting the delegates to nil) with the new
        way (calling the close method), which does a more complete job of shutting
        everything down without waiting for the WebView object to be deallocated.
        (main): Put auto-release pool here and added an explicit call to garbage collect.
        With a separate function, we greatly reduce the chance that a stray address on the
        stack will keep an object alive.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Let Xcode do its thing,
        because I don't have what it takes to fight the power.

2006-11-17  Zack Rusin  <zack@kde.org>

        Reviewed by Mitz. Landed by Niko.

        Fixing compilation.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Adding
        ContextMenuClient to the constructor

2006-11-12  Mark Rowe  <bdash@webkit.org>

        Reviewed by Mitz.

        Clean up of GdkLauncher bakefile.

        * GdkLauncher/gdklauncher.bkl:

2006-11-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Make DRT work again on Qt/Linux.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2006-11-10  Zack Rusin  <zack@kde.org>

        Reviewed and landed by Anders.

        Adjusting to the recent loader changes, making it compile
        and work.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:

2006-11-10  Zack Rusin  <zack@kde.org>

        Reviewed by Anders.

        Making the Qt code work after refactorings in WebCore.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:

2006-11-08  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - same change as below, only tested this time

        * DumpRenderTree/DumpRenderTree.m: (main): Explicitly turn "tab to links"
        mode off. I think we need to do this because WebPreferences saves things
        for us automatically. It would be good to turn that off for DumpRenderTree,
        but for now lets handle this like the other preferences (set it explicitly
        each time).

2006-11-08  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        * DumpRenderTree/DumpRenderTree.m: (main): Get rid of code to turn on
        "tab to links" mode. No current tests depend on this, and there's a new
        test I want to land that depends on the default setting.

2006-11-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux\gdk build fixes.

        * GdkLauncher/main.cpp:
        (LauncherFrameGdk::LauncherFrameGdk):
        (main):

2006-11-06  Alexey Proskuryakov  <ap@nypop.com>

        Build fix, approved in principle by Tim H.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Disable deprecated warnings for main.c (TestNetscapePlugin),
        as it now uses QuickDraw to convert mouse event coordinates.

2006-11-05  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        Bug 11525: [Drosera] function menu doesn't understand object.method = function() {} syntax
        http://bugs.webkit.org/show_bug.cgi?id=11525

        * Drosera/debugger.js: imporved the function name code

2006-11-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        Make sure that alerts and delegate output made after notifyDone() are ignored, rather than
        being attributed to the next test.

        * DumpRenderTree/EditingDelegate.m:
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        (-[EditingDelegate webViewDidChangeSelection:]):
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:runJavaScriptAlertPanelWithMessage:]):

2006-11-06  Mark Rowe  <bdash@webkit.org>

        Reviewed by Alexey.

        Fix "Undefined subroutine &main::WEXITSTATUS" when build-dumprendertree fails.

        * Scripts/run-webkit-tests: import the POSIX module.

2006-11-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        Test for http://bugs.webkit.org/show_bug.cgi?id=11517
        REGRESSION: Flash clicks/interactivity not working properly

        Teach TestNetscapePlugin to log events passed to it. To enable, set eventLoggingEnabled to true:

        <embed name="plg" type="application/x-webkit-test-netscape" width=100 height=100></embed>
        <script>
            plg.eventLoggingEnabled = true;
            // use eventSender to simulate events...
        </script>

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginGetProperty):
        (pluginSetProperty):
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_HandleEvent):

2006-11-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11521
        Bug 11521: [Drosera] Breakpoint editor UI behaves incorrectly when multiple editors are open

        * Drosera/debugger.js: Use .// instead of // so that it doesn't root the search at the document.

2006-11-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11513
        Bug 11513: [Drosera] Function popup fails to appear when clicking supposedly valid areas.

        * Drosera/debugger.css: Stick a min-width on the menu to keep it from becoming smaller than the control.

2006-11-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11512
        Bug 11512: [Drosera] Scrolling via keyboard breaks after clicking in function popup.

        * Drosera/debugger.js: blur() the function popup when we're done with it.

2006-11-04  Mark Rowe  <bdash@webkit.org>

        Reviewed by Darin Adler.

        Fix use of uninitialized value in pattern match.

        * Scripts/webkitdirs.pm:

2006-11-04  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/webkitdirs.pm: Don't try to use the Xcode build setting if it's project-relative.

2006-11-03  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11510
        Bug 11510: [Drosera] Doubleclicking the attach table should attach to the clicked item.

        * Drosera/DebuggerApplication.m:
        (-[DebuggerApplication showAttachPanel:]): Set the doubleAction for the table view

2006-11-03  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=9596
        Bug 9596: [Drosera] add a function popup to the source pane

        * Drosera/debugger.css: Added styles for function popup
        * Drosera/debugger.html: Added function popup button and select
        * Drosera/debugger.js: Added function popup functionality

2006-11-03  Michael Emmel  <mike.emmel@gmail.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9671

        * Scripts/wkstyle:
        Adds astyle sed script formats according to most of the style guidelines.

2006-11-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=7323
        REGRESSION (10.4.4): ondrag* events don't fire on page in a frame

        When dragging, do not send EventSendingController's events immediately. Dragging
        is supposed to be modal, so we need to perform it from within the delegate, without
        returning to JS to make the next mouse movement.

        When the mouse is down, mouse events are now recorded, and executed when mouseUp is sent.

        * DumpRenderTree/EventSendingController.h:
        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController dealloc]):
        (-[EventSendingController leapForward:]):
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (+[EventSendingController saveEvent:]):
        (+[EventSendingController replaySavedEvents]):
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):

2006-11-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Justin Garcia.

        Made dumping of editing callbacks opt-in, so that editing spew doesn't
        cloud non-editing tests.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController shouldDumpEditingCallbacks]):
        (runTest):
        * DumpRenderTree/EditingDelegate.m:
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        (-[EditingDelegate webViewDidChangeSelection:]):

2006-11-02  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej, landed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Make Windows build work with Visual C++ Express.
        * Scripts/install-win-extras: Make setx.exe actually run.

2006-11-01  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Kevin.

        Fixed bug where additional arguments got fed to xcode and jsdriver.pl
        Since testkjs is being built before the tests are run, we don't need
        to build it with webkit.

        Fixes bugs
        http://bugs.webkit.org/show_bug.cgi?id=11462
        http://bugs.webkit.org/show_bug.cgi?id=6168

        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:

2006-11-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Added accessor to get the source directory for use in client scripts

        * Scripts/webkitdirs.pm:

2006-11-01  Mark Rowe  <bdash@webkit.org>

        Reviewed by Mitz.

        Update references to webkit.opendarwin.org to webkit.org in Spinneret and WebKit.app.

        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
        * WebKitLauncher/WebKitNightlyEnabler.m:
        (cleanUpAfterOurselves):

2006-10-31  Mark Rowe  <bdash@webkit.org>

        Reviewed by Stephanie.

        Limit build slaves to a single build to prevent concurrent builds on a single slave from significantly increasing build time.

        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py: Adjust slave distribution, and make use of a SlaveLock.
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py: Remove unused Qt build factory.

2006-10-31  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.m: Instead of allocating a single local
        pasteboard, allocate any number of local pasteboards.
        (main): Allocate the dictionary of pasteboards.
        (+[DumpRenderTreePasteboard _pasteboardWithName:]): Allocate a pasteboard,
        given a name.
        (+[LocalPasteboard alloc]): Added, so we don't have to call NSAllocateObject
        explicitly elsewhere.
        (-[LocalPasteboard addTypes:owner:]): Added a check that the owner responds
        to the selector rather than calling unconditionally.

2006-10-30  Darin Adler  <darin@apple.com>

        - fixed build

        * DumpRenderTree/DumpRenderTree.m: (-[LocalPasteboard setString:forType:]):
        Don't use CFPasteboard.

2006-10-30  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11353

        * Drosera/debugger.js: ParsedURL() object now recognizes local files

2006-10-30  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * DumpRenderTree/DumpRenderTree.m: Changed to allocate a local pasteboard.
        This should make our buildbot tests no longer need a pasteboard server.

2006-10-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth.

        Reorganized project file into Delegates and Controllers groups, and split
        UIDelegate stuff into a UIDelegate class.

        A little birdy told me that I might end up adding some UIDelegate methods
        to DRT soon.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (runTest):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2006-10-31  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add new platform/graphics include directory.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt:

2006-10-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Stephanie.

        Add a special case for the Internal makefiles, so it can find the OepnSource.

        * Scripts/webkitdirs.pm:

2006-10-30  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        Change Makefiles to return non-zero when module make fails.
        Fix bug where if xcode options are not set, modules can build in the
        wrong directory.

        * Makefile:
        * Scripts/webkitdirs.pm:

2006-10-30  Matt Lilek  <pewtermoose@gmail.com>

        Reviewed by Tim H.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=10468
        [Drosera] The Console toolbar button should bring the console window to the front.

        The console now gets focus when its activated but already open.  Command + L also
        now activates/focuses the console.

        * Drosera/English.lproj/MainMenu.nib/classes.nib:
        * Drosera/English.lproj/MainMenu.nib/info.nib:
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib:
        * Drosera/debugger.js:

2006-10-29  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: Renames done, ready for the next round.
        * Scripts/do-webcore-rename: Ditto.

2006-10-29  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: And again.

2006-10-29  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Tweaked plans for renaming again.

2006-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        * DumpRenderTree/DumpRenderTree.m: (-[DumpRenderTreeWindow keyDown:]):
        Added. Does nothing, which prevents a beep.

        * Scripts/do-webcore-rename: Tweaked plans for renaming a bit.

2006-10-27  Brady Eidson  <beidson@apple.com>

        Rubber stamped by Tim Hatcher

        Added "make universal" to build universal binaries

        * Makefile:
        * Makefile.shared:

2006-10-26  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Geoff.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11419
        REGRESSION (r17299): Assertion failure in -[WebHTMLView(WebPrivate) _topHTMLView]
        ([view isKindOfClass:[WebHTMLView class]]) when running the layout tests

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseMoveToX:Y:]):

2006-10-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin Adler.

        Fix Qt/Linux build.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):

2006-10-24  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Maciej.

        - Changed run-javascriptcore tests to build testkjs before running.

        * Scripts/run-javascriptcore-tests:

2006-10-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix Qt/Linux build.

        - Remove BrowserExtensionQt, move it's methods to Page/FrameQt.
        - Fix CMakeLists.txt to include platform/network.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt:

2006-10-24  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Bug 11382: [Drosera] Dragging breakpoints onto each other can mess up inline editor
        http://bugs.webkit.org/show_bug.cgi?id=11382

        * Drosera/debugger.js: Breakpoint dragging now ensures that editors aren't orphaned.

2006-10-21  Darin Adler  <darin@apple.com>

        * Scripts/commit-log-editor: Use baseProductDir() to find the base product directory.
        This was still using "symroots" so it almost never worked!

2006-10-21  Darin Adler  <darin@apple.com>

        * Makefile: Build DumpRenderTree too.
        * Scripts/do-webcore-rename: Removed bogus comment.

2006-10-20  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Bug 11367: Inline Breakpoint Editor Improvements: Act III
        http://bugs.webkit.org/show_bug.cgi?id=11367

        Major breakpoint editor changes:
        * Breakpoints can now either pause or log to console
        * Code cleanup through use of XPath and converting breakpoints to objects
        * Breakpoints now track how many times they've been reached
        * UI tweaks
        * The breakpoint editor now saves changes as they're entered
        * Because changes are auto-saved now, the save button has been converted to a close button (images from PSMTabBarControl, BSD licensed)
        * If an expression with no return is entered as a condition, it will be wrapped transparently with a return statement.

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject breakpointEditorHTML]): A way of loading this from an external file, as it was getting too complex to include inline.
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Images/close.tif: Added.
        * Drosera/Images/close_active.tif: Added.
        * Drosera/Images/close_hover.tif: Added.
        * Drosera/breakpointEditor.html: Added.
        * Drosera/console.js: Added a way to append messages from outside the console window.
        * Drosera/debugger.js:
        * Drosera/viewer.css:
        * Drosera/viewer.html:

2006-10-18  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Improve the doubleclick behavior of breakpoints, and make breakpoints with no custom condition set appear blank instead of return [-1, 1] depending on enabled state.

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject getDoubleClickMillis]): Add an ObjC wrapper for GetDblTime() so that JS can call it
        * Drosera/Drosera.xcodeproj/project.pbxproj: link Carbon for GetDblTime()
        * Drosera/debugger.js:

2006-10-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders.

        Bug 10851: Crash with Drosera
        http://bugs.webkit.org/show_bug.cgi?id=10851

        This crash results in an assert in debug builds.

        assert(implementsCall());

        The __drosera_introspection propery was not callable. Now we just assign
        this.__drosera_introspection in the evaluateWebScript call.
        This change also removes one DO message.

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject webScriptAttributeKeysForScriptObject:]):

2006-10-18  Mark Rowe  <bdash@webkit.org>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=11304
        Bug 11304: Drosera fails to link as universal binary on PowerPC machine

        * Drosera/Drosera.xcodeproj/project.pbxproj: Use -weak_framework to link against JavaScriptCore and WebCore directly
        when they are not part of the WebKit umbrella framework.

2006-10-18  Adam Roben  <aroben@apple.com>

        fixo el buildo II: Release's Pride.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2006-10-18  Geoffrey Garen  <ggaren@apple.com>

        fixo el buildo.

        Work around #import of <PDFKit/PDFView.h>.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2006-10-18  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Add Xcode 3 style inline breakpoint editor. Credit to xenon for the CSS wizardry to get the appearance working properly.

        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Images/breakpointeditor.png: Added.
        * Drosera/breakpointEditor.css: Removed.
        * Drosera/breakpointEditor.html: Removed.
        * Drosera/breakpointEditor.js: Removed.
        * Drosera/debugger.js:
        * Drosera/viewer.css:

2006-10-18  David Harrison  <harrison@apple.com>

        Reviewed by Tim H.

        Bug 11341: REGRESSION (r16760): editing/selection/editable-links is failing
        http://bugs.webkit.org/show_bug.cgi?id=11341

        Link editing behavior became a preference. DumpRenderTree needs to specify the
        non-default behavior it wants (WebKitEditableLinkOnlyLiveWithShiftKey).

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2006-10-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Anders.

        Make compiler not complain about unused gk. SpinneretWebHost was not setting
        initial refcount upon creation, so it is completely bogus.

        * GdkLauncher/main.cpp:
        (main):
        * Spinneret/Spinneret/Spinneret.h:
        (SpinneretWebHost::SpinneretWebHost):

2006-10-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add another hanging test, to the "to be skipped" list.

        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2006-10-14  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Anders.

        Some fixes to get the Qt BuildSlave to run the LayoutTests.

        * Scripts/build-dumprendertree: No need to call cmake again.
        * Scripts/run-webkit-tests: Expose LD_LIBRARY_PATH.

2006-10-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Force --no-http on Qt/Linux.

        * Scripts/run-webkit-tests:

2006-10-13  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adam.

        Gets JavaScripCore tests running on windows.

        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitdirs.pm:

2006-10-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Exclude some tests which crash or hang from Qt/Linux DRT.
        These are known to fail, and will be fixed at some point :-)

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::readSkipFile):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt: Added.

2006-10-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Specialization of alert() for DumpRenderTree - just log the output, don't show any message box.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp:
        (WebCore::DumpRenderTreeClient::runJavaScriptAlert):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h:

2006-10-12  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Also regenerate GdkLauncher makefiles, since not doing that might
        lead to mismatch between WebCore and GdkLauncher compiler settings.

        * Scripts/regenerate-makefiles:

2006-10-10  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Bug 11246: Minor Drosera code cleanup
        http://bugs.webkit.org/show_bug.cgi?id=11246

        * Drosera/debugger.js: Change [has, add, remove]StyleClass to be a function on Element rather than taking an Element as an argument.

2006-10-10  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Bug 9778: http://bugs.webkit.org/show_bug.cgi?id=9778

        * Drosera/Drosera.xcodeproj/project.pbxproj: Added files
        * Drosera/English.lproj/Debugger.nib/info.nib: Resized the main window and WebView
        * Drosera/English.lproj/Debugger.nib/keyedobjects.nib: Resized the main window and WebView
        * Drosera/Images/SourceArrowOpen.png: Added.
        * Drosera/Images/fileIcon.jpg: Added.
        * Drosera/Images/siteCollapsed.tif: Added.
        * Drosera/Images/siteExpanded.tif: Added.
        * Drosera/Images/siteIcon.tif: Added.
        * Drosera/debugger.css: Added File Browser styles
        * Drosera/debugger.html: Added File Browser UI
        * Drosera/debugger.js: Added File Browser functionality

2006-10-10  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: Added.

2006-10-09  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Geoff.

        Add -exit-after-loading option to make gdklauncher quit after fully loading and rendering
        a page. This allows automatic testing via e.g. valgrind.

        * GdkLauncher/gdklauncher.bkl:
        * GdkLauncher/main.cpp:
        (LauncherFrameGdk::LauncherFrameGdk):
        (LauncherFrameGdk::setExitAfterLoading):
        (LauncherFrameGdk::handledOnloadEvents):
        (handle_event):
        (main):

2006-10-06  David Smith  <catfish.man@gmail.com>

        Reviewed by Timothy.

        Bug 9665: [Drosera] Conditional breakpoints. http://bugs.webkit.org/show_bug.cgi?id=9665

        * Drosera/Drosera.xcodeproj/project.pbxproj: Added new files
        * Drosera/breakpointEditor.css: Added.
        * Drosera/breakpointEditor.html: Added.
        * Drosera/breakpointEditor.js: Added.
        * Drosera/debugger.js: Added conditional breakpoint support, and the ability to open the breakpoint editor window on option-clicking a breakpoint.

2006-10-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fix Qt/Linux build by adapting the s/ScrollBar/Scrollbar/ changes.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2006-10-05  Oliver Hunt  <ohunt@apple.com>

        Reviewed by Anders.

        * Scripts/run-webkit-tests:
        Fix pixel tests.

2006-10-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin Adler.

        * Scripts/run-webkit-tests:
        Add an environment variable, WebKitExpectedTestResultsDirectory, which controls where expected test
        results should be.

2006-10-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Cmake: make it possible to install the libraries after having built using 'build-webkit'.
        Just set the "WebKitInstallationPrefix" environment variable to your desired prefix.

        * Scripts/webkitdirs.pm:

2006-10-04  Mark Rowe  <bdash@webkit.org>

        Reviewed by Stephanie.

        Switch the Qt buildbot to the standard set of build steps.
        Have JavaScriptCoreTest check the output of run-javascriptcore-tests to
        see if any regressions were spotted, and fail the test if so.

        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py:

2006-10-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mitz Pettel!

        Bug 10708: [Drosera] Make the console input plaintext-only
        http://bugs.webkit.org/show_bug.cgi?id=10708

        Change the console input -webkit-user-modify property to
        read-write-plaintext-only.

        * Drosera/console.css:

2006-10-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Bug 10473: [Drosera] Overlapping text in JavaScript Console
        http://bugs.webkit.org/show_bug.cgi?id=10473

        Using min-height instead of height to avoid overlapping text.

        * Drosera/console.css:

2006-10-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Added a bash-style command history.

        * Drosera/console.js:

2006-10-03  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam and Brady.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        Update URL to Ahem.ttf

2006-10-03  Darin Adler  <darin@apple.com>

        * Scripts/commit-log-editor: Added missing "close" call. Oops!

2006-10-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Offer a way for BuildBot to not colorize the cmake output, when building
        with the 'build-webkit' script. Add "--color" / "--no-color" option pair.

        Default is colorize output, though only Qt platform handles this for now.

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

2006-10-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Make all important scripts work with Qt/Linux.

        You can safely use this now:
        set-configuration-release --debug && build-webkit && run-javascriptcore-tests && run-webkit-tests

        * Scripts/build-dumprendertree:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2006-10-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        build-webkit tweak: Use WebKitBuild/$config as output dir (Release/Debug).

        * Scripts/webkitdirs.pm:

2006-10-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Proper build-webkit support for Qt/Linux.

        Compilation process is similar to OSX now, aka.
        the build directory is RootCheckoutDir/WebKitBuild now.

        * Scripts/build-webkit: Recognize Qt.
        * Scripts/webkitdirs.pm: Add buildCMakeProject() logic.

2006-10-01  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Maciej.

        Add QT build slave to Buildbot.

        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py: Add QT build slave, fix existing errors.
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py: Add QT build factory.
        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py: Disable forcing of builds via web interface to prevent spamming.  Use the IRC bot in #webkit-build instead.
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Add CMake build step.

2006-09-28  David Harrison  <harrison@apple.com>

        Suggested by Darin Adler.

        Moved an extern declaration from inside a method to the top of the file.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController clearKillRing]):

2006-09-28  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        Add clearKillRing so we can test emacs support with empty kill ring.

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController clearKillRing]):

2006-09-27  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Maciej, landed by Brady

        Fix URL bar updating.

        * Spinneret/Spinneret/Spinneret.h:
        (SpinneretWebHost::didStartProvisionalLoadForFrame):
        (SpinneretWebHost::didCommitLoadForFrame):
        (SpinneretWebHost::didFinishLoadForFrame):

2006-09-23  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Eric.

        Build Fix.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController enableDOMUIEventLogging:]):

2006-09-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        * Scripts/do-webcore-rename:

2006-09-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Bug 10923: Frame scroll layout test failures on the buildbot
        http://bugs.webkit.org/show_bug.cgi?id=10923

        Added a new method that will toggle on the recursive dump of
        child frame scroll positions.

        * DumpRenderTree/DumpRenderTree.m:
        (dumpFrameScrollPosition):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpChildFrameScrollPositions]):

2006-09-19  Krzysztof Kowalczyk <kkowalczyk@gmail.com>

        Reviewed by eseidel.  Landed by eseidel.

        Detect that close button was pressed and exit cleanly.

        * GdkLauncher/main.cpp:
        (handle_event):
        (main):

2006-09-17  Adam Roben  <aroben@apple.com>

        Reviewed by hyatt, sfalken.

        Get DumpRenderTree compiling and limping along on Windows.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (loadResourceIntoArray): Added this function that WebCore::ImageWin needs from WebKit
        (main): Add NULL argument to Page constructor.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj: Remove incorrect "wininet.dll" argument to CC, fix JavaScriptCore.lib path, add *_SECURE_NO_DEPRECATE #defines
        * Scripts/webkitdirs.pm: Fix JavaScriptCore.lib path

2006-09-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=10635
        Bug 10635: Buildbot configuration in SVN is out of sync with build.webkit.org

        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py: Reorder build slaves within build factories in an attempt to spread the load evenly.
        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py: Return to sending status emails to <svnuser>@opensource.apple.com addresses.
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Update configuration to match changes in Buildbot.  Always do clean SVG builds.

2006-09-09  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Eric.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10791
        Even More Objective-C DOM auto-generation cleanup

        - Change to use new, more Objectice-C'ish version of
          DOMKeyboardEvent's initKeyboardEvent.  Fixes an error with
          regression test for fast/events/dblclick-addEventListener.html.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController fireKeyboardEventsToElement:]):

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fixes last part of: http://bugs.webkit.org/show_bug.cgi?id=10644
        Move QtLauncher down to WebKitQt.

        * QtLauncher/CMakeLists.txt: Removed.
        * QtLauncher/main.cpp: Removed.

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin Adler.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10644
        Adjust DumpRenderTree to the FrameQtClient changes.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::frame):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp: Added.
        (WebCore::DumpRenderTreeClient::DumpRenderTreeClient):
        (WebCore::DumpRenderTreeClient::~DumpRenderTreeClient):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h: Added.

2006-09-03  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming plans.

2006-09-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=10693
        Convert JavaScript arrays to AppleScript lists

        * DumpRenderTree/AppleScriptController.m:
        (convertAEDescToObject):
        (-[AppleScriptController doJavaScript:]): Support printing AEDescLists.

2006-08-31  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Prepare for another round of renaming.

2006-08-29  Dan Waylonis  <waylonis@google.com>

        Reviewed by ggaren.

        - Verification of exceptions thrown in a plugin.  Test for bug 10114.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ObjCPlugin.m:
        (+[ObjCPlugin isSelectorExcludedFromWebScript:]):
        (+[ObjCPlugin webScriptNameForSelector:]):
        (-[ObjCPlugin throwIfArgumentIsNotHello:]):

2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Commit KDE related tweaks, to be able to
        differentiate between a Qt-only or a KDE build.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt: Add ksvg2/ includes.
        * QtLauncher/CMakeLists.txt: Add ksvg2/ includes.

2006-08-29  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/gdb-safari: Set DYLD_FRAMEWORK_PATH inside gdb instead of setting it in gdb's environment
        to work around what seems to be a bug in some versions of gdb.

2006-08-16  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

        Part of <rdar://problem/4481553> NetscapeMoviePlugIn example code scripting doesn't work in Firefox (4319)
        <http://bugs.webkit.org/show_bug.cgi?id=4319>: NetscapeMoviePlugIn example code scripting doesn't work
        in Firefox

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_GetValue):
        WebKit's NPP_GetValue() reference counting behavior has been changed to match Firefox.  NPObject return values
        are expected to be retained by the plug-in, and released by the caller.

2006-08-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim Hatcher.

        Fixes one chunk of: http://bugs.webkit.org/show_bug.cgi?id=10604

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::checkLoaded): Faster polling for isLoaded() in
        Qt's DumpRenderTree.

      * Scripts/run-webkit-tests:
        Use -expected-qt.txt etc.. output in run-webkit-test if isQt().

2006-08-28  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/build-drosera: Fix behavior when there are multiple options.

2006-08-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders.

        Drosera will be built when you type make.

        * Drosera/Makefile: Added.
        * Makefile: Added.
        * Makefile.shared: Added.

2006-08-27  Anders Carlsson  <acarlsson@apple.com>

        Forgot to add these.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp: Added.
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp: Added.
        (main):

2006-08-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric, landed by Anders.

        Add DumpRenderTree support for Qt/Linux.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp: Added.
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp: Added.
        (main):
        * Scripts/build-dumprendertree:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        Add QtLauncher (was testunity before), which provides a
        standalone "browser" to test the Qt platform stuff.

        * QtLauncher/CMakeLists.txt: Added.
        * QtLauncher/main.cpp: Added.
        (main):

2006-08-22  Trey Matteson  <trey@usa.net>

        Reviewed by ggaren.

        Added support for a new set of browser navigation tests.  The main feature
        is the ability for a test to queue up a set of future actions that will
        happen after that first page is loaded.  This is used to simulate a sequence
        of user actions such as filling out forms, loading additional pages or
        going back.  In addition we can now dump out the state of the back/forward
        list, and the scroll position is dumped if not at 0,0.

        * DumpRenderTree/DumpRenderTree.m:
        (main):  Init new state
        (compareHistoryItems):  New utility to support sorting.
        (dumpHistoryItem):  Write out a WebHistoryItem and kids.
        (dumpFrameScrollPosition):  Write out the scroll position.
        (dump):  Optionally write b/f list or scroll position.
        (-[WaitUntilDoneDelegate processWork:]):  Perform queued work.
        (-[WaitUntilDoneDelegate webView:locationChangeDone:forDataSource:]):
        Kick off any queued actions.  Fixed for the case of loads started in
        a subframe instead of the root frame.
        (-[WaitUntilDoneDelegate webView:didStartProvisionalLoadForFrame:]):
        Grab the topmost frame that is being loaded.  Do this as early as possible,
        instead of in didCommitLoadForFrame.
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]):
        Noting a load has started now happens in previous method.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):  Boilerplate
        (+[LayoutTestController webScriptNameForSelector:]):  Boilerplate
        (-[LayoutTestController notifyDone]):  readyToDump var is subsumed by
        topFrameLoading
        (-[LayoutTestController dumpBackForwardList]):  New impl, just set a bit.
        (-[LayoutTestController _addWorkForTarget:selector:arg1:arg2:]):
        Add new work to the queue.
        (-[LayoutTestController _doLoad:target:]):  Do a queued load.
        (-[LayoutTestController _doBackOrForwardNav:]):  Do a queued back/forward.
        (-[LayoutTestController scheduleBackNav:]):  Ways for scripts to queue actions
        (-[LayoutTestController scheduleForwardNav:]):
        (-[LayoutTestController scheduleReload]):
        (-[LayoutTestController scheduleScript:]):
        (-[LayoutTestController scheduleLoad:target:]):
        (runTest):  Clear new state for each test.  Renamed from "dumpRenderTree"
        since it's not one of the functions that does any dumping.

2006-08-15  Jonas Witt <jonas.witt@gmail.com>

        Reviewed by Darin Adler.

        - added a function to create a few DOMKeyboardEvents and dispatch
          them to a specified HTML element
          http://bugs.webkit.org/show_bug.cgi?id=9736

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController fireKeyboardEventsToElement:]):

2006-08-15  Duncan Wilcox  <duncan@mclink.it>

        Reviewed and tweaked by Darin Adler.

        - added DumpRenderTree support so editing delegate can be made to refuse edits
          to enable tests for http://bugs.webkit.org/show_bug.cgi?id=10129

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Add setAcceptsEditing:
        to the list of methods.
        (+[LayoutTestController webScriptNameForSelector:]): Use the name setAcceptsEditing,
        without the colon, for the JavaScript name.
        (-[LayoutTestController setAcceptsEditing:]): Added. Calls through to the editing
        delegate.
        (dumpRenderTree): Set the acceptsEditing flag to YES before each test.

        * DumpRenderTree/EditingDelegate.h: Added an "acceptsEditing" flag and getter and
        setter methods to the class.
        * DumpRenderTree/EditingDelegate.m:
        (-[EditingDelegate init]): Initialize acceptsEditing to YES.
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]): Instead of always returning YES,
        return the value of acceptsEditing.
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]): Ditto.
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]): Ditto.
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]): Ditto.
        (-[EditingDelegate webView:shouldDeleteDOMRange:]): Ditto.
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        Ditto.
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]): Ditto.
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]): Ditto.
        (-[EditingDelegate setAcceptsEditing:]): Added.

2006-08-03  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        Bug 10224: [Drosera] Drosera icon should be set on DroseraLauncher so it appears in nightly builds
        http://bugs.webkit.org/show_bug.cgi?id=10224

        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/LauncherInfo.plist:

2006-08-03  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        - fix ASSERTION FAILURE: draggingDocumentView == nil in -[WebViewPrivate dealloc]
          when a test performs an unsuccessful drag and drop operation.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseUp]): Added a call to -draggingExited: if the
        drag operation for the mouse release is NSDragOperationNone.

2006-08-02  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Bug 9632: [Drosera] syntax highlighting is slow (reproducible 40 second hang)
        http://bugs.webkit.org/show_bug.cgi?id=9632

        Do not change the file source when normalizing the line endings.
        We use this file source to compare against new versions of the source
        as it comes in, so we can skip re-syntax highlighting if they are the same.
        The problem is apparent on yahoo.com since they have mixed line endings and
        once we normalize them the source will always be different. This was
        compounded by the fact that yahoo has around 40 inline scripts. Each
        inline script causes us to check if the main document has more loaded,
        that is when we compare the source strings. Since they are always different
        we would syntax highlight yahoo.com 40 times! We do check source length before
        doing a more expensive string comparison, but the lengths were the same.

        * Drosera/debugger.js:

2006-08-02  Niels Leenheer  <niels.leenheer@gmail.com>

        Reviewed by Timothy.

        Bug 9931: [Drosera] Needs a cool icon
        http://bugs.webkit.org/show_bug.cgi?id=9931

        * Drosera/Drosera.icns: Added.
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Info.plist:

2006-08-01  Darin Adler  <darin@apple.com>

        - fix a bug in my recent change where the mouse position at the end of
          the last test would affect the results of the next test

        * DumpRenderTree/DumpRenderTree.m: (dumpRenderTree): Set lastMousePosition to 0.

2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10182
        Bug 10182: [Drosera] Evaluating expressions in Console is slow when current frame has many variables

        * Drosera/console.js: String.indexOf returns -1 when the string is not found.
        Correct the logic to not reload local variable list unless an '=' character is in the expression.

2006-07-31  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10171
          REGRESSION: failing layout test: fast/events/objc-event-api.html

        * DumpRenderTree/DumpRenderTree.m:
        (main): Add pose so we can implement +[NSEvent mouseLocation]. Put the window at a predictable
        location in flipped coordinates, since those are the coordinates that we use.
        (+[DumpRenderTreeEvent mouseLocation]): Implement this, since it's used for mouse event handling
        inside WebHTMLView.

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController initialize]): Removed unused webkitDomEventProperties array.
        (-[EventSendingController init]): Removed, since the whole thing was a no-op.
        (-[EventSendingController mouseMoveToX:Y:]): Convert the x,y pair to window coordinates. The old code
        probably worked OK, but this is needed to be correct.
        (-[EventSendingController handleEvent:]): Put clientX/Y before screenX/Y and removed the flipping
        code from screenY. We didn't really need to flip screenY -- what was actually happening was that the
        position that DumpRenderTree chose was in non-flipped coordinates, and with that fixed we can just
        dump the screenY as-is.

2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=10178
        Bug 10178: [Drosera] Selecting a frame in the stack list should take you to that location in the source

        * Drosera/debugger.js:  Keep a stack that contains the source file and line number references for outer
        frames.  Use this stack to determine which file and line to highlight when a stack frame is selected.

2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=10175
        Bug 10175: [Drosera] Anonymous functions show up as "(global scope)" in stack list

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject currentFunctionStack]): If the frame has a caller it isn't the global scope.

2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=10167
        Bug 10167: REGRESSION(r15688): ASSERTION FAILED: _private->mouseDownEvent != nil in layout tests

        * DumpRenderTree/EventSendingController.m: Don't set the mouse down flag
        in keyDown handler.

2006-07-30  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Maciej.

        Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
        http://bugs.webkit.org/show_bug.cgi?id=9686

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject switchToServerNamed:]): Remove as listener before resuming to
        ensure that the server does not try and notify us of events related to the resumption.
        (-[WebScriptObject webView:exceptionWasRaised:sourceId:line:forWebFrame:]): Delegate
        call through to JavaScript.
        * Drosera/debugger.js: Pause debugger when exception is raised.

2006-07-29  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed by Darin Adler.

        - fixes for Linux build

        * GdkLauncher/mk: Added call to bakefile_gen before calling make.
        * GdkLauncher/gdklauncher.bkl: Tweak comment.

2006-07-24  Dan Waylonis  <waylonis@google.com>

        Reviewed and tweaked a bit by Darin Adler.

        * DumpRenderTree/ObjCPlugin.m:
        (+[ObjCPlugin isSelectorExcludedFromWebScript:]): Added "echo:".
        (+[ObjCPlugin webScriptNameForSelector:]): Use the name "echo" for
        "echo:" so it's nice to call from JavaScript.
        (-[ObjCPlugin echo:]): Just returns the same object -- can be used
        to test a round trip through Objective-C types.

2006-07-24  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        Fix http://bugs.webkit.org/show_bug.cgi?id=10060
        Improve iExploder results parsing

        * Scripts/run-iexploder-tests: Fix Apach logs parsing to produce a correct results
        in random mode, too.

2006-07-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Timothy.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9964
          Add switch to prepare-ChangeLog to skip svn update of ChangeLog files

        * Scripts/prepare-ChangeLog: Added --[no-]update switch.

2006-07-16  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/buildbot.css:
        Removed "No newline at end of file" that snuck in as part of the "apply patch" process.
        * GdkLauncher/mk:
        Removed "Property changes" that snuck in as part of the "apply patch" process.

2006-07-16  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9875
          Teach svn-apply and svn-unapply to use patch(1) for additions and deletions

        * Scripts/svn-apply:
        (addDirectoriesIfNeeded): Don't try to add a directory that's already in svn.
        (checksum): Added.
        (patch): Use patch(1) for non-binary additions and deletions.
        * Scripts/svn-unapply:
        (checksum): Added.
        (patch): Use patch(1) for reverting non-binary additions and deletions.
        (revertDirectories): Don't try to revert a directory that hasn't changed in svn.

2006-07-13  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Timothy.

        Bug 9889: [Drosera] Stepping out when paused after last statement in function skips a frame
        http://bugs.webkit.org/show_bug.cgi?id=9889

        * Drosera/debugger.js:  Track whether we paused during the execution of willLeaveFrame.  If
        so, have stepOut pause on the next call to willExecuteStatement rather than second.

2006-07-12  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9848
          Teach svn-create-patch and friends to fix ChangeLog patches

        * Scripts/svn-apply: Added fixChangeLogPatch() and invoked it in the proper place.
        * Scripts/svn-create-patch: Ditto.
        * Scripts/svn-unapply: Ditto.

2006-07-12  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by ggaren.

        Bug 9869: [Drosera] JS Console fails to evaluate input when paused in global scope
        http://bugs.webkit.org/show_bug.cgi?id=9869

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject currentFunctionStack]): Include the global frame in the stack.

2006-07-12  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by ggaren.

        Bug 9863: Drosera needs to show something at launch
        http://bugs.webkit.org/show_bug.cgi?id=9863

        * Drosera/DebuggerApplication.m:
        (-[DebuggerApplication applicationDidFinishLaunching:]): Show the attach window on launch.

2006-07-12  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Timothy.

        Lets Drosera build universal for the nightlies. Right now it is not
        possible to build a universal binary on a PPC machine because of a
        conflict with the universal SDK.

        * BuildSlaveSupport/build-launcher-app:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2006-07-11  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Tim O.

        - test for http://bugs.webkit.org/show_bug.cgi?id=7808
        Assertion failure in -[WebBaseNetscapePluginStream dealloc] when requesting an invalid URL

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke): treat getURL() with one parameter as if the second parameter were NULL -
        should open a new stream and deliver the data to the current instance.

2006-07-11  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Bug 9598: [Drosera] add a JavaScript evaluator console
        http://bugs.webkit.org/show_bug.cgi?id=9598

        * Drosera/DebuggerApplication.h:
        * Drosera/DebuggerApplication.m:
        (-[DebuggerApplication knownServers]):
        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject evaluateScript:inCallFrame:]):
        (-[WebScriptObject showConsole:]):
        (-[WebScriptObject toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:]):
        (-[WebScriptObject toolbarDefaultItemIdentifiers:]):
        (-[WebScriptObject toolbarAllowedItemIdentifiers:]):
        (-[WebScriptObject webView:createWebViewWithRequest:]):
        (-[WebScriptObject webViewShow:]):
        (-[WebScriptObject webViewAreToolbarsVisible:]):
        (-[WebScriptObject webView:setToolbarsVisible:]):
        (-[WebScriptObject webView:setResizable:]):
        (-[WebScriptObject webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        (-[WebScriptObject scriptConfirmSheetDidEnd:returnCode:contextInfo:]):
        (-[WebScriptObject webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:]):
        (-[WebScriptObject webView:windowScriptObjectAvailable:]):
        (-[WebScriptObject webView:didFinishLoadForFrame:]):
        (-[WebScriptObject webView:didReceiveTitle:forFrame:]):
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Images/console.png: Added.
        * Drosera/console.css: Added.
        * Drosera/console.html: Added.
        * Drosera/console.js: Added.

2006-07-11  Timothy Hatcher  <timothy@apple.com>

        Reviewed by a tired Geoff.

        Bug 9597: [Drosera] hook up the variables table to show stack variables
        http://bugs.webkit.org/show_bug.cgi?id=9597

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject isSelectorExcludedFromWebScript:]):
        (-[WebScriptObject webScriptAttributeKeysForScriptObject:]):
        (-[WebScriptObject localScopeVariableNamesForCallFrame:]):
        (-[WebScriptObject valueForScopeVariableNamed:inCallFrame:]):
        (-[WebScriptObject webView:didReceiveTitle:forFrame:]):
        (-[WebScriptObject webView:didLoadMainResourceForDataSource:]):
        (-[WebScriptObject webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[WebScriptObject webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[WebScriptObject webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[WebScriptObject webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        * Drosera/debugger.css:
        * Drosera/debugger.html:
        * Drosera/debugger.js:

2006-07-10  Tim Omernick  <timo@apple.com>

        Reviewed by Beth Dakin.

        <http://bugs.webkit.org/show_bug.cgi?id=9844>:
        Add DOM access test to DumpRenderTree's Netscape plug-in

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (testDOMAccess):
        (pluginInvoke):

2006-07-10  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=9839
          Bug 9839: Nightly launcher fails to detect extensions when extension causes crash on load

        Now track three states: initializing, running, and closed.  If we are launched and the previous
        state was initializing then we likely just experienced a crash on launch.

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (myApplicationWillFinishLaunching): Improve wording of dialog.  Update to set new running state.
        (myApplicationWillTerminate): Update to use new states.
        (cleanUpAfterOurselves): Display alert if previous state was initializing.  Set state as
        initializing as early as practical.
        (symbol_lookup): Bring code up to speed with formatting guidelines.
        (GDSymbolLookup): Ditto.

2006-07-10  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:
        Remove include paths with "khtml" in them. Add one for "html" subdir or WebCore.

2006-07-09  David Kilzer  <ddkilzer@kilzer.net>

        Build fix.

        - Backed out http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Backed out previous change.

2006-07-09  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=9693
          svn-apply should set ChangeLog date correctly when applying patches

        * Scripts/svn-apply: Set the ChangeLog entry date using a configurable timezone
        before applying the patch.
        * Scripts/svn-unapply: Reset the ChangeLog entry date before unapplying the patch.

2006-07-09  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Final version of this round of renaming for posterity.

2006-07-09  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Next round of renaming. (Last round was done.)

2006-07-09  David Kilzer  <ddkilzer@kilzer.net>

        - http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Restore Hyatt's original logic to make buildbot
        work again.  Add VC++ Express check as the fallback.

2006-07-09  Bjoern Graf  <bjoern.graf@gmail.com>

        Reviewed by Timothy Hatcher.

        - http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Make Windows build work with Visual C++ Express.

2006-07-09  Joost de Valk  <jdevalk@opendarwin.org>

        Reviewed by Eric.

        Fixes bug http://bugs.webkit.org/show_bug.cgi?id=9804 .
        Patch by coldwinter@katamail.com.

        In the congratulations message, "capatibilies" should be "capabilities".

        * Scripts/build-webkit:

2006-07-09  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Timothy Hatcher.

        - http://bugs.webkit.org/show_bug.cgi?id=9794
          Teach run-webkit-tests how to ignore tests with performance improvements

        * Scripts/run-webkit-tests: Speed up test list generation, implement --ignore-tests
        feature, and minor clean up.

2006-07-08  Darin Adler  <darin@apple.com>

        Reviewed by Geoff (well, half of it at least).

        - http://bugs.webkit.org/show_bug.cgi?id=9788
          storage leaks in Objective-C tests

        * DumpRenderTree/DumpRenderTree.m: (-[LayoutTestController keepWebHistory]):
        * DumpRenderTree/ObjCPlugin.m: (-[ObjCPlugin removeBridgeRestrictions:]):
        Add a release to fix a storage leak.

2006-07-08  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: A few more.

2006-07-08  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Another cut at renames. About ready to go (later today).

2006-07-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=9734
        - add support for dumping non-HTML as text - in this case use textContent
        instead of innerText

        * DumpRenderTree/DumpRenderTree.m:
        (dump):

2006-07-02  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Bug 9631: [Drosera] Add "Step Over" and "Step Out"
        http://bugs.webkit.org/show_bug.cgi?id=9631

        Adds step over and step out. Along with a little code cleanup
        that was minor enough to piggyback on this fix.

        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument stepOver:]):
        (-[DebuggerDocument stepOut:]):
        (-[DebuggerDocument windowDidLoad]):
        (-[DebuggerDocument windowWillClose:]):
        (-[DebuggerDocument toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:]):
        (-[DebuggerDocument toolbarDefaultItemIdentifiers:]):
        (-[DebuggerDocument toolbarAllowedItemIdentifiers:]):
        (-[DebuggerDocument validateUserInterfaceItem:]):
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/debugger.html:
        * Drosera/debugger.js:
        * Drosera/viewer.css:

2006-07-02  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Bug 9628: [Drosera] Split Views acting oddly
        http://bugs.webkit.org/show_bug.cgi?id=9628

        Only update the last X or Y coordinate if the new
        size was not constrained. Also adds the resize cursor to
        the body during the drag incase there is a constrained
        over drag off of the resizer element.

        * Drosera/debugger.js:

2006-07-02  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Alexey Proskuryakov.

        Bug 9692: Warning about Safari extensions on every launch is obnoxious
        http://bugs.webkit.org/show_bug.cgi?id=9692

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (myApplicationWillTerminate): Note that we are exiting cleanly.
        (cleanUpAfterOurselves): Install bundle load tracking only if we failed
         to exit cleanly on our last invocation.  This doesn't play nicely with
         multiple concurrent instances of WebKit.app so it can be disabled via
         defaults write com.apple.Safari WKNEShouldMonitorShutdowns -bool NO.

2006-07-02  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Alexey Proskuryakov.

        Bug 9654: Refresh Loop when accessing feed URLs
        http://bugs.webkit.org/show_bug.cgi?id=9654

        * WebKitLauncher/Info.plist: Don't claim to handle feed:// URLs.

2006-07-02  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Timothy Hatcher.

        Bug 9689: Nightly builds should warn a user about potential problems when using
        "Safari extensions"
        http://bugs.webkit.org/show_bug.cgi?id=9689

        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitNightlyEnabler.m:
        (myBundleDidLoad): Keep track of if any bundles that are loaded.
        (myApplicationWillFinishLaunching):  Notify user if any bundles are loaded.
        (cleanUpAfterOurselves): Register for NSBundleDidLoadNotification and
        NSApplicationWillFinishLaunchingNotification notifications so that we can
        track bundle loads and notify the user at launch completion.

2006-06-30  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed by Darin Adler.

        - first check-in of a Gdk shell for testing WebKit

        * GdkLauncher: Added.

2006-06-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Need to call window close so WebView tears-down completly.

        * DumpRenderTree/DumpRenderTree.m:
        (main): call [window close]

2006-06-29  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        Bug 9615: Buildbot configuration should be in SVN repository
        http://bugs.webkit.org/show_bug.cgi?id=9615

        Import BuildBot configuration files as used by build.webkit.org.
        auth.py has been stubbed out so that slave passwords are not disclosed.

        * BuildSlaveSupport/build.webkit.org-config/Makefile: Added.
        * BuildSlaveSupport/build.webkit.org-config/buildbot.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/buildbot.tac: Added.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/__init__.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/auth.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/basesteps.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/schedulers.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Added.

2006-06-29  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        Bug 9614: Nightly builds should notify user if a newer build is available
        http://bugs.webkit.org/show_bug.cgi?id=9614

        * BuildSlaveSupport/build-launcher-app: Write revision number to WebKit.app's VERSION file.
        * BuildSlaveSupport/build-launcher-dmg: Pass revision number to server-side nightly maintenance
        script so it can keep track of the latest revision.
        * Scripts/run-webkit-tests: Pass build-dumprendertree's exit status through correctly.
        * WebKitLauncher/VERSION: Added.  Placeholder for SVN revision number
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/start.html: Retrieve revision number from VERSION file, and pass it through to
        the nightly start page.

2006-06-26  Jonas Witt  <jonas.witt@gmail.com>

        Reviewed by Darin Adler.

        Bug 9579: LayoutTests/fast/events/objc-event-api.html failing due to screenY output
        http://bugs.webkit.org/show_bug.cgi?id=9579

        Report screenY values as (height of zero screen - screenY)

        * DumpRenderTree/EventSendingController.m: (-[EventSendingController handleEvent:]):

2006-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        Bug 9591: [Drosera] breakpoints should be dragable and deletable by dragging off the gutter
        http://bugs.webkit.org/show_bug.cgi?id=9591

        Makes breakpoints dragable. If dragged off the gutter they are deleted.

        * Drosera/debugger.js:
        * Drosera/viewer.css:

2006-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Bug 9568: assertion failure in Safari after quitting Drosera
        http://bugs.webkit.org/show_bug.cgi?id=9568

        Call switchToServerNamed:nil and not removeLister to make sure
        the server object is set to nil to prevent further removeListener calls.

        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument applicationTerminating:]):

2006-06-25  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        * Scripts/svn-apply: Speed up isDirectoryEmptyForRemoval() by returning as soon as we find
        that the directory is not empty instead of reading in every single file and directory first,
        then checking the count.  Avoid warning in removeDirectoriesIfNeeded() if $svnOutput is not
        defined.

2006-06-25  Darin Adler  <darin@apple.com>

        * Scripts/svn-apply: Tweak comments.
        * Scripts/svn-create-patch: Ditto.
        * Scripts/svn-unapply: Ditto.

2006-06-25  David Kilzer  <ddkilzer@kilzer.net>

        Formatting fix per Bug 9571 Comment #2.

        http://bugs.webkit.org/show_bug.cgi?id=9571#c2

        * Scripts/svn-apply: Formatting fix.

2006-06-25  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=9571
        Teach svn-apply and svn-unapply to handle directory adds and removes better

        * Scripts/svn-apply: Handle directory adds more intelligently.  Handle directory removes.
        * Scripts/svn-unapply: Handle undoing both directory adds and removes.

2006-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Bug 9574: Drosera should show inline scripts within the original HTML
        http://bugs.webkit.org/show_bug.cgi?id=9574

        Refactor the JavaScript code to have a distinction between files
        and scripts. Show the script in the context of the HTML file if
        it's URL is the same as the frame's main resource. At the time of
        the disParseScript callback the main resource might not be completely
        loaded, but Drosera needs to show whatever we have at the time. Once
        the main resource is finished, update the file source and reload the file.

        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument pause]):
        (-[DebuggerDocument webView:didLoadMainResourceForDataSource:]):
        (-[DebuggerDocument webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[DebuggerDocument webView:failedToParseSource:baseLineNumber:fromURL:withError:forWebFrame:]):
        * Drosera/debugger.css:
        * Drosera/debugger.js:

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=9570
        Teach prepare-ChangeLog to operate on a list of files or directories

        * Scripts/prepare-ChangeLog: Accept a list of files and/or directories when running.
        * Scripts/svn-create-patch: Code refactoring.

2006-06-24  James G. Speth  <speth@end.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8843
          add a way to build Objective-C test cases in HTML

        Tests running in DumpRenderTree can choose to relax some restrictions of the JavaScript/Objective-C bridge
        allowing more extensive testing of the Obj-C API.  (and by more extensive, I mean this lets scripts do
        pretty much whatever they want, including acting as delegates, generating events, instantiating obj-c
        objects, etc... )

        * DumpRenderTree/ObjCPlugin.h:
        * DumpRenderTree/ObjCPlugin.m: this ability is only exposed to scripts running in DumpRenderTree
        (+[ObjCPlugin isSelectorExcludedFromWebScript:]):
        (+[ObjCPlugin webScriptNameForSelector:]):
        (-[ObjCPlugin removeBridgeRestrictions:]): scripts call this to open up obj-c for extensive testing
        (+[NSObject setAllowsScriptsFullAccess:]): makes NSObject allow all selectors to be invoked from script
        (+[NSObject allowsScriptsFullAccess]):
        (+[NSObject isSelectorExcludedFromWebScript:]): when full access is enabled, no selector is excluded
        (+[NSObject webScriptNameForSelector:]): always return nil for the default selector mutation
        (-[JSObjC classNameOfObject:isSelectorExcludedFromWebScript:]):
        (+[JSObjC webScriptNameForSelector:]):
        (-[JSObjC invokeDefaultMethodWithArguments:]): shortcut for accessing classes
        (-[JSObjC lookUpClass:]): allow scripts to retrieve obj-c classes by name
        (-[JSObjC log:]): access to NSLog function
        (-[JSObjC retainObject:]): useful obj-c functions that are otherwise hard to reach from javascript
        (-[JSObjC classOfObject:]):
        (-[JSObjC classNameOfObject:]):

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Timothy.

        * DrawTest/Info.plist: Added copyright statement.
        * Drosera/Info.plist: Ditto.
        * DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist: Ditto.
        * WebKitLauncher/Info.plist: Ditto.

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Build fix.

        - Backed out http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Backed out previous change.

2006-06-24  Bjoern Graf  <bjoern.graf@gmail.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Make Windows build work with Visual C++ Express.

2006-06-24  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=9564
          A bunch of fixes to run-webkit-httpd

        - Add an -all-interfaces (-a) flag to bind to all interfaces, not just
          127.0.0.1. Useful for testing with WinIE running on another machine;
        - don't call checkFrameworks() - we do not need a built WebKit here;
        - changed tabs to spaces;
        - disable HTTP keepalive (since Apache doesn't spawn sub-processes in
          interactive mode, they were a hassle when testing with several browsers, as one
          had to wait for connection to expire);
        - remove httpd.pid when done, so that Apache doesn't complain next time.

        * Scripts/run-webkit-httpd:

2006-06-24  Jonas Witt <jonas.witt@gmail.com>

        Reviewed by ggaren, landed by ap.

        - http://bugs.webkit.org/show_bug.cgi?id=9181
          Complete DOMUIEvent Obj-C API to reflect UIEvent

        Add function to enable logging of all events of one DOM node to stdout.

        * DumpRenderTree/EventSendingController.h:
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController initialize]):
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController enableDOMUIEventLogging:]):
        (-[EventSendingController handleEvent:]):

2006-06-23  Kevin Decker         <kdecker@apple.com>

        Reviewed by Tim Hatcher.

        - Made column headers in Drosera resizable.

2006-06-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by ggaren.

        - see http://bugs.webkit.org/show_bug.cgi?id=9539
        Another case error preventing build

        * Scripts/webkitdirs.pm: Building WebKit now requires Xcode 2.3.

2006-06-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Adds a native toolbar to Drosera to be a good citizen.
        Adds a Debug menu with key-commands for Continue, Pause and Step Into.
        Fixes a dragging bug from an earlier fix to the divider code.
        Fixes some poor indenting in debugger.js.

        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument stepInto]):
        (-[DebuggerDocument pause:]):
        (-[DebuggerDocument resume:]):
        (-[DebuggerDocument stepInto:]):
        (-[DebuggerDocument windowDidLoad]):
        (-[DebuggerDocument toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:]):
        (-[DebuggerDocument toolbarDefaultItemIdentifiers:]):
        (-[DebuggerDocument toolbarAllowedItemIdentifiers:]):
        (-[DebuggerDocument validateUserInterfaceItem:]):
        * Drosera/English.lproj/MainMenu.nib/classes.nib:
        * Drosera/English.lproj/MainMenu.nib/info.nib:
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib:
        * Drosera/debugger.css:
        * Drosera/debugger.html:
        * Drosera/debugger.js:
        * Drosera/viewer.html:

2006-06-22  Kevin Decker         <kdecker@apple.com>

        Reviewed by Anders.

        - Added pressed column header image.
        - Made column headers behave more like Xcode.

2006-06-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Kevin Decker.

        Code clean up. Adds the stackframe and makes only the body
        of the tables scrollable keeping the header visible.
        Shows the current function stack when paused or stepping.

        * Drosera/DebuggerApplication.m:
        (-[DebuggerApplication awakeFromNib]):
        (-[DebuggerApplication numberOfRowsInTableView:]):
        (-[DebuggerApplication tableView:objectValueForTableColumn:row:]):
        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument dealloc]):
        (-[DebuggerDocument currentFrame]):
        (-[DebuggerDocument currentFrameFunctionName]):
        (-[DebuggerDocument currentFunctionStack]):
        (-[DebuggerDocument log:]):
        (-[DebuggerDocument windowWillClose:]):
        (-[DebuggerDocument webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerDocument webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/debugger.css:
        * Drosera/debugger.html:
        * Drosera/debugger.js:

2006-06-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Anders.

        Teach run-webkit-httpd to properly look for webkitdirs.pm.

        * Scripts/run-webkit-httpd:

2006-06-22  Kevin Decker         <kdecker@apple.com>

        Reviewed by Tim Hatcher.

        - More progress toward Javascript Debugger.
        - Added some new images to the project.

2006-06-21  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=9516
          Would like a script to run a httpd server with the same configuration as run-webkit-tests http

        * Scripts/run-webkit-httpd: Added.

2006-06-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Builds Drosera and a launcher to include with the nightly.

        * BuildSlaveSupport/build-launcher-app:
        * BuildSlaveSupport/build-launcher-dmg:
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Info.plist:
        * Drosera/LauncherInfo.plist: Added.
        * Drosera/launcher.m: Added.
        (displayErrorAndQuit):
        (checkMacOSXVersion):
        (myExecve):
        (main):
        * Scripts/build-drosera
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/main.m:
        (main):

2006-06-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Adds a JavaScript debugger, called Drosera. Named after
        a genus of bug eating plants.

        * Drosera/DebuggerApplication.h: Added.
        * Drosera/DebuggerApplication.m: Added.
        (-[DebuggerApplication applicationDidFinishLaunching:]):
        (-[DebuggerApplication serverLoaded:]):
        (-[DebuggerApplication serverUnloaded:]):
        (-[DebuggerApplication awakeFromNib]):
        (-[DebuggerApplication showAttachPanel:]):
        (-[DebuggerApplication attach:]):
        (-[DebuggerApplication numberOfRowsInTableView:]):
        (-[DebuggerApplication tableView:objectValueForTableColumn:row:]):
        (-[DebuggerApplication tableView:willDisplayCell:forTableColumn:row:]):
        (-[DebuggerApplication tableViewSelectionDidChange:]):
        * Drosera/DebuggerDocument.h: Added.
        * Drosera/DebuggerDocument.m: Added.
        (+[WebScriptCallFrame isSelectorExcludedFromWebScript:]):
        (+[WebScriptCallFrame isKeyExcludedFromWebScript:]):
        (+[DebuggerDocument isSelectorExcludedFromWebScript:]):
        (+[DebuggerDocument isKeyExcludedFromWebScript:]):
        (-[DebuggerDocument initWithServerName:]):
        (-[DebuggerDocument windowWillClose:]):
        (-[DebuggerDocument dealloc]):
        (-[DebuggerDocument isPaused]):
        (-[DebuggerDocument pause]):
        (-[DebuggerDocument resume]):
        (-[DebuggerDocument step]):
        (-[DebuggerDocument windowNibName]):
        (-[DebuggerDocument windowDidLoad]):
        (-[DebuggerDocument switchToServerNamed:]):
        (-[DebuggerDocument applicationTerminating:]):
        (-[DebuggerDocument serverConnectionDidDie:]):
        (-[DebuggerDocument webView:windowScriptObjectAvailable:]):
        (-[DebuggerDocument webView:didFinishLoadForFrame:]):
        (-[DebuggerDocument webView:didParseSource:fromURL:sourceId:forWebFrame:]):
        (-[DebuggerDocument webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerDocument webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[DebuggerDocument webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        * Drosera/Drosera.pch: Added.
        * Drosera/Drosera.xcodeproj/project.pbxproj: Added.
        * Drosera/English.lproj/Debugger.nib/classes.nib: Added.
        * Drosera/English.lproj/Debugger.nib/info.nib: Added.
        * Drosera/English.lproj/Debugger.nib/keyedobjects.nib: Added.
        * Drosera/English.lproj/MainMenu.nib/classes.nib: Added.
        * Drosera/English.lproj/MainMenu.nib/info.nib: Added.
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib: Added.
        * Drosera/Images/breakPoint.tif: Added.
        * Drosera/Images/breakPointDisabled.tif: Added.
        * Drosera/Images/continue.tif: Added.
        * Drosera/Images/finishFunction.tif: Added.
        * Drosera/Images/glossyFooterFill.tif: Added.
        * Drosera/Images/glossyHeader.png: Added.
        * Drosera/Images/gradientBackground.png: Added.
        * Drosera/Images/gutter.png: Added.
        * Drosera/Images/navLeftDisabled.png: Added.
        * Drosera/Images/navLeftNormal.png: Added.
        * Drosera/Images/navLeftPressed.png: Added.
        * Drosera/Images/navRightDisabled.png: Added.
        * Drosera/Images/navRightNormal.png: Added.
        * Drosera/Images/navRightPressed.png: Added.
        * Drosera/Images/pause.tif: Added.
        * Drosera/Images/popUpArrows.png: Added.
        * Drosera/Images/programCounter.tif: Added.
        * Drosera/Images/programCounterBreakPoint.tif: Added.
        * Drosera/Images/programCounterBreakPointDisabled.tif: Added.
        * Drosera/Images/run.tif: Added.
        * Drosera/Images/splitterBar.tif: Added.
        * Drosera/Images/splitterDimple.tif: Added.
        * Drosera/Images/step.tif: Added.
        * Drosera/Images/stepOver.tif: Added.
        * Drosera/Images/stop.tif: Added.
        * Drosera/Images/toolbarBackground.png: Added.
        * Drosera/Info.plist: Added.
        * Drosera/debugger.css: Added.
        * Drosera/debugger.html: Added.
        * Drosera/debugger.js: Added.
        * Drosera/main.m: Added.
        (main):
        * Drosera/viewer.css: Added.
        * Drosera/viewer.html: Added.

2006-06-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9485
        Teach svn-apply and svn-unapply to use full path names

        * Scripts/svn-apply: Changed to use full path names.  Cleaned up code.
        * Scripts/svn-unapply: Ditto.

2006-06-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by ggaren.

        - http://bugs.webkit.org/show_bug.cgi?id=9150
          DumpRenderTree should be able to keep URL history during runs

        Test: LayoutTests/fast/history/clicked-link-is-visited.html

        * DumpRenderTree/DumpRenderTree.m: Add keepWebHistory function to layoutTestController
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Updated for keepWebHistory.
        (-[LayoutTestController keepWebHistory]): Added.  We only set optional shared history if
        it is currently nil since keepWebHistory() might be called more than once incidentally
        for the same test.
        (dumpRenderTree): Set optional shared history in WebHistory to nil by default.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Xcode 2.3 clean up.

2006-06-11  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9395
        Make prepare-ChangeLog faster

        * Scripts/prepare-ChangeLog: Use "svn diff" instead of "svn stat" to find changed files,
        then save the diff output for reuse.  Keep a status variable if changes are made to
        LayoutTests so "svn diff LayoutTests" doesn't have to be run to check for changes when
        WebCore is updated.  Added -h|--help command-line switch and help message.  Move test
        for no changed files closer to the beginning of the program.

2006-06-10  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by ap.

        - make DumpRenderTree build

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]): Changed _updateFocusState to _updateActiveState
        (-[WaitUntilDoneDelegate webViewFocus:]): Ditto.
        (-[LayoutTestController setWindowIsKey:]): Ditto.
        (-[LayoutTestController setMainFrameIsFirstResponder:]): Ditto.

2006-06-09  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin, landed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=9350
        Use pathcmp() when sorting paths in svn-create-patch

        * Scripts/run-webkit-tests: Fixed splitpath() to use File::Basename subroutines instead of regex.
        * Scripts/svn-create-patch: Copied numericcmp(), pathcmp() and splitpath() from run-webkit-tests.
        Changed sort() functions to use pathcmp().  Added subroutine prototypes.  Added -h command-line
        switch and printUsage() subroutine.

2006-06-06  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9322
        Teach svn-create-patch to sort its output

        * Scripts/svn-create-patch: Clean up perl code.  Sort patch output alphabetically
        by text files first, then by binary files.

2006-06-04  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9299
        Teach svn-create-patch and friends to work with binary files

        * Scripts/svn-apply: Updated to use base64-encoded text for binary files when applying patches.
        * Scripts/svn-create-patch: Updated to include binary file content as base64-encoded text in patches.
        * Scripts/svn-unapply: Updated to recognize binary files when unapplying patches.

2006-06-03  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9296
        Performance improvement for svn-create-patch

        * Scripts/svn-create-patch: Undef $indexPath after all paths have been fixed for a given patch.

2006-06-03  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9290
        Teach svn-apply and svn-unapply to patch ChangeLogs cleanly

        * Scripts/svn-apply: Fixed to apply ChangeLog patches without failing.
        * Scripts/svn-unapply: Ditto.  Also simplified reversing a deletion.

2006-06-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by hyatt.

        Switch Spinneret to new hosting mechanism

        * Spinneret/Spinneret.sln:
        * Spinneret/Spinneret/Spinneret.cpp:
        (SpinneretWebHost::updateAddressBar):
        (SpinneretWebHost::QueryInterface):
        (SpinneretWebHost::AddRef):
        (SpinneretWebHost::Release):
        (resizeSubViews):
        (_tWinMain):
        (WndProc):
        (MyEditProc):
        (About):
        (loadURL):
        * Spinneret/Spinneret/Spinneret.h:
        (SpinneretWebHost::didStartProvisionalLoadForFrame):
        (SpinneretWebHost::didReceiveServerRedirectForProvisionalLoadForFrame):
        (SpinneretWebHost::didFailProvisionalLoadWithError):
        (SpinneretWebHost::didCommitLoadForFrame):
        (SpinneretWebHost::didReceiveTitle):
        (SpinneretWebHost::didReceiveIcon):
        (SpinneretWebHost::didFinishLoadForFrame):
        (SpinneretWebHost::didFailLoadWithError):
        (SpinneretWebHost::didChangeLocationWithinPageForFrame):
        (SpinneretWebHost::willPerformClientRedirectToURL):
        (SpinneretWebHost::didCancelClientRedirectForFrame):
        (SpinneretWebHost::willCloseFrame):
        (SpinneretWebHost::windowScriptObjectAvailable):
        * Spinneret/Spinneret/Spinneret.vcproj:

2006-06-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by darin.

        Updated build script

        * Scripts/build-webkit:

2006-06-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController clearBackForwardList]):
        Add clearBackForwardList function to layoutTestController

2006-06-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=8996
        slow-utf8-text layout test case failing (no longer deterministic?)

        * DumpRenderTree/DumpRenderTree.m:
        (dump):
        Dump as text when the response MIME type is text/plain

2006-05-26  Steve Falkenburg  <sfalken@apple.com>

        Build fixes/tweaks

        * Spinneret/Spinneret.sln:
        * Spinneret/Spinneret/Spinneret.vcproj:

2006-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        Added 'GCController' to DRT to support garbage collection layout tests.

        GCController.collect() and GCController.collectOnAlternateThread() do
        what you would expect. The latter takes a boolean argument sepcifying
        whether to wait for garbage collection to finish before continuing to
        execute script.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/GCController.h: Added.
        * DumpRenderTree/GCController.mm: Added.
        (+[GCController isSelectorExcludedFromWebScript:]):
        (+[GCController webScriptNameForSelector:]):
        (-[GCController collect]):
        (-[GCController collectOnAlternateThread:]):

2006-05-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Newer Xcode removed some obsolete cruft

        * DumpRenderTree/TextInputController.m:
        (-[TextInputController textInput]):
        added (id) cast to make newer compiler happy

2006-05-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by adele.

        Fix build.

        * Spinneret/Spinneret.sln:

2006-05-18  Darin Adler  <darin@apple.com>

        - try to fix no-SVG, no-XPATH build, again

        * Scripts/build-webkit: Use FEATURE_DEFINES= instead of FEATURE_DEFINES=''.

2006-05-18  Darin Adler  <darin@apple.com>

        - try to fix no-SVG, no-XPATH build

        * Scripts/build-webkit: Pass FEATURE_DEFINES rather than GCC_PREPROCESSOR_DEFINITIONS,
        since the former is what's used in the WebCore project now.

2006-05-17  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more future renames.

2006-05-16  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        * Scripts/do-webcore-rename: Added RenderTextField => RenderTextControl and
        HTMLTextFieldInnerElement => HTMLTextControlInnerElement to list for future renames.

2006-05-15  Alexey Proskuryakov  <ap@nypop.com>

        * Scripts/install-unix-extras: Changed to be executable and removed
        text in the file generated by "svn diff".
        * Scripts/regenerate-makefiles: Ditto.

2006-05-13  Kevin M. Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin, landed by ap.

        - http://bugs.webkit.org/show_bug.cgi?id=8528
          Bakefiles (and generated Makefiles) for wx and gdk ports

        * Scripts/install-unix-extras: Added.
        * Scripts/regenerate-makefiles: Added.

2006-05-10  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Fix registry usage from perl script.  Turns out libwin32's
        SetRegValueEx, even for REG_DWORD, always takes its value as a string!

        * Scripts/install-win-extras:

2006-05-09  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build.
        Add load ended callback.

        Reviewed by kevin.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj: Fix include paths
        * Scripts/build-webkit: Build WebKitWin instead of WebCore/JavaScriptCore (WebKitWin builds those indirectly).
        * Spinneret/Spinneret/Spinneret.cpp:
        (SpinneretWebHost::loadEnd): Add callback for loadEnd() to determine success/failure of page load.
        (_tWinMain): Load built-in test content here instead of in lower-level code.
        * Spinneret/Spinneret/Spinneret.h: Add loadEnd() callback.

2006-05-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        * Scripts/extract-localizable-strings: Update for correct names of log macros.

2006-05-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        * Scripts/check-dom-results:
        Add XPath to the list of results.

2006-05-08  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Add another rename.

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

        Reviewed by eric.

        Spinneret now links against the new separate lib.

        * Spinneret/Spinneret.sln:
        * Spinneret/Spinneret/Spinneret.cpp:
        (SpinneretWebHost::updateLocationBar):
        (_tWinMain):
        * Spinneret/Spinneret/Spinneret.h:
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp: Removed.
        * Spinneret/Spinneret/WebFrame.h: Removed.
        * Spinneret/Spinneret/WebView.cpp: Removed.
        * Spinneret/Spinneret/WebView.h: Removed.

2006-04-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by kdecker

        Modify error reporting registry keys to disable Dr. Watson.
        This allows Javascript test cases to complete without blocking UI.

        * Scripts/install-win-extras:
         - Use Perl Win32 registry functions to disable blocking UI


2006-04-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by eric.

        Turned off C++ exceptions, fixed memory leaks

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:
        * Spinneret/Spinneret.sln:
        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::WebFramePrivate::~WebFramePrivate):
        (WebKit::WebFrame::WebFrame):
        (WebKit::WebFrame::~WebFrame):
        (WebKit::WebFrame::impl):
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        * Spinneret/Spinneret/stdafx.h:

2006-04-28  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8633
          DumpRenderTree should reset the URL cache

        * DumpRenderTree/DumpRenderTree.m:
        (main): Call [[NSURLCache sharedURLCache] removeAllCachedResponses].

2006-04-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        * Scripts/do-webcore-rename: rename KCanvasContainer too
        * Scripts/run-webkit-tests: output total time

2006-04-26  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt.  Landed by eseidel.

        - http://bugs.webkit.org/show_bug.cgi?id=8549
          Enable detection of excessive repainting with DumpRenderTree

        * DumpRenderTree/DumpRenderTree.m:
        (-[LayoutTestController display]):

2006-04-23  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=6905
          DumpRenderTree needs a way to force painting (to allow invalidation tests)

        * DumpRenderTree/DumpRenderTree.m:
        (dump): If display() has been called during the test, grab the pixels from
        the view, after letting it repaint invalidated rects.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController display]): Added. Calls -display on the view
        and changes the subsequent behavior of dump().
        (dumpRenderTree):

2006-04-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=8532
          Update iExploder to 1.3.2

        Test case numbers are not compatible with iExploder 1.2.

        * Scripts/run-iexploder-tests: Print the numbers of the last five tests that were accessed.

        * iExploder/CHANGELOG.txt: Added.
        * iExploder/LICENSE.txt: Changed to a standard zlib/png license.
        * iExploder/README.txt: Added some performance hints.

        * iExploder/htdocs/config.rb: Added.
        * iExploder/htdocs/cssproperties.in:
        * iExploder/htdocs/cssvalues.in:
        * iExploder/htdocs/htmlattrs.in:
        * iExploder/htdocs/htmltags.in:
        * iExploder/htdocs/iexploder.cgi:
         - Updated to support the latest HTML & CSS tags, properties, and values from both
           the WebKit and Mozilla CVS tree
         - cssproperties.in cleanup
         - Modularized the code a little bit.
         - Fix subtest bug that was causing last 5 tags to be missed
         - new subtest algorithm to deal better with larger tag counts
         - default HTML_MAX_TAGS increased from 32 to 96

        * iExploder/htdocs/index.html: Updated version to 1.3.2.
        * iExploder/htdocs/webserver.rb: Added. New standalone webserver, can be used as an
        alternative to our run-iexploder-tests.
        * iExploder/tools/showtest.rb: Added. Similar to run-iexploder-tests --get.
        * iExploder/htdocs/iexploder.rb: Added. Used by webserver.rb.
        * iExploder/tools/osx_last_crash.rb: Find logs modified in the last two days.

2006-04-22  Alexey Proskuryakov  <ap@nypop.com>

        - commit Scripts/run-mangleme-tests (missed it the previous time).

2006-04-18  Darin Adler  <darin@apple.com>

        - attempt to fix Windows buildbot

        * Scripts/install-win-extras: Temporarily changed URLs to fr.rpmfind.net.
        We need a better long-term solution for this.

2006-04-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8444
          Integrate mangleme test script.

        Works in a similar way to run-iexploder-tests.

        * Scripts/run-mangleme-tests: Added.
        * mangleme: Added.
        * mangleme/Makefile: Added.
        * mangleme/README: Added.
        * mangleme/mangle.cgi.c: Added.
        * mangleme/remangle.cgi.c: Added.
        * mangleme/tags.h: Added.

2006-04-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8443
          An easier way to save iExploder tests.

        * Scripts/run-iexploder-tests: Added a --get option to save a test into a file.

2006-04-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8421
          Integrate iExploder test script.

        This script generates artificially mangled HTML documents, to test that the browser
        doesn't crash when handling ill-formed code.

        How to use:
         run-iexploder-tests             Open an interactive test page in Safari+ToT.
         run-iexploder-tests nnnnn       Open test #nnnnn.

        Command line options:
         --guard-malloc (-g)              Use Guard Malloc.
         --port=nnnn                      Run Apache on port nnnn (default is 8000).

        To save a crashing test, you can use curl while the crash reporter dialog is on the screen
        (thus, Apache is still running), e.g.:
         curl -o iexploder293.html "http://127.0.0.1:8000/iexploder.cgi?lookup=1&test=293"

        Additionally, there are some useful scripts in WebKitTools/iExploder/tools directory.

        * Scripts/run-iexploder-tests: Added.
        * iExploder: Added.
        * iExploder/LICENSE.txt: Added.
        * iExploder/README.txt: Added.
        * iExploder/htdocs: Added.
        * iExploder/htdocs/cssproperties.in: Added.
        * iExploder/htdocs/cssvalues.in: Added.
        * iExploder/htdocs/htmlattrs.in: Added.
        * iExploder/htdocs/htmltags.in: Added.
        * iExploder/htdocs/htmlvalues.in: Added.
        * iExploder/htdocs/iexploder.cgi: Added.
        * iExploder/htdocs/index.html: Added.
        * iExploder/tools: Added.
        * iExploder/tools/lasthit.rb: Added.
        * iExploder/tools/osx_last_crash.rb: Added.

2006-04-16  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8412
          Restore color profile after a crash

        * DumpRenderTree/DumpRenderTree.m:
        (crashHandler): Added a handler for signals that are raised on a crash. Keeping separate
        from the existing handler for manual interruption (SIGINT/SIGHUP/SIGTERM), because
        I'm trying to find a way to prevent the Crash Reporter dialog from appearing on crash,
        and this code may change significantly.

        (main): Install crashHandler.

        (setDefaultColorProfileToRGB): Properly convert CFStringRef to a char buffer
        (CFStringGetCStringPtr should NEVER EVER be used!).

2006-04-15  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        * Scripts/install-win-extras: Try to fix the Windows build by fixing the URLs here.
        Seems xmlsoft.org's HTTP no longer has what we need.

2006-04-13  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Rubber-stamped by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8348
          upload-disk-image stage on buildslaves fail with "No space left on device"

        * BuildSlaveSupport/build-launcher-dmg:  Use the -srcfolder option to
          'hdiutil create'.   This creates the initial disk image based on the size of
          the source folder, and copies the contents to the new disk image.  The file
          extension on the temporary uncompressed disk image has also been altered from
          ".uncompressed" to ".uncompressed.dmg" as hdiutil on 10.4.6 Intel fails when
          the extension is not ".dmg".

2006-04-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by Tim H.

        * Scripts/update-webkit: Make this return non-zero when svn fails.

2006-04-10  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8157
          Make HTTP tests using Perl use .pl extension

        * Scripts/run-webkit-tests: Added support for running .pl and .php tests,
          removed support for .text. Reduced the number of places that explicitly list supported
          extensions. Some of the changes come from bug 8121, the patch for which got landed only
          partially.

2006-04-06  Darin Adler  <darin@apple.com>

        Changes requested by Mark Rowe.

        * BuildSlaveSupport/build-launcher-app: Set executable bit, removed property change
        trash at the end of the file.
        * BuildSlaveSupport/build-launcher-dmg: Ditto.

        * WebKitLauncher/main.m: Removed trash at end of file.

        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj: Let Xcode update comments
        to make name match.

2006-04-06  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin, landed by Maciej.

        * BuildSlaveSupport/build-launcher-app: Added.  Builds WebKit.app from WebKitLauncher
          and bundles the WebKit frameworks inside it.
        * BuildSlaveSupport/build-launcher-dmg: Added.  Builds, and optionally uploads, a disk image
          containing WebKit.app.
        * BuildSlaveSupport/run-performance-tests:  Use currentSVNRevision.
        * Scripts/webkitdirs.pm:  Add currentSVNRevision to retrieve the revision
          number of the SVN working copy.
        * WebKitLauncher: Added.
        * WebKitLauncher/Info.plist: Added.
        * WebKitLauncher/WebKitLauncher.xcodeproj: Added.
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj: Added.
        * WebKitLauncher/WebKitNightlyEnabler.m: Added.  This makes
          up the WebKitNightlyEnabler dylib which is loaded into Safari's address space
          to cause LaunchServices to treat Safari.app as WebKit.app when it is run from
          the nightly launcher.
        * WebKitLauncher/main.m: Added.  The WebKit.app launcher.
          It sets up the environment to have Safari use the bundled frameworks
          and load the WebKitNightlyEnabler dylib before exec'ing Safari
        * WebKitLauncher/start.html: Added.
        * WebKitLauncher/webkit.icns: Added.

2006-04-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Scripts/check-for-global-initializers: Remove StringImpl from the list of files that
        are allowed to have global initializers.

2006-04-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by OMG BETH

        * Scripts/run-testkjs:
        - pipe STDERR to /dev/null by default; new --verbose option overrides
        this behavior
        - set DYLD_FRAMEWORK_PATH to the webkit-configured path
        - output run command in a format that can be copied and pasted into the
        terminal to run manually

2006-04-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <http://bugs.webkit.org/show_bug.cgi?id=7567>
        A drag and drop in DumpRenderTree copies the source, instead of cutting it

        Tell the source that the drag is over after the drag is performed, not before.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseUp]):

2006-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        * DumpRenderTree/EventSendingController.m: (-[EventSendingController keyDown:withModifiers:]):
        Fixed keyDown function so that it will work if you don't pass an array of modifiers or if
        elements in that array are not strings.

2006-03-31  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - added a "--reset-results" option to run-webkit-tests so you can reset
          the results without first deleting expected results
        - <rdar://problem/4185878> add scroll position to dumpRenderTree

        * Scripts/run-webkit-tests: Rearranged the code a bit to make the sequence
        more logical. Moved all the subroutines to the end of the file. Added a
        "--force" option.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Added a new --dump-all-pixels option, used when forcing run-webkit-tests
        to generate new output for all tests it runs.
        (dump): Dump the scroll position if it's non-zero. Always dump the image when
        the --dump-all-pixels option is passed. Also tightened up the image dumping
        code and replaced the incorrect use of +[NSGraphicsContext saveGraphicsState]
        with code to save and restore the context.

        * DumpRenderTree/DumpRenderTree.h: Tweaked includes a bit and added (void).
        * DumpRenderTree/EventSendingController.m: Added now-needed include.

2006-03-30  Tim Omernick  <timo@apple.com>

        * DumpRenderTree/ObjCPlugin.h:
        Fixed copyright.
        * DumpRenderTree/ObjCPlugin.m: ditto
        * DumpRenderTree/ObjCPluginFunction.h: ditto
        * DumpRenderTree/ObjCPluginFunction.m: ditto

2006-03-30  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        Add "objCPlugin", "objCPluginFunction" properties to the window.  objCPlugin simulates
        an Objective C object exposed to JS; objCPluginFunction simulates an Objective C method
        exposed to JS as a callable object.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Added ObjCPlugin.[hm], ObjCPluginFunction.[hm].

        * DumpRenderTree/ObjCPlugin.h: Added.
        * DumpRenderTree/ObjCPlugin.m: Added.
        * DumpRenderTree/ObjCPluginFunction.h: Added.
        * DumpRenderTree/ObjCPluginFunction.m: Added.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        Added a new method, "removeDefaultMethod", which removes the default method from the
        plugin object's class.  The effect is that the plugin object is mutated from a callable
        function to a simple object.
        (pluginInvoke):
        Handle "removeDefaultMethod".
        (pluginInvokeDefault):
        Made the default method actually do something (return 1).

2006-03-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Remove WebFrame::viewImpl(), setMainFrame on page.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebViewWndProc):

2006-03-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix html editing input & basic form submission.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::submitForm):
        (WebKit::WebFrame::loadURL):
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::keyPress):
        (WebKit::WebViewWndProc):

2006-03-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/4402375>
        REGRESSION (417.8-TOT): selectionRect sometimes includes adjacent images

        Added an option to draw the selectionRect.

        * DumpRenderTree/DumpRenderTree.m:
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpSelectionRect]):
        (dumpRenderTree):

2006-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - make the global initializer check work on Xcode 2.1 (although it's better on 2.2)

        * Scripts/check-for-global-initializers: Use NATIVE_ARCH if there is no CURRENT_ARCH.

2006-03-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/check-for-global-initializers: remove svg exceptions.

2006-03-28  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Exit gracefully if $ENV{'CURRENT_ARCH'} is undefined. Rolling out my previous change.

        * Scripts/check-for-global-initializers:

2006-03-28  Timothy Hatcher  <timothy@apple.com>

        Build fix. Turn off uninitialized warnings for the first block of code.

        * Scripts/check-for-global-initializers:

2006-03-28  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        * Scripts/check-for-global-initializers: Added.

2006-03-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by darin.  Landed by eseidel.

        - http://bugs.webkit.org/show_bug.cgi?id=7947
          Add repaint testing support to run-webkit-tests

        * DumpRenderTree/DumpRenderTree.m:
        (main): Added --repaint and --horizontal-sweep options.
        (dump): Repaint line-by-line or column-by-column when the appropriate option
        is selected.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Added testRepaint()
        and repaintSweepHorizontally() methods to layoutTestController.
        (-[LayoutTestController testRepaint]):
        (-[LayoutTestController repaintSweepHorizontally]):
        (dumpRenderTree):
        * Scripts/run-webkit-tests: Added --repaint and --horizontal-sweep options
        to force these settings on tests that do not ask for them.

2006-03-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Build fix.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::openURL): replace QString with DeprecatedString

2006-03-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej

        Add support for keyDown() to DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Set the preference for tabbing to links.
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController keyDown:withModifiers:]):

2006-03-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix win32 build.

        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebView::keyPress):
        (WebKit::WebViewWndProc):

2006-03-19  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        * DumpRenderTree/DumpRenderTree.m: (main): Turn on pop-up blocking so that
        we can test it in layout tests. We don't really need tests that run with
        pop-up blocking off at the moment. If we do some day, we can add some
        API for turning it off in the layout test controller.

        * Scripts/run-webkit-tests: Since we don't use NSLanguage at all any more,
        don't ignore the leak; it should no longer show up.

2006-03-17  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric.

        * Scripts/install-win-extras:
        Fetch "Program Files" location from the environment.

2006-03-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Fix Spinneret to pass Events as const & not as pointers.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebView::keyPress):

2006-03-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Add support for basic HTML editing.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::keyPress):

2006-03-17  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by ggaren.

        Break DumpRenderTree.m up into several files to make the code more readable.

        * DumpRenderTree/DumpRenderTree.h: Added.
        * DumpRenderTree/DumpRenderTree.m:
        (doneLoading): new accessor function for "done" global.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeDraggingInfo.h: Added.
        * DumpRenderTree/DumpRenderTreeDraggingInfo.m: Added.
        * DumpRenderTree/EditingDelegate.h: Added.
        * DumpRenderTree/EditingDelegate.m: Added.
        (-[EditingDelegate webViewDidChangeSelection:]):
        * DumpRenderTree/EventSendingController.h: Added.
        * DumpRenderTree/EventSendingController.m: Added.

2006-03-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Add resize, scroll event support.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebView::keyPress):
        (WebKit::WebViewWndProc):
        * Spinneret/Spinneret/WebView.h:

2006-03-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Make build-webkit print correctly to stdout on windows.

        * Scripts/webkitdirs.pm: Fix to use devenv.com instead of devenv.exe

2006-03-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix eventSender.mouseClick() to update lastClick timestamp.

        * DumpRenderTree/DumpRenderTree.m:
        (-[EventSendingController mouseClick]):

2006-03-15  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Fix path
        that had a lowercase "i" in it so this builds on case-sensitive
        file systems.

2006-03-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric.

        Added run-testkjs and compare-timing-files scripts, to support super
        accurate JS iBench.

        * Scripts/compare-timing-files: Added.
        * Scripts/run-testkjs: Added.

2006-03-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Make the URL bar relinquish focus on page load.

        * Spinneret/Spinneret/Spinneret.cpp:
        (MyEditProc):

2006-03-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix WebView to allow KeyFocus.
        Add handling of space and shift-space for scrolling.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::scrollMessageForKey):
        (WebKit::WebViewWndProc):

2006-03-10  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Add scrolling support into Spinneret.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::paint):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::createWebView):
        (WebKit::calculateScrollDelta):
        (WebKit::scrollMessageForKey):
        (WebKit::WebViewWndProc):

2006-03-13  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix checksum generation on Intel machines.
        Also moved to CGImage APIs instead of NSBitmapImageRep, may possibly
        give a small speed boost now that it uses a shared buffer.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (dump):
        (md5HashStringForBitmap):
        * DumpRenderTree/ImageDiff.m:
        (computePercentageDifferent):

2006-03-13  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/run-webkit-tests: Fix httpd handling to work on systems that
        have it named httpd-1.3 instead.

2006-03-13  Alexey Proskuryakov  <ap@nypop.com>

        Fix proposed by Mitz Pettel, reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7718
          run-webkit-tests fast/dom/HTMLObjectElement/ hangs

        * Scripts/run-webkit-tests: Make test paths canonical, to form proper URLs
        (sequences of slashes are equivalent to a single slash in POSIX paths, but not
        in URLs).

2006-03-09  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7681
          memory leak in the plug-in tests

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_Destroy): Added code to release the plug-in object. This is the leak fix.
        (NPP_SetWindow): Remove unneeded code to store the window pointer.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        Moved the browser global in here since it's declared in this file's header.
        Changed the code to set up the pluginClass structure to not use function
        pointer casts. Those are dangerous because they can hide many types of mismatch.
        And indeed when I did this I discovered that many functions were missing their
        boolean return values or had parameter declarations with the wrong types.
        (pluginGetProperty): Use STRINGZ_TO_NPVARIANT macro for greater simplicity and
        clarity. Added boolean return value: return true when successful and false when not.
        (pluginSetProperty): Added boolean return value, return false since we have no
        properties we can set.
        (pluginInvoke): Added boolean return value. Return true when successful and false
        when not. Use NPVARIANT macros where appropriate. Added a missing release for the
        return value from calling the browser. Changed code to put the strings in malloc
        buffers instead of relying on GCC's extension that allows variable-sized arrays
        on the stack.
        (pluginInvokeDefault): Added boolean return value, return false since we have no
        default function to call.
        (pluginInvalidate): Added missing parameter. Removed comment.
        (pluginAllocate): Removed unneeded cast. This is C code, not C++, so you don't have
        to cast the result of malloc.
        (pluginDeallocate): Removed uneeded cast.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Removed some unneeded
        includes. Changed our PluginObject to use NPObject instead of re-declaring fields
        that match NPObject's fields. Removed unused NPWindow pointer.

2006-03-09  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/events/event-sender-mouse-click.html

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7583
          DRT hangs when doing eventSender.mouseDown on native widgets

        * DumpRenderTree/DumpRenderTree.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (-[EventSendingController mouseClick]): Simulates a click in a native
        widget by queueing a mouseUp before sending the mouseDown, so that
        the widget's mouse tracking event loop doesn't hang indefinitely.

2006-03-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - make link clicks work by handling link click requests
        from WebCore

        * Spinneret/Spinneret/Spinneret.cpp:
        (updateLocationBar):
        * Spinneret/Spinneret/Spinneret.h:
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        (WebKit::WebFrame::openURL):
        (WebKit::WebFrame::loadURL):
        * Spinneret/Spinneret/WebFrame.h:

2006-03-08  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Focus URL bar on Spinneret launch, remove border from WebView.
        Stop WebFrame from deleting the job (prevent crash).

        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::receivedAllData):
        (WebKit::WebFrame::paint):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::createWebView):

2006-03-09  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke): Added a method to test getURL.

2006-03-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - load URLs, not file paths, in Spinneret

        * Spinneret/Spinneret/Spinneret.cpp:
        (MyEditProc):
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::loadURL):
        (WebKit::WebFrame::receivedData):
        (WebKit::WebFrame::receivedAllData):
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::WebView):

2006-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fixed AppleScript layout test results to not be endian-dependent
          (Hyatt complained to me about this one)

        * DumpRenderTree/AppleScriptController.m: (-[AppleScriptController doJavaScript:]):
        Added specific code for dumping LongDateTime, instead of dumping the raw bytes
        (which are endian-dependent).

2006-03-07  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7655
          unwanted output while running layout tests

        * DumpRenderTree/DumpRenderTree.m:
        (checkedMalloc): Added.
        (checkedRealloc): Added.
        (makeLargeMallocFailSilently): Added.
        (main): Call makeLargeMallocFailSilently.

2006-03-06  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Add some more planned renaming.

2006-03-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::paint): force layout before painting

2006-03-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        Sent the windowNumber when sending events.
        Added leapForward so that we don't have to spend time waiting
        in layout tests that do mouse operations that require delays.

        * DumpRenderTree/DumpRenderTree.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController currentEventTime]):
        (-[EventSendingController leapForward:]):
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):

2006-03-05  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Fix a couple of things found while testing.
        Script now works (after landing my two pending patches).

2006-03-05  Darin Adler  <darin@apple.com>

        - check in a script to do a "big" rename in WebCore
          (can be run whenever we're ready to do it)

        * Scripts/do-webcore-rename: Added.

2006-03-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::loadFilePath): Close file when done.

2006-03-05  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7589
          Mouse moved events do not work in DumpRenderTree

        Test: fast/events/event-sender-mouse-moved.html

        * DumpRenderTree/DumpRenderTree.m:
        (-[EventSendingController mouseMoveToX:Y:]): Pass the correct windowNumber in the event.

2006-03-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Take advantage of new GraphicsContext constructor to implement double buffering to avoid tearing.
        Disable background erase to avoid tearing.
        Fix potential memory smasher from extra long urls.

        * Spinneret/Spinneret/Spinneret.cpp:
        (MyRegisterClass):
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::loadFilePath):
        (WebKit::WebFrame::paint):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::registerWebViewWithInstance):

2006-03-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Hang WebView pointer off of HWND (gets rid of global hack).
        Remove MessageBox displayed on url change.

        * Spinneret/Spinneret/Spinneret.cpp:
        (WndProc):
        (MyEditProc):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::registerWebViewWithInstance):
        (WebKit::WebView::createWebView):
        (WebKit::WebViewWndProc):

2006-03-04  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        Automatically kill httpd if it appears to be already running.

        * Scripts/run-webkit-tests:

2006-03-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::loadFilePath): Improved local file loading.

2006-03-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        A few more fixes to make run-webkit-tests really work on win32.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (localFileTest):
        * Scripts/run-webkit-tests:

2006-03-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Make run-webkit-tests work on win32.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (localFileTest):
        (dumpRenderTreeMain):
        (dumpRenderTreeToStdOut):
        (serializeToStdOut):
        (main):
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::WebView):

2006-03-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Add WebFrame class (to hold Frame and FrameView).
        Add Location bar support to Spinneret.

        * Spinneret/Spinneret/Spinneret.cpp:
        (resizeSubViews):
        (_tWinMain):
        (WndProc):
        (MyEditProc):
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp: Added.
        (WebKit::WebFrame::WebFramePrivate::WebFramePrivate):
        (WebKit::WebFrame::WebFramePrivate::~WebFramePrivate):
        (WebKit::WebFrame::WebFrame):
        (WebKit::WebFrame::loadFilePath):
        (WebKit::WebFrame::loadHTMLString):
        (WebKit::WebFrame::paint):
        (WebKit::WebFrame::impl):
        (WebKit::WebFrame::viewImpl):
        * Spinneret/Spinneret/WebFrame.h: Added.
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::WebViewPrivate::~WebViewPrivate):
        (WebKit::WebView::WebView):
        (WebKit::WebView::windowHandle):
        (WebKit::WebView::mainFrame):
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebViewWndProc):
        * Spinneret/Spinneret/WebView.h:

2006-03-02  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::registerWebViewWithInstance):
        (WebKit::WebView::WebView):
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebViewWndProc):
        * Spinneret/Spinneret/WebView.h:

2006-03-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Make spinneret take advantage of the new GraphicsContextCairo.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main): updated to match style guidelines.
        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::registerWebViewWithInstance):
        (WebKit::WebView::WebView):
        (WebKit::WebView::~WebView):
        (WebKit::WebView::drawRect):
        (WebKit::WndProc):
        * Spinneret/Spinneret/WebView.h:

2006-03-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        Give the events that eventSender sends a unique eventNumber

        * DumpRenderTree/DumpRenderTree.m:
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):

2006-03-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Add a stub win32 application to test WebCore drawing on windows.

        * Spinneret: Added.
        * Spinneret/Spinneret: Added.
        * Spinneret/Spinneret.sln: Added.
        * Spinneret/Spinneret/Resource.h: Added.
        * Spinneret/Spinneret/Spinneret.cpp: Added.
        (_tWinMain):
        (MyRegisterClass):
        (InitInstance):
        (WndProc):
        (About):
        * Spinneret/Spinneret/Spinneret.h: Added.
        * Spinneret/Spinneret/Spinneret.ico: Added.
        * Spinneret/Spinneret/Spinneret.rc: Added.
        * Spinneret/Spinneret/Spinneret.vcproj: Added.
        * Spinneret/Spinneret/WebView.cpp: Added.
        (WebKit::WebView::WebViewPrivate::WebViewPrivate):
        (WebKit::WebView::WebViewPrivate::~WebViewPrivate):
        (WebKit::registerWebViewWithInstance):
        (WebKit::WebView::createWebView):
        (WebKit::WebView::WebView):
        (WebKit::WebView::~WebView):
        (WebKit::WebView::drawRect):
        (WebKit::WebView::windowHandle):
        (WebKit::WndProc):
        * Spinneret/Spinneret/WebView.h: Added.
        * Spinneret/Spinneret/small.ico: Added.
        * Spinneret/Spinneret/stdafx.cpp: Added.
        * Spinneret/Spinneret/stdafx.h: Added.

2006-02-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main): add ability to dump render tree and read from a local file.

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/install-win-extras: fix dll permissions & download zlib too.

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Test new KConfig -> PlugInInfoStore change.
        http://bugs.webkit.org/show_bug.cgi?id=7498

        * DumpRenderTree/DumpRenderTree.m:
        (main): load test netscape plugin
        * Scripts/run-webkit-tests: style update

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Make DumpRenderTree link against icu.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Make DumpRenderTree link against libxml, etc.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:

2006-02-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Anders.

        Prevent rendering to the offscreen window. -[NSWindow displayIfNeeded] was
        getting called from the run loop, making the view render each test and thus slowing
        down the tests.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Set the offscreen window to not autodisplay.

2006-02-23  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - Turn http tests back on by default.
        - Wait for Apache to actually start serving requests.
        - Get user id from a built-in variable rather than an external command;
        don't pass the group.

        * Scripts/run-webkit-tests:

2006-02-23  Alexey Proskuryakov  <ap@nypop.com>

        Suggested by Mitz Pettel, reviewed by Darin Adler.

        * Scripts/run-webkit-tests: Pass User and Group directives, so that Apache
        can run CGIs even if the permissions are 700 or 600.

2006-02-23  Darin Adler  <darin@apple.com>

        Collaborating with Alexey.

        - turn off http tests by default until we figure out how to get them
          to run even when permissions on CGI files are 700 instead of 755

        * Scripts/run-webkit-tests: Set $testHTTP to 0 instead of 1 for now.

2006-02-23  Eric Seidel  <eseidel@apple.com>

        Add *.user to ignore list.

2006-02-23  Eric Seidel  <eseidel@apple.com>

        Remove binary file which shouldn't have been commited (and add to ignore list).

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.ncb: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo: Removed.

2006-02-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        * Scripts/run-webkit-tests: Put Apache log files in the right directory.

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by Tim Hatcher.

        Fix install-win-extras to not try to re-install setx if installed.

        * Scripts/install-win-extras:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        One more file possibly missing from previous commit?

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.ncb:
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Files missing from previous commit.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo:
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by justing.

        Corrected path for DumpRenderTree.intermediate files

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Fixed build-dumprendertree to exit with correct error codes.

        * Scripts/build-dumprendertree:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Update build scripts to generalize building on Win32, and allow
        building of DumpRenderTree on Win32 from build-dumprendertree.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main):
        * Scripts/build-dumprendertree:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        * DumpRenderTree/DumpRenderTree.vcproj: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.ncb: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.sln: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp: Added.
        (_tmain):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj: Added.
        * Scripts/build-webkit: make build-webkit cleanup after itself

2006-02-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=7409
          Some minor fixes to http tests.

        * Scripts/run-webkit-tests: Pass CustomLog and ErrorLog directives to httpd.

2006-02-21  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=6197
          Would like to use locally installed Apache for testing.

        Added two run-webkit-tests options:
          --http (--nohttp)  - whether to launch Apache (defaults to yes);
          --port - which port to listen on (defaults to 8000).

        Tests in LayoutTests/http are not run directly, and Apache is used instead.
        For example, http/tests/xmlhttprequest/post-content-type.html is loaded as
        http://127.0.0.1:8000/xmlhttprequest/post-content-type.html.

        Also added support for .shtml and .text files. Text files give an empty
        *-expected.txt, but a correct image.

        Apache only listens on the loopback interface. It writes logs to /tmp/WebKit.

        * Scripts/run-webkit-tests:

2006-02-21  Darin Adler  <darin@apple.com>

        Suggested by Mark Rowe.

        * Scripts/run-webkit-tests: Don't include the number of excluded leaks when
        reporting leak counts.

2006-02-18  Maciej Stachowiak <mjs@apple.com>

        Reviewed by Darin Adler.

        - Added install-win-extras script which installs some extra
        programs and libraries, and does Windows first-time setup.

        * Scripts/build-webkit: Add a newline between build results.
        * Scripts/install-win-extras: Added.

2006-02-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=7308
          DumpRenderTree should be able to load files via HTTP

        * DumpRenderTree/DumpRenderTree.m: (dumpRenderTree):
        Handle tests starting with "http://" as real URLs, not file system paths.

2006-02-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7357
          REGRESSION: Warnings from WebKit scripts if PBXProductDirectory is undefined

        * Scripts/webkitdirs.pm: only call chomp if PBXProductDirectory is configured.

2006-02-18  Darin Adler  <darin@apple.com>

        * Scripts/commit-log-editor: Added.

2006-02-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Make Win32 have the same default "WebKitBuild" directory behavior.

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

2006-02-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by Beth.

        * Scripts/build-webkit: make win32 actually report errors

2006-02-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        * Scripts/run-webkit-tests: Ignore quicktime plugin leaks

2006-02-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        * Scripts/run-webkit-tests: Ignore flash leaks

2006-02-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <http://bugs.webkit.org/show_bug.cgi?id=7148>
        Add drag and drop support to DumpRenderTree

        Intercept the drag start using the new UI delegate method, package an NSDraggingInfo,
        and send dragging updates.  Put DumpRenderTree's WebView into an offscreen window.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]):
        (-[WaitUntilDoneDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):
        (-[WaitUntilDoneDelegate webViewFocus:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setWindowIsKey:]):
        (-[LayoutTestController setMainFrameIsFirstResponder:]):
        (-[EventSendingController init]):
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (dumpRenderTree):
        (-[DumpRenderTreeWindow isKeyWindow]):
        (-[DumpRenderTreeDraggingInfo initWithImage:offset:pasteboard:source:]):
        (-[DumpRenderTreeDraggingInfo dealloc]):
        (-[DumpRenderTreeDraggingInfo draggingDestinationWindow]):
        (-[DumpRenderTreeDraggingInfo draggingSourceOperationMask]):
        (-[DumpRenderTreeDraggingInfo draggingLocation]):
        (-[DumpRenderTreeDraggingInfo draggedImageLocation]):
        (-[DumpRenderTreeDraggingInfo draggedImage]):
        (-[DumpRenderTreeDraggingInfo draggingPasteboard]):
        (-[DumpRenderTreeDraggingInfo draggingSource]):
        (-[DumpRenderTreeDraggingInfo draggingSequenceNumber]):
        (-[DumpRenderTreeDraggingInfo slideDraggedImageTo:]):
        (-[DumpRenderTreeDraggingInfo namesOfPromisedFilesDroppedAtDestination:]):
        * DumpRenderTree/TextInputController.m:
        (-[TextInputController firstRectForCharactersFrom:length:]):
        (-[TextInputController characterIndexForPointX:Y:]):

2006-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric.

        * DumpRenderTree/DumpRenderTree.m:
        (-[LayoutTestController invokeUndefinedMethodFromWebScript:withArguments:]):
        Added a dummy method for the sake of LayoutTests/plugins/
        undefined-property-crash.html. (It tests a crash due to fallback
        object use. WebCore won't create a fallback object if the method is
        not defined.)

2006-02-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        * Scripts/run-webkit-tests: added --results-directory (-o) option

2006-02-09  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by mjs.

        Renamed split-class to split-file-by-class.

        * Scripts/build-webkit: Updated copyright.
        * Scripts/split-class: Removed.
        * Scripts/split-file-by-class: Added.

2006-02-08  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by mjs.

        Adding new script for splitting multi-class files.
        Also adding supporting perl module with space removing heuristics.

        * Scripts/SpacingHeuristics.pm: Added.
        * Scripts/build-drawtest: updated copyright header
        * Scripts/split-class: Added.

2006-02-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher

        Changes to test fix for:
        <http://bugs.webkit.org/show_bug.cgi?id=3982>
        webViewDidBeginEditing, webViewDidEndEditing notification methods not called on delegate

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setWindowHasFocus:]):
        (-[LayoutTestController setDisplaysWithFocusAttributes:]):

2006-02-07  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Timothy.

        Support automated testing of AppleScript "do JavaScript" command
        http://bugs.webkit.org/show_bug.cgi?id=7012

        * DumpRenderTree/AppleScriptController.h: Added.
        * DumpRenderTree/AppleScriptController.m: Added.
        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2006-02-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix build-webkit for use on win32 (unblocks buildbot usage).
        http://bugs.webkit.org/show_bug.cgi?id=7122

        * Scripts/build-webkit: use ifCygwin() to conditionalize builds
        * Scripts/webkitdirs.pm: add ifOSX() and ifCygwin()

2006-02-06  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by darin & mjs.

        Added new support directory for build slave scripts.
        Committing the first script, for use by the PLT's build slave.
        This script is used to kick of the PLT (Page Load Test) slave.

        * BuildSlaveSupport: Added.
        * BuildSlaveSupport/run-performance-tests: Added.

2006-02-06  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by darin.

        Adding setSourceDir for scripts stored in non-standard locations.

        * Scripts/webkitdirs.pm:

2006-02-04  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Add a compatibilty hack for people with old
        Configuration files that say Development or Deployment in them.

2006-02-04  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Don't create a wrapper if there's a disabled
        wrapper already in the directory.
        * Scripts/svn-apply: Handle additions and deletions properly -- I've been noticing
        these haven't been working at all.
        * Scripts/svn-unapply: Ditto.

2006-02-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Renamed configuration names to Debug, Release and Production.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * Scripts/set-webkit-configuration:
        * Scripts/webkitdirs.pm:

2006-02-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher

        Enabled spell checking for layout tests.

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2006-01-29  Darin Adler  <darin@apple.com>

        * Scripts/svn-apply: Added comments about things we should do to improve.
        * Scripts/svn-create-patch: Ditto.
        * Scripts/svn-unapply: Ditto.

2006-01-28  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.m: (dump): Dump the image if it's not
        already there, even if the checksum is correct.

2006-01-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        * Scripts/run-webkit-tests: make new tests use absolute urls

2006-01-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        make run-webkit-tests output total leaks count

        * Scripts/run-webkit-tests:

2006-01-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        run-webkit-test --leaks crashes (malloc logging runs out of memory)
        http://bugs.webkit.org/show_bug.cgi?id=6869

        * Scripts/run-webkit-tests: fix --leaks to not crash

2006-01-26  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        run-webkit-tests should produce a self-contained results directory
        http://bugs.webkit.org/show_bug.cgi?id=6864

        * Scripts/run-webkit-tests: copy failing items to results dir.

2006-01-23  Darin Adler  <darin@apple.com>

         - fix http://bugs.webkit.org/show_bug.cgi?id=3608
           need script to update localizable strings file in WebKit

        * Scripts/update-webkit-localizable-strings: Added.

2006-01-23  Darin Adler  <darin@apple.com>

        - added a couple of scripts -- more about these two soon

        * Scripts/extract-localizable-strings: Added.
        * Scripts/merge-changelog: Added.

2006-01-22  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Anders.

        Build fix.  build-webkit dies with "invalid build action: (empty string)"

        * Scripts/build-webkit:
        Use svgOptions in an array context so xcodebuild doesn't choke on an empty argument.

2006-01-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by anders.

        Fix --no-svg option to use XCode flags instead of gcc flags.

        * Scripts/build-webkit:

2006-01-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by anders.

        Update build-webkit to use -USVG_SUPPORT instead of -no-SVG target.

        * Scripts/build-webkit:

2006-01-20  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by eseidel.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=6682
        Call to checkWebCoreSVGSupport() broken in build-drawtest and run-drawtest

        * Scripts/build-drawtest: Changed bareword 'true' to 1.
        * Scripts/run-drawtest: Changed bareword 'true' to 1.

2006-01-19  Darin Adler  <darin@apple.com>

        * Scripts/report-include-statistics: Added a new script.

2006-01-19  Timothy Hatcher  <timothy@apple.com>

        * Scripts/build-webkit: include JavaScriptGlue in the build

2006-01-19  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Changed SVG check to work even if the path has
        spaces in it by using the form of open that treats each argument as a string
        rather than backtick syntax for reading the output of the nm tool.

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

        Reviewed by Darin Adler.

        - make prepare-ChangeLog way faster by using svn diff instead of svn status to
        detect if there are any new tests

        * Scripts/prepare-ChangeLog:

2006-01-12  Darin Adler  <darin@apple.com>

        - removed some of the cvs-specific scripts -- not needed for this project any more

        * Scripts/cvs-abandon: Removed.
        * Scripts/cvs-apply: Removed.
        * Scripts/cvs-create-patch: Removed.
        * Scripts/cvs-unapply: Removed.

2006-01-10  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by eseidel.  Committed by eseidel.

        - run-webkit-tests always launches Safari when tests fail
        http://bugs.webkit.org/show_bug.cgi?id=6456

        * Scripts/run-webkit-tests:
        Add a command-line flag to prevent Safari being launched to display failed
        tests.  Always exit with non-zero status when tests have failed.

2006-01-10  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by eseidel.  Committed by eseidel.

        - build-webkit should exit with non-zero status when build fails
        http://bugs.webkit.org/show_bug.cgi?id=6459

        * Scripts/build-webkit:
        Use correct bits of subprocess exit code when passing back through
        as build-webkit's exit code.

2006-01-10  Eric Seidel  <eseidel@apple.com>

        Restored corrupted nibs from TOT CVS.

        * DrawTest/English.lproj/DrawTestDocument.nib: Replaced.
        * DrawTest/English.lproj/DrawTestDocument.nib/classes.nib: Replaced.
        * DrawTest/English.lproj/DrawTestDocument.nib/info.nib: Replaced.
        * DrawTest/English.lproj/DrawTestDocument.nib/keyedobjects.nib: Replaced.
        * DrawTest/English.lproj/Inspector.nib: Replaced.
        * DrawTest/English.lproj/Inspector.nib/classes.nib: Replaced.
        * DrawTest/English.lproj/Inspector.nib/info.nib: Replaced.
        * DrawTest/English.lproj/Inspector.nib/keyedobjects.nib: Replaced.
        * DrawTest/English.lproj/MainMenu.nib: Replaced.
        * DrawTest/English.lproj/MainMenu.nib/classes.nib: Replaced.
        * DrawTest/English.lproj/MainMenu.nib/info.nib: Replaced.
        * DrawTest/English.lproj/MainMenu.nib/keyedobjects.nib: Replaced.
        * DrawTest/English.lproj/TestViewer.nib: Replaced.
        * DrawTest/English.lproj/TestViewer.nib/classes.nib: Replaced.
        * DrawTest/English.lproj/TestViewer.nib/info.nib: Replaced.
        * DrawTest/English.lproj/TestViewer.nib/keyedobjects.nib: Replaced.

2006-01-10  Nefaur Khandker  <nefaurk@gmail.com>

        Reviewed by eseidel.  Committed by eseidel.

        DrawTestView now subclasses WebView instead of DrawView.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * DrawTest/DrawTestDocument.h:
        * DrawTest/DrawTestDocument.m:
        (-[DrawTestDocument dealloc]):
        (-[DrawTestDocument readFromFile:ofType:]):
        (-[DrawTestDocument windowControllerDidLoadNib:]):
        (-[DrawTestDocument dumpSVGToConsole:]):
        (-[DrawTestDocument openSourceForSelection:]):
        (-[DrawTestDocument dataRepresentationOfType:]):
        * DrawTest/DrawTestToolbarController.h:
        * DrawTest/DrawTestToolbarController.m:
        (-[DrawTestToolbarController initWithDrawView:]):
        (-[DrawTestToolbarController clickedToolbarItem:]):
        (-[DrawTestToolbarController validateToolbarItem:]):
        * DrawTest/DrawTestView.h:
        * DrawTest/DrawTestView.m:
        (-[DrawTestView initWithFrame:]):
        (-[DrawTestView setDocument:]):
        * DrawTest/SVGTest.h:
        * DrawTest/SVGTest.m:
        (+[SVGTest sharedDrawView]):
        (-[SVGTest generateCompositeIfNecessary]):
        * DrawTest/TestController.h:
        * DrawTest/TestController.m:
        (-[TestController awakeFromNib]):
        (-[TestController setSelectedTest:]):
        (-[TestController openTestViewerForSelection:]):
        (-[TestController toggleViewersScaleRule:]):
        * DrawTest/TestViewerSplitView.m:
        (-[TestViewerSplitView drawRect:]):

2006-01-10  Anders Carlsson  <andersca@mac.com>

        Reviewed by Timothy.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Set the default language to "en", so language tests will work.

2006-01-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - script to generate HTML wrappers for JS tests
        http://bugs.webkit.org/show_bug.cgi?id=6441

        * Scripts/make-js-test-wrappers: Added.

2006-01-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        * Scripts/svn-create-patch: Fix to work when passed directory names.

2006-01-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric.

        - Added back/forward navigation support to DumpRenderTree. Hopefully we
        can start writing automated loader tests now. I have one in the works.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Construct global navigationController on entry, destroy on exit.
        Set frame to nil on exit too, to match all the other global objects.
        (Probably academic, since the process is exiting, anyway.)
        (-[WaitUntilDoneDelegate webView:didFinishLoadForFrame:]): Notify the
        navigationController, in case it wants to kick off a load.
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]): Expose
        the navigationController to scripting.

        New class, should be straightforward:

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/NavigationController.h: Added.
        * DumpRenderTree/NavigationController.m: Added.

        (+[NavigationController isSelectorExcludedFromWebScript:]):
        (+[NavigationController webScriptNameForSelector:]):
        (-[NavigationController setPendingScript:]):
        (-[NavigationController setPendingRequest:]):
        (-[NavigationController evaluateWebScript:afterBackForwardNavigation:]):
        (-[NavigationController webView:didFinishLoadForFrame:]):
        (-[NavigationController dealloc]):

2006-01-08  Timothy Hatcher  <timothy@apple.com>

        Removed this script, no longer needs with the Subversion switch.

        * checkout: Removed.

2006-01-08  Timothy Hatcher  <timothy@apple.com>

        Removes some stray tabs.

        * Scripts/update-webkit:

2005-01-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        build-webkit should pass on build arguments from command line
        http://bugs.webkit.org/show_bug.cgi?id=5854

        * Scripts/build-webkit:

2006-01-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs & xenon.

        * Scripts/update-webkit: support Internal updates as well

2006-01-06  Geoffrey Garen  <ggaren@apple.com>

        Temporarily rolling out plugin support from DumpRenderTree because it
        caused lots of layout test regressions.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Remove invisible window added to support plugins.

2006-01-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6361
        Add plugin support to DumpRenderTree

        Also wrote first test plugin.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (1) Put the WebView in an invisible window, because PlugIns are
        optimized not to load if there's no parent window.
        (2) Tell WebKit to load any PlugIns in the directory from which we
        loaded. This means we can build nasty PlugIns alongside DumpRenderTree
        and they'll load automagically during layout testing, but they won't be
        added to the user's system, hosing apps like Safari.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added new
        test PlugIn to project.

        PlugIn added to project:

        * DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist: Added.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: Added.
        (getPluginClass):
        (initializeIdentifiers):
        (pluginHasProperty):
        (pluginHasMethod):
        (pluginGetProperty):
        (pluginSetProperty):
        (pluginInvoke):
        (pluginInvokeDefault):
        (pluginInvalidate):
        (pluginAllocate):
        (pluginDeallocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Added.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c: Added.
        (NP_Initialize):
        (NP_GetEntryPoints):
        (NP_Shutdown):
        (NPP_New):
        (NPP_Destroy):
        (NPP_SetWindow):
        (NPP_NewStream):
        (NPP_DestroyStream):
        (NPP_WriteReady):
        (NPP_Write):
        (NPP_StreamAsFile):
        (NPP_Print):
        (NPP_HandleEvent):
        (NPP_URLNotify):
        (NPP_GetValue):
        (NPP_SetValue):

2006-01-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.
        Created by Eric.
        Tweaked and tested by me.

        New scripts to work with Subversion when the switch happens.
        These will replace cvs-apply, cvs-unapply, and cvs-create-patch.

        * Scripts/svn-apply: Added.
        * Scripts/svn-create-patch: Added.
        * Scripts/svn-unapply: Added.

2005-12-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Move WebView width/height logic into DumpRenderTree to support
        running the W3C SVG 1.1 tests along side other tests.  The W3C
        SVG 1.1 tests require a 480x360 view.

        * DumpRenderTree/DumpRenderTree.m:
        (main): don't accept width/height
        (dump): override width/height for SVG/W3C
        * Scripts/run-webkit-tests: don't pass width/height

2005-12-30  Eric Seidel  <eseidel@apple.com>

        No review, only removing dead code.

        * DumpKCanvasTree/DumpKCanvasTree.m: Removed.
        * DumpKCanvasTree/DumpKCanvasTree.xcodeproj/project.pbxproj: Removed.

2005-12-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        DumpRenderTree should set a consistent color profile while running
        http://bugs.webkit.org/show_bug.cgi?id=6155

        Creates consistent colormatched renderings on every test machine
        using the only way possible with Tiger APIs: by setting the
        system color profile on the test machine for the duration of the
        tests.  This will (unfortunately) cause colors to change while
        running DumpRenderTree.  This can also cause "permanent" color
        changes to occur if DRT is to crash (SIGSEGV, etc.) while running.
        This is far from ideal, but it's be best way we've found to deal
        with the issue for now.

        * DumpRenderTree/DumpRenderTree.m:
        (restoreColorSpace):
        (setDefaultColorProfileToRGB):
        (main):

2005-12-20  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5846
          cvs-create-patch --include produces incorrect paths

        * Scripts/cvs-create-patch: Handle newly-added directories using chdir.

2005-12-19  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: stop /etc/catalog warnings

2005-12-19  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4990
          WebKit needs to use a local pasteboard during testing

        * DumpRenderTree/DumpRenderTree.m:
        (main): Call poseAs to substitute our NSPasteboard class for the default one.
        Create a local pasteboard (really a global one with a unique name) and release
        it when exiting from the function so we don't leave it in the pasteboard server.
        (dumpRenderTree): Added an autorelease pool around one small bit of code that
        ddn't have one. Fixed a leak in an unlikely error case.
        (+[DumpRenderTreePasteboard generalPasteboard]): Override the default version
        of this method to return our local pasteboard.

2005-12-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/build-webkit: --svg is now default!

2005-12-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Don't run svg test automatically if +SVG is built (yet).

        * Scripts/run-webkit-tests:

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

        * Scripts/run-webkit-tests: Don't run tests in directories named "svg" if SVG
        support is not compiled in. Report the 10 slowest tests if "--slowest" is
        passed on the command line.

2005-12-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        Remove special-case handling for nib files. This avoided trouble with cvs diff
        when we were using wrappers for nib files. Now that we aren't using wrappers,
        there's no reason to avoid adding the modified nib files to the file list that
        gets diffed.

2005-12-05  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Script updates for SVG files move (remove references to SVGSupport)

        * Scripts/build-webkit: remove SVGSupport
        * Scripts/run-webkit-tests: Resources -> resources for --svg
        * Scripts/update-webkit: remove SVGSupport

2005-12-05  Eric Seidel  <eseidel@apple.com>

        Reviewed mjs.

        * checkout: remove --svg support, SVG is now checked out by default

2005-11-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Update scripts to run SVG tests automatically (w/o --svg) if
        WebCore is built with SVG support.

        * Scripts/build-drawtest: SVG support required
        * Scripts/build-dumpkcanvastree: Removed.
        * Scripts/run-drawtest: SVG support required to run
        * Scripts/run-webkit-tests: pass *.svg files if WebCore has support
        * Scripts/webkitdirs.pm: changed CheckWebCoreSVGSupport

2005-11-28  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler. Committed by Maciej.

        - fixed "DumpRenderTree should test for Ahem before doing anything else"
        (http://bugs.webkit.org/show_bug.cgi?id=5838)

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2005-11-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by sullivan and GGAREN.

        Minor additions to make error messages more clear from cvs-apply.

        * Scripts/cvs-apply: make errors more clear

2005-11-27  Oliver Hunt  <ojh16@student.canterbury.ac.nz>

        Reviewed and committed by Maciej.

        - fixed cvs-create-patch --include produces incorrect paths
        (http://bugs.webkit.org/show_bug.cgi?id=5846)

        * Scripts/cvs-create-patch: produce proper paths for new files.

2005-11-21  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Some simple fixes to the build/test scripts now that SVG uses the
        WebCore DOM.  JSC+SVG is no longer needed, nor is RTTI support
        or symlinks for KDOM.

        * Scripts/build-webkit: No longer builds JavaScriptCore+SVG
        * Scripts/prepare-ChangeLog: handles missing LayoutTests directory
        * Scripts/run-webkit-tests: now runs SVG tests using DRT
        * Scripts/webkitdirs.pm: use SVG symbols instead of RTTI
        * checkout: no longer symlink kdom

2005-11-10  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        * Scripts/build-webkit: Pass through options to xcodebuild

2005-11-07  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Fix case where the patch has files at the top level.

2005-11-03  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        * Scripts/run-safari:
        changed message to say "Starting Safari" instead of odd "Start Safari"
        * Scripts/run-webkit-tests:
        changed the way we pass the file parameter to use -NSOpen rather than relying on
        unlabeled arguments being treated as files. This was failing on some machines that
        (mysteriously) had NSTreatUnknownArgumentsAsOpen set to NO in com.apple.Safari.plist.

2005-10-27  Geoffrey Garen  <ggaren@apple.com>

        Patch by Alexey Proskuryakov.

        Reviewed by Maciej.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=5303
        TextInputController should support attributed strings

        * DumpRenderTree/TextInputController.m:
        (+[NSMutableAttributedString isSelectorExcludedFromWebScript:]):
        (+[NSMutableAttributedString webScriptNameForSelector:]):
        (-[NSMutableAttributedString getLength]):
        (-[NSMutableAttributedString attributeNamesAtIndex:]):
        (-[NSMutableAttributedString valueOfAttribute:atIndex:]):
        (-[NSMutableAttributedString addAttribute:value:]):
        (-[NSMutableAttributedString addAttribute:value:from:length:]):
        (-[NSMutableAttributedString addColorAttribute:red:green:blue:alpha:]):
        (-[NSMutableAttributedString addColorAttribute:red:green:blue:alpha:from:length:]):
        (-[NSMutableAttributedString addFontAttribute:fontName:size:]):
        (-[NSMutableAttributedString addFontAttribute:fontName:size:from:length:]):
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController insertText:]):
        (-[TextInputController attributedSubstringFrom:length:]):
        (-[TextInputController attributedStringWithString:]):

2005-10-11  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Checks for leaks in ImageDiff too.

        * Scripts/run-webkit-tests:

2005-10-09  Darin Adler  <darin@apple.com>

        * Scripts/check-dom-results: Dump ".xhtml" for tests in the xhtml directory.
        * Scripts/cvs-apply: Handle added/deleted files in the current directory.
        * Scripts/cvs-unapply: Ditto.
        * Scripts/run-webkit-tests: Add a few more false-positive leaks.

2005-10-08  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed, rearranged and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4707
          Need a way to automatically test for regressions in NSTextInput implementation

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        Create a text input controller and put it in a property of the window object.

        * DumpRenderTree/TextInputController.h: Added.
        * DumpRenderTree/TextInputController.m: Added.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added files.

2005-10-06  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Fixed merge option to work better when not all directories
        are controlled by cvs, or when changes cross multiple repositories.
        * Scripts/update-webkit: Don't print messages if the "quiet" flag is set.

2005-10-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Make mouseDown and mouseUp force layout before acting.
        This is used by a new test case for 4233558.

        * DumpRenderTree/DumpRenderTree.m:
        (-[EventSendingController mouseDown]): force layout
        (-[EventSendingController mouseUp]): force layout

2005-09-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by xenon.

        Updated all the scripts for the move:
        WebCore/layout-tests -> LayoutTests

        * Scripts/check-dom-results:
        * Scripts/prepare-ChangeLog:
        * Scripts/run-webkit-tests:
        * Scripts/update-webkit: added --no-tests
        * checkout: added --no-tests

2005-09-28  Darin Adler  <darin@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=5144
          pixel test should run even if render trees differ

        * Scripts/run-webkit-tests: Don't check if the text dump matches.

2005-09-27  Eric Seidel  <eseidel@apple.com>

        No review needed, SVG build fix only.

        * DumpKCanvasTree/DumpKCanvasTree.m:
        Missed one in my previous checkin.
        http://bugs.webkit.org/show_bug.cgi?id=5141

2005-09-26  Eric Seidel  <eseidel@apple.com>

        No review needed, SVG build fix only.

        * DrawTest/DrawTestDocument.m:
        * DrawTest/DrawTestToolbarController.m:
        * DrawTest/DrawTestView.h:
        * DrawTest/DrawTestView.m:
        * DrawTest/SVGTest.m:
        * DrawTest/TestController.m:
        Updated for WebCore+SVG -> WebCore rename.
        http://bugs.webkit.org/show_bug.cgi?id=5141

2005-09-26  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        * DumpRenderTree/DumpRenderTree.m:
        (dump): updated error message
        * Scripts/check-dom-results: now includes xhtml
        Tool updates for xhtml.
        http://bugs.webkit.org/show_bug.cgi?id=4907

2005-09-22  Duncan Wilcox  <duncan@mclink.it>

        Reviewed by Maciej.
        Landed by Darin Adler.

        - patch for <http://bugs.webkit.org/show_bug.cgi?id=4963>
        "Would like to simulate human interaction with webview"

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController init]):
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):
        Add eventSender javascript object, that sends fake mouse events to the webview.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        link with Carbon.framework

2005-09-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Update tools for WebCore+SVG -> WebCore rename.
        Also fold several SVG specific tools into their original
        WebCore counterparts.
        http://bugs.webkit.org/show_bug.cgi?id=5003

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * DumpKCanvasTree/DumpKCanvasTree.xcodeproj/project.pbxproj:
        * Scripts/build-drawtest:
        * Scripts/build-dumpkcanvastree:
        * Scripts/build-webcore-svg: Removed.
        * Scripts/build-webkit: added --svg option
        * Scripts/run-drawtest:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm: various additions.
        * checkout: added --svg option
        * checkout-svg: Removed.

2005-09-19  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: added --guard-malloc option
        http://bugs.webkit.org/show_bug.cgi?id=4613

2005-09-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by geoff

        Removed a script that is only used by apple internal developers

        * Scripts/update-webkitsysteminterface: Removed.

2005-09-16  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        * Scripts/prepare-ChangeLog: Allow semicolons for protocols too.

2005-09-14  Darin Adler  <darin@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4291
          dumpAsText doesn't work with XHTML documents

        * DumpRenderTree/DumpRenderTree.m: (dump): Dump the innerText of the document element
        rather than of the body element. This works with typical XHTML documents. We can probably
        do something even better in the long run, but this fixes the immediate issue.

        - separate tweak

        * Scripts/run-webkit-tests: Show the results in the current built Safari by using
        run-safari instead of just using "open", which often runs another copy of Safari instead.

2005-09-11  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed, tweaked, and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4286
          .Mac prefpane crashes when Safari using CVS WebKit is running

        * Scripts/run-safari: Set WEBKIT_UNSET_DYLD_FRAMEWORK_PATH.
        * Scripts/run-webkit-app: Ditto.

2005-09-11  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Oops. Use spaces, not tabs.

2005-09-11  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        * Scripts/run-webkit-tests: Sort tests with a new "pathcmp" function that's better in
        two ways: 1) puts all files in a directory before any files in a subdirectory, and
        2) sort file names with numeric digits in them in a logical way, so test-33 will come
        before test-3.

2005-09-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        * Scripts/update-webkitsysteminterface: Added.
        Builds webkitsysteminterface and moves the built product and header into WebKitLibraries

2005-09-01  John Sullivan  <sullivan@apple.com>

        * Scripts/run-webkit-tests:
        Excluded a known system leak to reduce noise; added comments about which leaks
        are being excluded.

2005-09-01  Tim Omernick  <tomernick@apple.com>

        Change made by Darin, reviewed by John and myself.

        - Allow semicolons at the end of method declarations (this is for method implementations; the semicolon is required for interface declarations).

        * Scripts/prepare-ChangeLog:

2005-08-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - set color variant and font settings to a consistent value.
        (http://bugs.webkit.org/show_bug.cgi?id=4769)

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2005-08-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * Scripts/build-svg2png: Removed.
        * svg2png/ImageDiff.h: Removed.
        * svg2png/ImageDiff.m: Removed.
        * svg2png/svg2png.m: Removed.
        * svg2png/svg2png.xcodeproj/project.pbxproj: Removed.
        * svg2png/svg2png_Prefix.pch: Removed.
        svg2png is no longer needed.

2005-08-30  Darin Adler  <darin@apple.com>

        * Scripts/check-dom-results: Special case 100% to say something nice.
        * Scripts/cvs-apply: Added "--merge" which automatically rolls back the tree before
        applying the patch (need a better name).
        * Scripts/find-extra-includes: Added. Experimental tool to find unneeded includes.

2005-08-30  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Small formatting fix for leaks mode.

2005-08-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4723
        (some pixel tests fail when AA settings are changed)

        * DumpRenderTree/DumpRenderTree.m:
        (main): set AA settings to the default values

2005-08-29  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        * Scripts/run-webkit-tests: Added a mode where each test is run with a separate
        executable -- much slower but can help pinpoint leaks. Changed formatting of some
        messages too.

2005-08-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4720
        (webkit pixel tests don't give consistent results with changed scrollbar arrow setting)

        * DumpRenderTree/DumpRenderTree.m:
        (main): set scrollbar arrow setting to a consistent value

2005-08-27  Jussi Hagman  <juhagman@abo.fi>

        Reviewed and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4676
          output of update-webkit is too verbose

        * Scripts/update-webkit:
        Added option --quiet (-q) to decrease the amount of output.

2005-08-27  Darin Adler  <darin@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4596
          cvs-create-patch --include-unknowns should ignore hidden files

        * Scripts/cvs-create-patch: Add code to check for files starting with ".".

2005-08-25  Ben La Monica  <ben.lamonica@gmail.com>

        Reviewed, tweaked, and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4585
          update-webkit doesn't notice when you have SVGSupport and update properly

        * Scripts/update-webkit: Build SVGSupport directory if it's present.

2005-08-25  Anders Carlsson  <andersca@mac.com>

        Reviewed and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4572
          layout test machinery can't handle tests with applets that have code attributes

        * DumpRenderTree/DumpRenderTree.m: (main): Disable Java while running tests.

2005-08-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4625
          DumpRenderTree --pixel-tests crash
        - landed some other small changes I had sitting in my tree

        * DumpRenderTree/DumpRenderTree.m:
        (main): Don't bother saving and restoring the preferences. Not sure
        why this was ever done since the preferences are specific to DumpRenderTree.
        Clear delegates before releasing the WebView, because you can't count on the
        order of object deallocation.
        (dumpRenderTree): Fix code that releases a string before storing it in a
        global variable.

        * Scripts/run-webkit-tests: Use "-s" rather than a function to get the size
        of a file. Fix lots of cases that were using tabs for indenting to use spaces instead.

2005-08-23  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * Scripts/run-webkit-tests:
        Made --leaks option more readable by printing to a file.
        http://bugs.webkit.org/show_bug.cgi?id=4590

2005-08-22  Eric Seidel  <eseidel@apple.com>
        Fix by Tobias Lidskog <tobiaslidskog@mac.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: hides "expected actual diffs" links
        when they are not needed (for pixel-only failures)
        http://bugs.webkit.org/show_bug.cgi?id=4584

2005-08-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: Added the ability to display more than
        just two images as part of the image-diff "slideshow".
        Added display of "-w3c.png" baseline images for SVG.
        http://bugs.webkit.org/show_bug.cgi?id=4581

2005-08-20  Eric Seidel  <eseidel@apple.com>

        * Scripts/run-webkit-tests:
        "build" fix after committing incorrect version.

2005-08-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * DumpRenderTree/DumpRenderTree.m:
        (main): cleans up delegates
        (dumpRenderTree): closes CFString/CFURL leak
        * Scripts/run-webkit-tests:
        Adds --leaks option to run-webkit-tests
        http://bugs.webkit.org/show_bug.cgi?id=4542

2005-08-19  Ben La Monica  <ben.lamonica@gmail.com>

        Reviewed by Darin Adler.

        * Scripts/cvs-create-patch: Add an --include-unknowns option that will cause
        new files to be included in the patch even without "cvs add".

2005-08-19  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Fix to not garble patches that are mix of cvs-style and
        non-cvs-generated patches. Anders has been creating these, so it's bad that
        the script can't handle them.
        * Scripts/cvs-unapply: Ditto.

2005-08-18  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Fix version checking to work on Xcode versions with
        "." in them -- based on complaint by someone here at Apple.

2005-08-18  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * Scripts/run-webkit-tests:
        Made --svg imply --pixel-tests (pixel tests on-by-default for svg).

2005-08-17  Maciej Stachowiak  <mjs@apple.com>

        - add file that I forgot in the last checkin

        * DumpRenderTree/ImageDiff.m: Added.
        (main):
        (getImageFromStdin):
        (compareImages):
        (getDifferenceBitmap):
        (computePercentageDifferent):

2005-08-17  Maciej Stachowiak  <mjs@apple.com>

        Changes by Ben Lamonica and Eric Seidel, reviewed mostly by Eric and
        somewhat by me, and also tweaked by me a little bit.

        - better support for pixel-dumping
        - use checksums of the images so the tests are fast
        - change output format to make the tests run faster
        - don't dump pixel results for tests that dump as text

        * DumpKCanvasTree/DumpKCanvasTree.m:
        (main):
        (dumpRenderTree):
        (md5HashStringForBitmap):
        (dumpPixelTests):
        (constrainSizeToMaximum):
        (getBitmapImageRepForSVGDocument):
        * DumpKCanvasTree/DumpKCanvasTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (dump):
        (dumpRenderTree):
        (md5HashStringForBitmap):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * Scripts/run-webkit-tests:

2005-08-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - hacked DumpRenderTree to make the scrollbars appear and disappear properly.

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2005-08-14  Oliver Hunt  <ojh16@student.canterbury.ac.nz>

        Reviewed and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4251
          Ideally would be able to pass arguments to apps using run-safari and run-webkit-app scripts

        * Scripts/run-safari: Pass arguments through to Safari on command line.
        * Scripts/run-webkit-app: Pass arguments through to "open" tool on command line.

2005-08-11  Eric Seidel  <eseidel@apple.com>
        Fix by Tobias Lidskog <tobiaslidskog@mac.com>

        Reviewed by eseidel.

        * DrawTest/TestController.m:
        (-[TestController imagePathForSVGPath:]):
        Fixed support for using TextViewer with the layout-tests.
        http://bugs.webkit.org/show_bug.cgi?id=4385

2005-08-11  Maciej Stachowiak  <mjs@apple.com>

        At Least Roughly Glanced At by Anders.

        - fix change with totally breaks the layout tests.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]): Make tests unready if you start another
        load, to avoid dumping twice accidentally.

2005-08-10  Eric Seidel  <eseidel@apple.com>
        Fixed made by Mitz Pettel <opendarwin.org@mitzpettel.com>

        Reviewed by darin.

        * DumpRenderTree/DumpRenderTree.m:
        Added support for rendering to a PNG file.
        http://bugs.webkit.org/show_bug.cgi?id=3840

2005-08-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: added --svg option
        * Scripts/run-webkit-tests-svg: Removed.
        http://bugs.webkit.org/show_bug.cgi?id=4300

2005-08-07  Eric Seidel  <eseidel@apple.com>
        Changes by Ben La Monica <ben.lamonica@gmail.com>

        Reviewed by darin.

        * svg2png/ImageDiff.h: Added.
        * svg2png/ImageDiff.m: Added.
        (getDifferenceBitmap):
        (computePercentageDifferent):
        (saveAnimatedGIFToFile):
        * svg2png/svg2png.m:
        (usage): added several new options
        (getBitmapForSVG): added NSBitmapImageRep generation
        (main): various argument changes.
        * svg2png/svg2png.xcodeproj/project.pbxproj:
        Several additions to provide image differencing functionality.
        http://bugs.webkit.org/show_bug.cgi?id=4193

2005-08-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests-svg: now uses WebCore/svg-tests
        * checkout-svg: links WebCore/svg-tests to SVGSupport/layout-tests
        Adding the first SVG layout tests:
        http://bugs.webkit.org/show_bug.cgi?id=4303

2005-08-07  Darin Adler  <darin@apple.com>

        * Scripts/cvs-create-patch: Do all the directories at once, for speed.

2005-08-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * DumpKCanvasTree/DumpKCanvasTree.m: Added.
        * DumpKCanvasTree/DumpKCanvasTree.xcodeproj/project.pbxproj: Added.
        * Scripts/build-dumpkcanvastree: Added.
        * Scripts/run-webkit-tests-svg: Added.
        Adds a DumpRenderTree-like tool for SVG which allows us to do
        text-based layout regression testing.  This (like most of the
        SVG specific stuff) is temporary and will be replaced by
        DumpRenderTree once the DOMs and RenderTrees merge.
        http://bugs.webkit.org/show_bug.cgi?id=3917

2005-08-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * DrawTest/DrawTestView.m:
        (-[DrawTestView toggleFilterSupport:]): missing negation.
        One half of fix for toggling filter support.
        http://bugs.webkit.org/show_bug.cgi?id=4252

2005-08-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/build-drawtest:
        * Scripts/build-dumprendertree:
        * Scripts/build-svg2png:
        * Scripts/build-webcore-svg:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm: added checkRequiredSystemConfig()
        Added checkRequiredSystemConfig and made all the build-* scripts
        use it to print a pretty warning when trying to compile on an
        unsupported system (less than 10.4, Xcode 2.1).
        http://bugs.webkit.org/show_bug.cgi?id=4280

2005-08-04  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Bring this file back from
        the dead. It was removed by accident when someone was trying to work on the branch.

2005-07-31  Darin Adler  <darin@apple.com>

        - a little tools cleanup

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Moved options from target to
        project as a whole. Removed unused Default configuration.

        * Scripts/check-dom-results: Added license header, comment to explain purpose of tool.

2005-07-31  Duncan Wilcox  <duncan@mclink.it>

        Reviewed and landed by Darin Adler.

        Add logging of editing delegate calls for regression checking.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
          setup editing delegate

        (-[DOMNode dumpPath]):
        (-[DOMRange dump]):
          utility for editing delegate logging

        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
          log corresponding editing delegate methods

        (-[EditingDelegate webViewDidChangeSelection:]):
          log selection except when clearing selection after end of test (uses existing "done" flag)

        (dumpRenderTree):
          added clearing of selection after test

2005-07-31  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        * Scripts/build-drawtest: Added.
        * Scripts/build-svg2png: Added.
        * Scripts/build-webcore-svg: Added.
        * Scripts/run-drawtest: Added.
        * Scripts/webkitdirs.pm: added checkSVGFrameworks
        Made it much easier to build WebCore+SVG.
        http://bugs.webkit.org/show_bug.cgi?id=4208

2005-07-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by vicki.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        Build fix.  Removed bad path.

2005-07-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by sullivan.

        * DrawTest/AppDelegate.h: Added.
        * DrawTest/AppDelegate.m: Added.
        * DrawTest/DrawTest.xcodeproj/project.pbxproj: Added.
        * DrawTest/DrawTestDocument.h: Added.
        * DrawTest/DrawTestDocument.m: Added.
        * DrawTest/DrawTestInspectorController.h: Added.
        * DrawTest/DrawTestInspectorController.m: Added.
        * DrawTest/DrawTestToolbarController.h: Added.
        * DrawTest/DrawTestToolbarController.m: Added.
        * DrawTest/DrawTestView.h: Added.
        * DrawTest/DrawTestView.m: Added.
        * DrawTest/DrawTest_Prefix.pch: Added.
        * DrawTest/English.lproj/DrawTestDocument.nib/classes.nib: Added.
        * DrawTest/English.lproj/DrawTestDocument.nib/info.nib: Added.
        * DrawTest/English.lproj/DrawTestDocument.nib/keyedobjects.nib: Added.
        * DrawTest/English.lproj/InfoPlist.strings: Added.
        * DrawTest/English.lproj/Inspector.nib/classes.nib: Added.
        * DrawTest/English.lproj/Inspector.nib/info.nib: Added.
        * DrawTest/English.lproj/Inspector.nib/keyedobjects.nib: Added.
        * DrawTest/English.lproj/MainMenu.nib/classes.nib: Added.
        * DrawTest/English.lproj/MainMenu.nib/info.nib: Added.
        * DrawTest/English.lproj/MainMenu.nib/keyedobjects.nib: Added.
        * DrawTest/English.lproj/TestViewer.nib/classes.nib: Added.
        * DrawTest/English.lproj/TestViewer.nib/info.nib: Added.
        * DrawTest/English.lproj/TestViewer.nib/keyedobjects.nib: Added.
        * DrawTest/Info.plist: Added.
        * DrawTest/SVGTest.h: Added.
        * DrawTest/SVGTest.m: Added.
        * DrawTest/ScalingImageView.h: Added.
        * DrawTest/ScalingImageView.m: Added.
        * DrawTest/TestController.h: Added.
        * DrawTest/TestController.m: Added.
        * DrawTest/TestViewerSplitView.h: Added.
        * DrawTest/TestViewerSplitView.m: Added.
        * DrawTest/main.m: Added.
        Adding simple cocoa app for testing SVG rendering, interaction.
        http://bugs.webkit.org/show_bug.cgi?id=4157

2005-07-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        * svg2png/svg2png.m: Added.
        * svg2png/svg2png.xcodeproj/project.pbxproj: Added.
        * svg2png/svg2png_Prefix.pch: Added.
        Added a simple test tool which dumps a PNG from an SVG using
        WebCore+SVG's SVG rendering support.
        http://bugs.webkit.org/show_bug.cgi?id=4156

2005-07-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - new script to review the DOM layout test results and see where we stand
        on actual success and failure

        * Scripts/check-dom-results: Added.

2005-07-25  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Check in missing line of code.

2005-07-25  Darin Adler  <darin@apple.com>

        - fixed problem that was causing JavaScriptCore test to fail
          (except for people who had set DYLD_FRAMEWORK_PATH)

        * Scripts/run-javascriptcore-tests: Add code to set DYLD_FRAMEWORK_PATH.
        Add code to parse configuration parameter so you can pass --deployment if you like.
        * Scripts/run-webkit-tests: Add code to parse configuration parameter.

        * Scripts/update-javascriptcore-test-results: Add license header.

        * Scripts/webkitdirs.pm: Change code that reads configuration option to remove it
        from @ARGV. This lets us use this option in commands that take other options and
        pass them along to a subsequent tool.

2005-07-25  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        - Fixed run-safari and gdb-safari to use the Safari application in the build results
          directory, if any, falling back to the one in the Applications directory otherwise.
          Does no harm for open source contributors who don't build Safari, and helps out the
          Safari team, since we do build Safari.

        * Scripts/webkitdirs.pm: Added safariPath function that uses WEBKIT_SAFARI environment
        variable, and if that's not present, looks in either the build results directory or
        /Applications; factors code that was in both scripts before into a shared function.
        Also removed some Xcode 2.0 support which is no longer relevant since our projects are
        now in Xcode 2.1 format and incompatible with older versions of Xcode.

        * Scripts/gdb-safari: Use safariPath.
        * Scripts/run-safari: Use safariPath.

2005-07-22  Geoffrey Garen  <ggaren@apple.com>

        Moved Tools/Scripts/run-mozilla-tests to WebKitTools/Scripts/run-javascriptcore-tests.
        run-javascriptcore-tests now passes its command-line arguments to jsDriver.pl

        Moved Tools/Scripts/update-mozilla-js-test-results to
        WebKitTools/Scripts/update-javascriptcore-test-results.

        Reviewed by darin.

        * Scripts/run-javascriptcore-tests: Added.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        * Scripts/build-dumprendertree: changed XCode 2.0 project file reference to 2.1

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * DumpRenderTree/DumpRenderTree.xcode/.cvsignore: Removed.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Removed.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * DumpRenderTree/DumpRenderTree.xcodeproj/.cvsignore: Added.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * Scripts/build-webkit:

2005-07-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * checkout-svg: Fixed error with symlink creation.

2005-07-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * checkout-svg: Added.
        Script to check out WebCore+SVG

2005-06-30  Darin Adler  <darin@apple.com>

        Changes based on input from Michael Kahl.

        * Scripts/cvs-create-patch: Use "-f" so we are compatible with .cvsrc files that
        specify different style of "diff".
        * Scripts/webkitdirs.pm: Add missing call to determineBaseProductDir, so that
        determineConfigurationProductDir works in all cases.

2005-06-29  Darin Adler  <darin@apple.com>

        - fixed bug which would result in multiple unwanted dumps in a single layout test

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:locationChangeDone:forDataSource:]): Set new
        "readyToDump" flag.
        (-[LayoutTestController waitUntilDone]): Update for name change.
        (-[LayoutTestController notifyDone]): Dump only if ready.
        (dumpRenderTree): Set up new boolean and update for name change.

2005-06-29  Darin Adler  <darin@apple.com>

        Changes by Timothy Hatcher.
        Reviewed by me.

        * Scripts/run-webkit-app: Added script to open an arbritrary application with
        a CVS built WebKit. Example: ./run-webkit-app Colloquy

        * Scripts/gdb-safari: Added support for WEBKIT_SAFARI environment variable to specify
        a custom location to the Safari.app bundle. This is optional, script defaults to the stock location.
        * Scripts/run-safari: Ditto.

2005-06-26  Darin Adler  <darin@apple.com>

        * Scripts/build-dumprendertree: Pass -project option so that having a second
        copy of the project (like the one Xcode 2.1 offers to make for you) that's
        out of date won't screw you up.
        * Scripts/build-webkit: Ditto.

2005-06-23  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Fixed a regular expression in the code I just landed.

2005-06-23  Darin Adler  <darin@apple.com>

        Changes based on input from Michael Kahl.

        * Scripts/cvs-create-patch: Added code to handle getting changes in the top-level
        directory passed in.

        * Scripts/webkitdirs.pm: Eliminate use of changing the current directory and using
        getcwd() in the code to find the base product dir. Added code to handle unusual
        base product directory values that use SRCROOT.

2005-06-22  Darin Adler  <darin@apple.com>

        Change by Anders Carlsson.

        - added support for dumping title changes

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didReceiveTitle:forFrame:]): Added. Dump title change
        if requested by JavaScript.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Added dumpTitleChanges.
        (-[LayoutTestController dumpTitleChanges]): Added, sets flag.
        (dumpRenderTree): Start flag as NO.

2005-06-20  Darin Adler  <darin@apple.com>

        Reviewed by Justin Garcia.

        * Scripts/run-webkit-tests: Report number of tests when they succeed.

2005-06-18  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.m: (dumpRenderTree): Add more auto-release pools
        in the hope of making the tool use less memory and run faster.

2005-06-18  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Improve handling of patches with CR characters in them.
        * Scripts/cvs-unapply: Ditto.

2005-06-17  Maciej Stachowiak  <mjs@apple.com>

        - added prepare-ChangeLog script which we use internally to make ChangeLogs, for
        benefit of all WebKit hackerdom

        * Scripts/prepare-ChangeLog: Added.

2005-06-16  Darin Adler  <darin@apple.com>

        - recent changes to XcodeOptions made it depend on the current directory
          The intent was to have the WebKitBuild directory be next to WebKitTools,
          not inside the various build directories. Workaround for now is to call
          XcodeOptions when the directory is set to the WebKit directory.

        * Scripts/build-dumprendertree: Use a local variable for XcodeOptions and get it
        at the start of the script.
        * Scripts/build-webkit: Ditto.

2005-06-15  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Recognize all 1.X versions of Xcode as old too, not just 2.0.

2005-06-14  Darin Adler  <darin@apple.com>

        Changes by Anders Carlsson.
        Reviewed by me.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3496>
          Add gdb-safari script to launch Safari under gdb

        * Scripts/gdb-safari: Added.

2005-06-12  Darin Adler  <darin@apple.com>

        Changes by Stuart Morgan.
        Reviewed by me.

        * Scripts/cvs-abandon: Use cwd instead of `pwd`.
        * Scripts/cvs-apply: Ditto.
        * Scripts/cvs-create-patch: Ditto.
        * Scripts/cvs-unapply: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/webkitdirs.pm: Ditto. Also improve handling when there's no "Configuration" file.

2005-06-12  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Handle case of an empty patch better.
        * Scripts/cvs-unapply: Ditto.

2005-06-12  Darin Adler  <darin@apple.com>

        Changes by Michael Gaiman.
        Reviewed by me.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3487>
          WebKit no longer builds after configuration supporting build changes

        * Scripts/webkitdirs.pm: Chomp off the result of `pwd`, and don't die when no Configuration file.

2005-06-12  Darin Adler  <darin@apple.com>

        * Scripts/update-webkit: Make this script work when called from any directory.

2005-06-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.
        Includes changes by Stuart Morgan as well as my own.

        * Scripts/build-dumprendertree: Call the new setConfiguration function, and use XcodeOptions instead of
        symrootXcodeOptions to set the -buildstyle option.
        * Scripts/build-webkit: Ditto. Also remove the old way of supporting Xcode 2.1 and the old --debug option.
        The new --development option does the same thing.
        * Scripts/run-safari: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/update-webkit: Ditto.
        * Scripts/set-webkit-configuration: Added. Sets the default configuration to Development or Deployment.

        * Scripts/webkitdirs.pm: use FindBin to find the WebKit directory; works no matter what the current
        directory is when invoking a script. Add code to determine the Xcode version so we can do the right
        thing for 2.0 and 2.1. Change the productDir function to return the appropriate per-configuration
        product directory. Read the default configuration from a file, overridable by a passed-in command-line
        option.

2005-06-11  Darin Adler  <darin@apple.com>

        * Scripts/cvs-create-patch: Improve handling of directories with mixed CVS roots by going into each directory
        to execute the cvs diff commands.

2005-06-11  Darin Adler  <darin@apple.com>

        - added first cuts at some cvs scripts

            cvs-abandon is for throwing away changes; discards any local changes, reverting to the state in CVS
            cvs-create-patch is for making patches; runs cvs diff with all the right options and handles added/deleted files
            cvs-apply is for applying patches; runs patch and cvs add and cvs rm
            cvs-unapply is for unapplying patches; does the opposite of cvs-apply

          An argument against these is "waste of time if we switch to Subversion", but they should be good for a while.

        * Scripts/cvs-abandon: Added.
        * Scripts/cvs-apply: Added.
        * Scripts/cvs-create-patch: Added.
        * Scripts/cvs-unapply: Added.

2005-06-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3397
          Build DumpRenderTree fails with unresolved NSAutoreleasePool, etc

        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Change type from "folder" to "wrapper.framework"
        for Foundation.framework. How was it ever wrong?

        - finally, I tested making the default build directory work; it works now

        * Scripts/webkitdirs.pm: Changed structure of the code a little bit, added symrootXcodeOptions function
        that sets SYMROOT on the command line in case there's no product directory set in Xcode preferences.
        * Scripts/build-webkit: Pass symrootXcodeOptions when invoking Xcode.
        * Scripts/build-dumprendertree: Ditto.

2005-06-09  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Another try at making the default build directory of ~/WebKitBuild
        work. Someone should try building without setting the Xcode build product directory now,
        and let me know if it works.

2005-06-08  Darin Adler  <darin@apple.com>

        - quick fix to try to get build scripts working again

        * Scripts/build-dumprendertree: Add FindBin.
        * Scripts/build-webkit: Ditto.
        * Scripts/run-safari: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/update-webkit: Ditto.

2005-06-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - some build script enhancements

        * Scripts/build-dumprendertree: Changed to use webkitdirs.
        * Scripts/build-webkit: Changed to use webkitdirs, also only copy files from WebKitLibraries if
        they are newer.
        * Scripts/run-safari: Reduce number of log messages, change to respect "-d" flag and get Development
        before Deplyment in that case.
        * Scripts/run-webkit-tests: Changed to use webkitdirs.
        * Scripts/update-webkit: Changed to use webkitdirs.

        * Scripts/webkitdirs.pm: Added.

2005-06-08  Maciej Stachowiak  <mjs@apple.com>

        Code change by Toby Peterson <toby@opendarwin.org>
        Reviewed by me.

        * Scripts/run-safari: Fix to work with Xcode 2.0 again. The script would
        get confused because build-webkit now makes even 2.0 build directories look
        like 2.1.

2005-06-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Added Deployment build style.
        * Scripts/build-dumprendertree: For now, always use Deployment build style. This may fix things
        so we can run tests with Xcode 2.1.

2005-06-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        * Scripts/run-webkit-tests: Pass -L to find command to follow symlinks. This allows symlinks in the
        layout-tests directory to include additional sets of tests.

2005-06-07  Darin Adler  <darin@apple.com>

        * checkout: Added license.
        * Scripts/build-dumprendertree: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/update-webkit: Ditto.

2005-06-07  Darin Adler  <darin@apple.com>

        Change by Toby Peterson <toby@opendarwin.org>.
        Reviewed by me.

        * Scripts/build-webkit: Changes so you can build with Xcode 2.1. (I also added a license to this file.)
        * Scripts/run-safari: Ditto.

2005-06-06  Maciej Stachowiak  <mjs@apple.com>

        * Scripts/build-webkit: run ranlib on libWebKitSystemInterface.a

2005-06-06  Maciej Stachowiak  <mjs@apple.com>

        * Scripts/build-webkit: Chop newline off of $productDir to avoid problems with logic to copy files ther.

2005-06-06  Maciej Stachowiak  <mjs@apple.com>

        * Scripts/build-webkit: Install WebKitSystemInterface stuff into build products dir.

2005-06-05  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Tweak, simplify.
        * Scripts/build-dumprendertree: Added.
        * Scripts/build-webkit: Build All in the JavaScriptCore directory.
        * Scripts/run-webkit-tests: Build DumpRenderTree before running.

2005-06-05  Darin Adler  <darin@apple.com>

        * Scripts/run-safari: Fix path to Safari executable. Add check for frameworks.

2005-06-05  Darin Adler  <darin@apple.com>

        - add run-webkit-tests script; not working yet but the pieces are there

        * Scripts/run-webkit-tests: Added.

        * DumpRenderTree/DumpRenderTree.m: Added.
        * DumpRenderTree/DumpRenderTree.xcode/.cvsignore: Added.
        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Added.
        * DumpRenderTree/DumpRenderTreePrefix.h: Added.

2005-06-05  Darin Adler  <darin@apple.com>

        - created module, first cut at Web Kit Open Source Project scripts

        * ChangeLog: Added.
        * Scripts/build-webkit: Added.
        * Scripts/run-safari: Added.
        * Scripts/update-webkit: Added.
        * checkout: Added.

=== creation of WebKitTools module ===
