2008-01-02  Mark Rowe  <mrowe@apple.com>

        Merge r27238 to fix a hang during the layout tests.

    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-11-30  Adam Roben  <aroben@apple.com>

        Merge r26734

    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-19  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Adam.
        
        - don't delay-load WebKit in DumpRenderTree.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

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

        Reviewed by NOBODY.

        * Scripts/webkitdirs.pm:

2007-10-17  Adam Roben  <aroben@apple.com>

        Build fix for VC++ Express

        Reviewed by NOBODY.

        * FindSafari/FindSafari.vcproj: Explicitly link against advapi32.lib
        and ole32.lib.

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.

        * 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-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

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

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

        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.

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

        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.

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

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

        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

        Reviewed by NOBODY.

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

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

        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.

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

        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.

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

        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.

        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.

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

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

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

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

        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.

        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.

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

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

        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.

        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.

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

        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.

        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.

        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.

        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>

        Reviewed by NOBODY (build fix).

        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.

        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.

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

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

        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.

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

        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.

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

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

        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.

        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.

        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.

        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.

        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.

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

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

        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.

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

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

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

        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.

        - 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. Reviewed by NOBODY.

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

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

        Reviewed by NOBODY (build fix).

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

        - first check-in of a Gdk shell for testing WebKit

        * GdkLauncher: Added.

2006-06-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        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.

        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.

        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.

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

        * 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.  Reviewed by NOBODY.

        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.

        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.

        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.

        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.

        - 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. Reviewed by NOBODY.

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

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

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController clearBackForwardList]):
        Add clearBackForwardList function to layoutTestController
        
2006-06-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        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.

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

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

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

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

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

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

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

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

        Reviewed by NOBODY (just fixing copyrights)

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

        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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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