2008-02-22  Timothy Hatcher  <timothy@apple.com>

        Merge r30480 to Safari-3.1-branch.

    2008-02-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5747325> REGRESSION: HTTP layout tests hang
        
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        Init the URL request with the correct timeout.

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

        Merge r30395 to Safari-3.1-branch.

    2008-02-18  Brady Eidson  <beidson@apple.com>

        Changes by Geoff Garen, Reviewed by Darin

        Fix for <rdar://5747529> - ObjC Exception can cause JSLock to never be released

        DRT changes for test: platform/mac/plugins/webScriptObject-exception-deadlock.html

        [WebScriptObject valueForKey:] might throw an exception, and previously might have "leaked" the global JSLock
        This test calls valueForKey, then runs some arbitrary Javascript on a 2ndary thread.  If the lock has leaked,
        this series of method calls will deadlock.  If things are good, it will complete successfully.

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

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

        Merge r30276 to Safari-3.1-branch.

    2008-02-15  Adam Roben  <aroben@apple.com>

        Fix a typo that broke the Mac build

        Reviewed by Mark.

        * Scripts/build-webkit:

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

        Merge r30269 to Safari-3.1-branch.

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

        Conditionalize cross-document messaging support

        The cross-document messaging parts of HTML 5 are in flux and we want
        ports to be able to turn off the support as needed.

        Note that the support is turned off by default right now. A subsequent
        commit will turn it on by default.

        Reviewed by Darin.

        * Scripts/build-webkit:

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

        Merge r30242 to Safari-3.1-branch.

    2008-02-14  Darin Adler  <darin@apple.com>

       - fix Windows build

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::setStatusText): Update parameter types to match declaration.

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

        Merge r30238 to Safari-3.1-branch.

    2008-02-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff G and Weinig.

        Add ability for DRT to report tests setting the status text.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpStatusCallbacksCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:setStatusText:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:

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

        Fix error in bisect-builds when responding "broken" for the first
        build

        Reviewed by Dave Kilzer.

        * Scripts/bisect-builds: Only try to test the build if the nightly
        info for the current index has not been deleted.

2008-02-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fixed two minor typos in the --root option, to get it working.

        * Scripts/run-sunspider:
            1. Actually assign the function argument to our local variable.
            2. Actually set the $root variable, so we don't try to build later.

2008-02-05  Oliver Hunt  <oliver@apple.com>

        RS=Eric.

        Re-enable foreignObject by default as it is needed for a number of non-fO
        related SVG tests and none of the old known crashes occur anymore.

        * Scripts/build-webkit:

2008-02-05  Steve Falkenburg  <sfalken@apple.com>

        Build fix.  Don't override intermediate directory.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

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

        Build fix for Windows. willCloseFrame is a pure virtual and we are
        forced to have an implementation.
        
        This partially reverts r30014.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::willCloseFrame):
        * DumpRenderTree/win/FrameLoadDelegate.h:

2008-02-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Holger.

        Don't build wrapper for SVGTestCase.js (special file for svg/dynamic-updates)

        * Scripts/make-js-test-wrappers:

2008-02-05  Holger Freyther  <zecke@selfish.org>

        Reviewed by Darin.

        In http://bugs.webkit.org/show_bug.cgi?id=16853 it was identified that the
        the output of the willCloseFrame and didClearWindowObject FrameLoadDelegate
        depends on the order the tests are executed.
        
        Propose to remove willCloseFrame and didlCearWindowObject output from the
        FrameLoadDelegate and update the test results. The output of didClearWindowObject
        is not interesting for any of the current tests and we have other ways to find
        out if a frame was closed or not.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didClearWindowObject):
        * DumpRenderTree/win/FrameLoadDelegate.h:

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

        Reviewed by Oliver Hunt.

        Workaround for http://bugs.webkit.org/show_bug.cgi?id=16842
        Bug 16842: Hang in DRT in leaks mode due to signal handler doing unsafe things

        Don't install the signal handler unless we are running the pixel tests.
        It is currently only used to restore the color profile, but by catching
        signals we can trigger a deadlock in DRT while running leak tests.
        The deadlock is tracked by http://bugs.webkit.org/show_bug.cgi?id=16842,
        and a more complete fix will need to be developed to address this for
        pixel tests as well.

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

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

       Gtk qmake build fix.

        * Scripts/webkitdirs.pm:  Fix perl's complaint about an odd number of elements in anonymous hash.

2008-02-04  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker and Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16618
        [GTK] build-webkit and run-webkit-tests autootools support

        * Scripts/build-webkit: added --database and --icon-database options
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-02-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve F.

        Partial fix for <rdar://5621244> Drag & Drop doesn't work correctly in DRT

        Implement required DRT functionality to allow majority of Drag and Drop testcases to work.
        Issues include:
          * Uses Sleep() to implement leapForward reliably.
          * 3 DND tests still fail for reasons that i have not yet determined
          * Has to explicitly ignore an extraneous WM_MOUSELEAVE that i am at a loss to explain 

        * DumpRenderTree/win/EventSender.cpp:
        (leapForwardCallback):
        (mouseDownCallback):
        (doMouseUp):
        (mouseUpCallback):
        (doMouseMove):
        (mouseMoveToCallback):
          Minor updates to these functions to handle the different message queue structure.

        (replaySavedEvents):
          More complicated now.  Where possible we just use the old while-loop model of execution,
          but when leapForward has been used we have to jump through some hoops and set up an 
          inner event loop so that we can ensure messages get the correct time stamp.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::doDragDrop):
          Call replaySavedEvents directly to force synchronous handling of drag and drop.

2008-02-04  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Alp Toker and Mark Rowe.

        Fix http://bugs.webkit.org/show_bug.cgi?id=17175.
        Bug 17175: Use of C++ compiler flags in CFLAGS

        * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS.

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

        Reviewed by Geoff.

        * Scripts/make-js-test-wrappers: Look at the whole LayoutTests tree, not just the fast
        and svg subdirectories. Added some more exceptions for the benefit of the fast/dom
        subdirectory.

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

        Windows Apple-only build fix

        * DumpRenderTree/win/DumpRenderTree.vcproj: Added a new include
        directory.

2008-02-04  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove all trailing whitespace in the GTK+ port and related
        components.

        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/GCControllerGtk.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * GNUmakefile.am:

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

        Reviewed by Oliver.

        Also search LayoutTests/svg for js-based tests.

        * Scripts/make-js-test-wrappers:

2008-01-31  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=17006
        [GTK] Header path should be webkit/webkit.h

        Move the GTK+ API sources as needed and update the build systems.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        * GNUmakefile.am:
        * GtkLauncher/main.c:

2008-01-30  Stephanie  <slewis@apple.com>

        Reviewed by Geoff.

        Add an option to run-webkit-tests to merge leaks results and print the number of unique leaks found under a certain call depth.  This should make it easier for the buildbots to track new leaks.

        * Scripts/run-webkit-tests:

2008-01-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        One more debug (external) fix.

        * DumpRenderTree/win/DumpRenderTree.cpp: TestNetscapePlugin is built with a _debug suffix in both DebugInternal
        and Debug configurations. 

2008-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig. Sam Weinig.
        
        Fixed <rdar://problem/5692566> fast/encoding/mailto-always-utf-8.html
        fails when run after fast/dom/Window/window-property-shadowing.html (16902)

        Modified our policy delegates not to output window.name. Since a
        previous test may have explicitly set window.name, we can't rely on its
        implicit value in test results.

        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):

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

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

        Reviewed by Tim Hatcher.

        <rdar://problem/5600926> WebCore on Tiger must link to its own copy of SQLite 3.4 or newer (so HTML database behavior will be correct).

        * Scripts/build-webkit: Copy SQLite static library and headers into the build directory.

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

        Refactor ChangeLog path code

        Reviewed by Adam.

        * Scripts/prepare-ChangeLog: Simplify code in one foreach() loop, and extract
        duplicate code in another foreach() loop.

2008-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5710692> All storage tests fail/crash

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): Set an
        arbitrary quota of 5 megabytes.

        (-[UIDelegate webView:frame:quotaForSecurityOrigin:toCreateDatabase:withEstimatedSize:]):
        (-[UIDelegate webView:frame:quotaForSecurityOrigin:fromProposedQuota:database:]):
        Removed unused (I think) code.
        
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::QueryInterface): IWebUIDelegatePrivate3 is now supported.
        (UIDelegate::webViewPainted): A stub implementation.
        (UIDelegate::exceededDatabaseQuota): Set an arbitrary quota of 5 megabytes.
        * DumpRenderTree/win/UIDelegate.h:

2008-01-27  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        GTK+ DRT build fix for breakage introduced in r29822.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setPersistentUserStyleSheetLocation):
        (LayoutTestController::clearPersistentUserStyleSheet):

2008-01-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - add support for directory prologues and epilogues to run-webkit-tests
        - allow setting a persistent user style sheet in DumpRenderTree
        - activate the WebKit Layout Tests font in Windows DumpRenderTree

        * DumpRenderTree/LayoutTestController.cpp:
        (clearPersistentUserStyleSheetCallback): Added.
        (setPersistentUserStyleSheetLocationCallback): Added.
        (LayoutTestController::staticFunctions): Added.
        clearPersistentUserStyleSheet and setPersistentUserStyleSheet.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setPersistentUserStyleSheetLocation): Added.
        (resetWebViewToConsistentStateBeforeTesting): Added the user style sheet
        to the set of things this function resets. Now it either disables the
        user style sheet or sets it to the persistent user style sheet and
        enables it.
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setPersistentUserStyleSheetLocation): Added.
        (LayoutTestController::clearPersistentUserStyleSheet): Added.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setPersistentUserStyleSheetLocation): Added.
        (initialize): Added the WebKit Layout Tests font to the set of fonts to
        install.
        (resetWebViewToConsistentStateBeforeTesting): See DumpRenderTree.mm.
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPersistentUserStyleSheetLocation): Added.
        (LayoutTestController::clearPersistentUserStyleSheet): Added.
        * Scripts/run-webkit-tests: Changed to look for, and if found process in
        DumpRenderTree, files named run-webkit-tests-prologue.html and
        run-webkit-tests-epilogue.html in the resources subdirectory of any
        test directory and platform test results directory. The prologues are
        processed before the first test from the directory (and its
        subdirectories) is run, and the epilogues are processed after the last
        test from the directory is run. Platform-specific prologues and
        epilogues are processed in order of specificity.

2008-01-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mark Rowe.

        <rdar://problem/5699933> http/tests/security/cross-frame-access-get.html is still failing

        * DumpRenderTree/win/DumpRenderTree.cpp: (main): Clear HTTP cache to ensure consistent test environment
        (matching Mac DRT).
        * DumpRenderTree/win/DumpRenderTree.vcproj: Link to CFNetwork.

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

        Reviewed by Ada Chan.

        Fix for <rdar://5131975> DumpRenderTree doesn't support undo/redo

        - Adds simplified UndoManager to windows DRT to allow testing the
          undo/redo code paths in WebCore and WebKit.  This is a temporary
          solution to an issue that should eventually be solved by having a
          shared UndoManager in WebKit.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoObject::DRTUndoObject):
        (DRTUndoObject::invoke):
        (DRTUndoStack::~DRTUndoStack):
        (DRTUndoStack::isEmpty):
        (DRTUndoStack::clear):
        (DRTUndoStack::push):
        (DRTUndoStack::pop):
        (DRTUndoManager::canRedo):
        (DRTUndoManager::canUndo):
        (DRTUndoManager::DRTUndoManager):
        (DRTUndoManager::removeAllActions):
        (DRTUndoManager::registerUndoWithTarget):
        (DRTUndoManager::redo):
        (DRTUndoManager::undo):
        (UIDelegate::UIDelegate):
        (UIDelegate::resetUndoManager):
        (UIDelegate::registerUndoWithTarget):
        (UIDelegate::removeAllActionsWithTarget):
        (UIDelegate::setActionTitle):
        (UIDelegate::undo):
        (UIDelegate::redo):
        (UIDelegate::canUndo):
        (UIDelegate::canRedo):
        * DumpRenderTree/win/UIDelegate.h:

2008-01-23  Adam Roben  <aroben@apple.com>

        Allow directories containing ChangeLogs to be passed to
        resolve-ChangeLogs

        Reviewed by David Kilzer.

        * Scripts/resolve-ChangeLogs:
        (sub findChangeLog): Return a ChangeLog contained within the specified
        directory if one exists.

2008-01-23  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5698732> Copyright strings should include 2008

        Reviewed by Sam.

        * Drosera/win/Drosera.vcproj/Drosera.rc:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc:

2008-01-23  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove whitespace after -I in automake include lists.

        * GNUmakefile.am:

2008-01-23  Michael Goddard <michael.goddard@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Reworked the JavaScriptCore Qt bindings:
        
        * Update JS DRT controller for Qt JS binding changes.
        There were two functions that needed some changes
        so that the layout tests would work, so this makes
        a few tests pass again.
        
        * Bump the timeout for layout tests up to 11s.
        At least some tests have an internal timeout of
        10 seconds, so make the waitUntilDone approach
        wait at least 11s.  fast/dom/open-and-close-by-DOM.html
        is one of these - now the failure message is more
        accurate.
        

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

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

        Reviewed by Darin and Adam.

        <rdar://problem/5688975>
        div element on microsoft site has wrong left offset.
        
        Add new method for testing the return vale of NPN_GetProperty.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2008-01-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        <rdar://problem/5670257> editing/selection/4895428-3.html makes editing/selection/5131716-2.html fail

        * DumpRenderTree/win/EventSender.cpp: (makeEventSender): Reset static variables for a new test.

2008-01-21  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16955
        Get errors when cross-compile webkit-gtk

        * GNUmakefile.am: Removed ICU_CFLAGS 

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

        Reviewed by Mitz and Adam.

        * Scripts/svn-create-patch: Sort ChangeLog files first. Also slightly improved the
        sorting speed by doing all sort criteria in a single pass instead of three sorts.

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix focus chain handling and cycling through focusable objects (links) using tab/backtab.
        
        * Fix GraphicsContext::drawFocusRing to also draw single focus rects.
        * Implemented QWebPage::focusNextPrevChild by sending fake tab/shift-tab events
        and make the return value depend on whether we successfully determined a focusable
        node or not.
        * Changed QWebView::focusNextPrevChild() to call the base QWidget implementation correctly
        if we could not handle the focus chain ourselves.
        * Changed the focus policy of QWebView to correctly use WheelFocus instead of ClickFocus.
        * Made ChromeClientQt::canTakeFocus() and takeFocus() dummy method since they are only
        used to control the situation of stepping out of the focus chain inside the page.
        * Made inclusion of links in the focus chain configurable through QWebSettings::LinksIncludedInFocusChain.
        The layout tests expect this to be disabled but for the user it seems sensible to have it
        on by default, hence the default in qwebsettings.cpp
        

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

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

        Reviewed by Alp Toker.

        Allow the --http flag to run-webkit-tests to override
        the default behaviour of disabling HTTP tests for Qt,
        Gtk and Wx.

        * Scripts/run-webkit-tests:

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

        <rdar://problem/5695344> check-for-global-initializers script never checks any object files

        Reviewed by Darin.

        We now touch a check-for-global-initializers.timestamp file in
        the TARGET_TEMP_DIR directory to determine when new object files
        have been compiled and thus need to be checked.  If the timestamp
        file doesn't exist, all object files will be checked.

        Previously the modification time of the "executable" (the
        framework binary, e.g., WebKit.framework/WebKit) was used, but
        since this was the last file modified at the end of the compile
        phase, no object files would ever get checked!

        Also added JSCustomSQLTransactionCallback.o to the list of files
        since it has static initializers in Debug builds of WebCore.

        * Scripts/check-for-global-initializers:

2008-01-18  Adam Roben  <aroben@apple.com>

        Build fix

        * Scripts/build-webkit:

2008-01-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Update build-webkit to account for foreign-object being disabled by 
        default.

        * Scripts/build-webkit:

2008-01-18  Adam Roben  <aroben@apple.com>

        Updated for method renames

        Reviewed by Adele.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setWindowIsKey):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webViewFocus:]):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didCommitLoadForFrame):

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

        Reviewed by Adam Roben.

        Fix plugin-related tests in Debug_Internal configuration, which are failing because of CRT version mismatch
        between DRT and TestNetscapePlugin.

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj: Added a Debug_Internal configuration.
        * DumpRenderTree/DumpRenderTree.sln: Use this configuration.

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix fast/dom/Window/window-resize.html
        
        In DRT connect the page's geometryChangeRequest signal to a slot that
        sets the geometry of the view widget.
        

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

2008-01-17  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * Drosera/DroseraWin.make:

2008-01-17  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Fixed a bug number.

2008-01-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16908
        run-webkit-tests complains about missing FindSafari.exe

        * Scripts/webkitdirs.pm: Append _debug as appropriate.

2008-01-17  Steve Falkenburg  <sfalken@apple.com>

        Re-add DEBUG_WEBKIT_HAS_SUFFIX.
        
        Rubber-stamped by Jon Honeycutt.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-01-16  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16218
        [GTK] API: Should this entry point be called go_back rather than go_backward?

        Track back/forward API changes in the tools.

        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (BackForwardItem::invoke):
        * GtkLauncher/main.c:
        (go_back_cb):

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

        Windows build fix after r29488

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        Build into a subdirectory of $WebKitOutputDir\bin to match where DRT
        expects to find the plugin.

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

        Reviewed by Sam Weinig.
        
        Fixed the waitUntilDone watchdog timer -- the old code never added the
        timer to the run loop, so it didn't do anything.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setWaitToDump):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWaitToDump):

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

        Use shared vsprops for most vcproj properties.
        
        Reviewed by Darin.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * FindSafari/FindSafari.vcproj:

2008-01-14  Stephanie  <slewis@apple.com>

       Reviewed by NOBODY.
  
       revert accidental character.

       * Scripts/run-webkit-tests:

2008-01-14  Stephanie  <slewis@apple.com>

        RS=Oliver

        add Quicktime PPC only leaks to Leopard exclude list. See <rdar://problem/5667132>

        * Scripts/run-webkit-tests:

2008-01-14  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Queue up another rename.

2008-01-14  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Darin.

        * Allow to run the tests in reverse order to spot test cases where the result depends on the order
        the tests were ran.
        * This is from http://bugs.webkit.org/show_bug.cgi?id=16869

        * Scripts/run-webkit-tests:

2008-01-14  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Darin.

        * Randomize tests array to spot test cases where the results depends on the order
        the tests are ran.
        * This is from http://bugs.webkit.org/show_bug.cgi?id=16869

        * Scripts/run-webkit-tests:

2008-01-14  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: More ignore list tweaking.

2008-01-14  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Add another leak to the ignore list.

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

        Reviewed by Adam Roben.

        - try to fix failure in fast/dom/Window/window-onFocus.html seen on the
          build bots

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting): Focus the web view.

2008-01-13  Steve Falkenburg  <sfalken@apple.com>

        Share common files across projects.
        
        Unify vsprops files
        Debug:          common.vsprops, debug.vsprops
        Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
        Release:        common.vsprops, release.vsprops
        
        Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
        debug_internal.vsprops will be mostly empty except for file path prefix modifiers.

        Pull auto-version.sh, VERSION, and PRODUCTVERSION from tools.

        Reviewed by Adam Roben.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * Drosera/win/Drosera.vcproj/PRODUCTVERSION: Removed.
        * Drosera/win/Drosera.vcproj/VERSION: Removed.
        * Drosera/win/Drosera.vcproj/auto-version.sh: Removed.
        * Drosera/win/Drosera.vcproj/debug.vsprops: Removed.
        * Drosera/win/Drosera.vcproj/debug_internal.vsprops: Removed.
        * Drosera/win/Drosera.vcproj/release.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/debug.vsprops: Removed.
        * DumpRenderTree/win/debug_internal.vsprops: Removed.
        * DumpRenderTree/win/release.vsprops: Removed.

2008-01-13  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=16314
          Script to launch Drosera

        * Scripts/gdb-drosera: Added.
        * Scripts/run-drosera: Added.
        * Scripts/run-drosera-nightly.cmd: Added.
        * Scripts/webkitdirs.pm: Added runDrosera function.

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

        - fix breakage due to last-minute change

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Declare the loop variable.

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

        Reviewed by Adam Roben.

        - fix <rdar://problem/5132009> Windows DRT does not support multiple windows

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (DumpRenderTreeWndProc):
        (initialize):
        (dumpBackForwardList):
        (dumpBackForwardListForAllWindows):
        (dump):
        (resetWebViewToConsistentStateBeforeTesting): Factored out of
        runTest().
        (runTest):
        (allWindows): Added. Returns a vector of all open windows.
        (windowToWebViewMap): Added. Returns a map from open windows to their
        WebViews.
        (createWebViewAndOffscreenWindow): Factored out of main() to be
        reusable for creating extra windows.
        (main):
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::windowCount): Implemented.
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::createWebViewWithRequest): Implemented.
        (UIDelegate::webViewClose): Implemented.
        * DumpRenderTree/win/UIDelegate.h:

2008-01-12  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Hide non-public symbols in GTK+/autotools release builds.

        * GNUmakefile.am:

2008-01-12  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Ap.

        * Make launching of the WebKit httpd work on GNU/Debian/Linux
        
        The configuration of Apache2 and installation does not depend on
        the kernel but on the distribution policy. Make launching of httpd
        work for Debian derived distributions.

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

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

        Reviewed by Maciej Stachowiak.

        Fix crash in http/tests/security/local-JavaScript-from-remote.html under guard malloc.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Retain string before returning it to
        match the callers expectations that it can take ownership of the string.

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

        Reviewed by Adam Roben.

        <rdar://problem/5667275> fast/dynamic/layer-hit-test-crash.html is failing

        * DumpRenderTree/win/DumpRenderTree.cpp: (runTest): Ignore WM_MOUSELEAVE events,
        as these are only posted because the test window is not a normal visible one, and
        they confuse drag&drop machinery.

2008-01-11  Adam Roben  <aroben@apple.com>

        Fix a crash when pathToLocalResource fails and a leak

        Reviewed by Darin.

        * DumpRenderTree/LayoutTestController.cpp:
        (pathToLocalResourceCallback): Dont leak the JSStringRef, and make
        sure not to pass null to JSValueMakeString.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pathToLocalResource): Print an error message if
        the conversion fails so it's clear what happened.

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

        Reviewed by John Sullivan.

        * DumpRenderTree/mac/GCControllerMac.mm:
        (GCController::collectOnAlternateThread): Updated for name change.

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

        wx build fix. Don't build dftables any longer since it's now a Perl
        script.

        * wx/build-wxwebkit:

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

        Reviewed by Anders Carlsson.

        Make DRT track open windows instead of allocated windows so that
        we can avoid ASSERTION due to late deallocs out of our control.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpBackForwardListForAllWindows):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (+[DumpRenderTreeWindow openWindows]):
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow close]):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::windowCount):

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

        Meta key is not the same as Alt key on windows.

        Reviewed by Darin.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2008-01-09  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin, Sam and Adam.

        -<rdar://problem/5654486> REGRESSION (Safari 3.0.4-TOT): clicking on
        link in gmail message displays JavaScript alert falsely complaining
        about pop-up blocking.
        - Added the ability to enable the pop-up blocker via the
        LayoutTestController.

        * DumpRenderTree/LayoutTestController.cpp:
        (setPopupBlockingEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setPopupBlockingEnabled):

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        rename QWebPageHistory to QWebHistory.
        

        * DumpRenderTree/qt/jsobjects.cpp:

2008-01-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - add some more renames, adjust some

        * Scripts/do-webcore-rename:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Enable SVG Fonts support by default.

        * Scripts/build-webkit:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Adam.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16244
        DRT doesn't handle platform specific pixel test results correctly.

        <test>-expected.txt files and <test>-expected.png files may now live
        in different directories (ie. a cross-platform <test>-expected.txt file
        and a platform-specific <test>-expected.png file).

        * Scripts/run-webkit-tests:

2008-01-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - <rdar://problem/5666914> fast/regex/test{1,4}.html are failing
        DRT did not correctly handle printing the '\0' char.  Now it does.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dump):

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Ported of the network backend of the Qt platform to Qt 4.4's new networking API.
        

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

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

        Reviewed by Alp Toker.

        Fix hang in fast/frames/frame-display-none-focus.html during Gtk layout tests.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (processWork): Process pending work.
        (webViewLoadFinished): Schedule processing of pending work.
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: Use webkit_web_frame_reload.

2008-01-05  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more renaming plans.

2008-01-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Alexey and Darin.

        Adding "home" and "end" to DRT's keydown since
        DOM key events can't handle keyIdentifiers at this point. 

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix DRT after the changes to QWebPage.
        
        The great thing is that we actually don't have
        any regressions from the QWebPage change :)
        

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

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make QWebPage a QObject and get things to compile.
        
        Nothing works currently though.
        

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

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        take a QString as identifier in QWebFrame::addToJSWindowObject.

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

2008-01-04  Alp Toker  <alp@atoker.com>

        GTK+ DRT build fix for breakage introduced in r29149.

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

2008-01-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5463489> A number of layout tests should be using execCommand instead of textInputController

        Added layoutTestController.execCommand to access editor commands that are not available
        via document.execCommand.

        * DumpRenderTree/LayoutTestController.cpp:
        (execCommandCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::execCommand):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::queueLoad):
        (LayoutTestController::execCommand):

2008-01-03  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin, Mitz.

        fixed <rdar://5130762> mousedowns in different locations increase the clickcount incorrectly

        the clickcount should not increase if the last click was at a different location.  it's a new click.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):

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

        Reviewed by Adam.

        * Scripts/update-webkit: Make this work a little better for the people at Apple
        who have a directory named Internal.

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

        Use HTTP::Date instead of Date::Parse because it's installed by Cygwin by default

        Rubberstamped by Mark.

        * Scripts/update-webkit-auxiliary-libs:

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

        Fix Bug 15663: update-webkit re-downloads WebKitAuxiliaryLibrary unnecessarily

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

        Added a fuzz factor into the Last-Modified comparison for downloading
        WebKitAuxiliaryLibrary.zip.

        The zip file is served from a set of mirrors who give Last-Modified
        times that are off by 1-3 seconds from each other. This was causing
        the build bots to redownload WebKitAuxiliaryLibrary for every build,
        which would then cause all of WebCore to rebuild each time.

        Reviewed by Mark.

        * Scripts/update-webkit-auxiliary-libs: Check if the new zip file is
        at least 30 seconds newer than the old one -- otherwise we assume that
        the difference in time is due to the mirrors being slightly offset
        from each other.
        (sub lastModifiedToUnixTime): Added.

2008-01-03  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * DumpRenderTree/ForwardingHeaders/wtf/HashTraits.h: Added (needed by COMPtr.h).

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Moved QWebPage::open to QWebFrame::load and added setHtml.
        

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

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added the first revision of QWebView and started moving functionality from QWebPave over to QWebView and QWebFrame.
        

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

2008-01-02  Sam Weinig  <sam@webkit.org>

        * Scripts/do-webcore-rename: Yet more renaming ideas.

2008-01-02  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming ideas. (Maciej, please merge yours with mine.)

2008-01-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        fixing assertion hit with editing/selection/move-begin-end.html

        * DumpRenderTree/ForwardingHeaders/wtf/ASCIICType.h: Added.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        using isupper will cause an assertion for inputs outside of ascii range. use isASCIIUpper instead.

2008-01-02  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more name change plans.

2008-01-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Added handling for page up and page down in EventSender

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2008-01-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Fix fast/events/arrow-keys-on-body.html for real.

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Pass proper keyData for WM_KEYUP, too.

2008-01-02  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16674
        [GTK] run-launcher sets wrong LD_LIBRARY_PATH

        * Scripts/run-launcher:

2007-12-31  Darin Adler  <darin@apple.com>

        Suggested by Antti.

        * Scripts/webkitdirs.pm: Turned off the QuickTime requirement for Windows until
        we get it installed on the build bots.

2007-12-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * Scripts/do-webcore-rename: Add a few more planned renames s/(\w+)Imp/\1/

2007-12-29  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16663
          leak bot shows createCStringFromNPVariant result leaking

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke): Added a missing free.

2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16390
        Use autotools or GNU make as the build system for the GTK port

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: include glib.h
        * GNUmakefile.am: Added.

2007-12-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver.

        Fix fast/events/arrow-keys-on-body.html, failing on Windows.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Add KF_EXTENDED flag to arrow keys. Also add a count
        of 1, even though WebKit currently ignores it.

2007-12-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx buildbot fix. Update libpng dl script to the latest version.

        * wx/install-unix-extras:

2007-12-22  Antti Koivisto  <antti@apple.com>

        Fix a typo.

        * Scripts/webkitdirs.pm:

2007-12-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        - Disable the back/forward cache using the new WebPreferences API
          instead of through the BackForwardList.  This makes us match what
          we do on Windows.

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

2007-12-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - disable the back/forward cache in Windows DumpRenderTree. It is
          already disabled in Mac DumpRenderTree.

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

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

        Reviewed by Darin and Steve.
        
        - check for QuickTime SDK on Windows.
        - build media support on Windows by default

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

2007-12-21  Kevin Ollivier  <kevino@theolliviers.com>

        Build script fix for buildbot.

        * wx/build-wxwebkit:

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

        Reviewed by mjs.

        * Scripts/run-sunspider: change --runs default to 10 for better accuracy

2007-12-20  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Steve.

        - <rdar://5656485> Drosera: Win: Nightly does not reliably connect to
        WebKit.

        - Drosera and Safari need to use the same ProgIDs in order for
        CoCreateInstance to work properly.  The most robust way to do this is
        for WebKit to dynamically publish those ProgIDs.

        * Drosera/win/DebuggerClient.cpp: Use the published ProgIDs
        (DebuggerClient::createWebViewWithRequest):
        * Drosera/win/Drosera.cpp: Use the published ProgIDs and rename some
        statics.
        (Drosera::initUI):
        (Drosera::attach):
        (Drosera::attemptToCreateServerConnection):
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Fix a runtime failure.
        * Drosera/win/ServerConnection.cpp: Reformat the connection function and
        make use of the published ProgIDs.
        (ServerConnection::attemptToCreateServerConnection):

2007-12-20  Kevin McCullough  <kmccullough@apple.com>

        - <rdar://problem/5658317> REGRESSION: 20+ leaks seen on buildbots.
        - Build bot and leak fix.

        * DumpRenderTree/LayoutTestController.cpp:
        (pathToLocalResourceCallback):

2007-12-19  David Kilzer  <ddkilzer@apple.com>

        Make svn-apply/svn-unapply work with patches from git-format-patch.

        Reviewed by Darin.

        * Scripts/svn-apply:
        (patch): If 'Index:' can't be found in the text passed in, print it
        out with a warning and return early.
        * Scripts/svn-unapply:
        (patch): Ditto.

2007-12-18  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Alp Toker.

        Build related fixes.

        * wx/build-wxwebkit:
        - Check to make sure the user is running a supported wx port
        - More robust checks for Cygwin
        - Only run install-unix-extras on Mac, it's not the right solution
          for Linux distros.
        - Remove outdated Linux instructions after successful build
        - Clean Bakefile-generated files during a clean operation

2007-12-18  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Don't generate a wrapper for select-options-remove.js.

2007-12-18  Steve Falkenburg  <sfalken@apple.com>

        Add script to run Drosera as part of the nightly.
        
        Reviewed by Kevin M.

        * Scripts/run-drosera.cmd: Added.

2007-12-18  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Remove a stray K.

2007-12-18  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Plan more renaming.

2007-12-14  Juan A. Suarez Romero  <jasuarez@igalia.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16042
        [GTK] Eliminate webkit_init()

        Moving webkit initialization to WebView class init.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main):
        * GtkLauncher/main.c:
        (main):

2007-12-17  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=13542
        gdklauncher doesnt change URL in adress GTKEntry.

        * GtkLauncher/main.c:
        (load_commit_cb): added
        (title_change_cb):
        (create_browser):

2007-12-16  Dimitri Glazkov  <dimitri@glazkov.com>

        Reviewed by Adam Roben.

        Remove the double-quotes around the PATH variable value, in order to make it work in Windows shell.

        * FindSafari/FindSafari.cpp:
        (_tmain):

2007-12-16  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16315
        FindSafari needs a path-only option.

        * FindSafari/FindSafari.cpp:
        (_tmain):

2007-12-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16462
        REGRESSION: access keys broken on Windows

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Send system key events
        if Alt is pressed.

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

        Reviewed by Mark Rowe.

        Fix urlSuitableForTestResult to correctly identify wstring::npos as
        the case when wstring.find doesn't find anything.

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

2007-12-15  Alp Toker  <alp@atoker.com>

        GTK+ DRT build fix for GLib < 2.14.

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

2007-12-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Add a watchdog timer to Gtk DumpRenderTree, and implement alert/prompt/confirm.  This prevents
        many layout tests from hanging while waiting on user responses to dialogs.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (webViewScriptAlert):
        (webViewScriptPrompt):
        (webViewScriptConfirm):
        (main):
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (waitToDumpWatchdogFired):
        (LayoutTestController::setWaitToDump):

2007-12-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Flesh out DumpRenderTree for Gtk.  After these changes, the majority of the tests in fast/js pass.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpFramesAsText): Don't print the frame name when dumping the main frame as text.
        (dump):
        (runTest):
        (webViewLoadStarted): Store the top frame when it starts loading so we can use it to determine when to dump.
        (webViewLoadFinished): Dump when the top frame load completes if we're not waiting for a JS callback and the
        work queue is empty.
        (webViewWindowObjectCleared): Set up window.layoutTestController.
        (webViewConsoleMessage): Match the console message format expected by the layout test results.
        (main): Hook up the new signals.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Only notify done if the top frame has completed loading to avoid
        dumping multiple times.
        * Scripts/build-dumprendertree: Ensure build-dumprendertree is a no-op for Gtk too.
        * Scripts/run-webkit-tests: Teach run-webkit-tests that Gtk is like Qt in many ways.  Use run-launcher to open test results.

2007-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Assert that a web frame that's loading a resource always has either a data source or 
        a provisional data source.
        
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):

2007-12-14  Darin Adler  <darin@apple.com>

        - fix mistake causing nearly all tests to fail on Windows

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole): Need to compare the result of find with
        npos, not 0. Also pass URL in to URL function rather than passing the entire message.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:]): Pass path only to path function rather
        than passing the entire message.

2007-12-14  Darin Adler  <darin@apple.com>

        - fix Tiger build

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:]): Re-implement this without using any
        new-to-Leopard methods.

2007-12-14  Darin Adler  <darin@apple.com>

        * DumpRenderTree/mac/FrameLoadDelegate.mm: Don't implement didReceiveIcon delegate method
        since it now triggers unwanted icon loading. We only had it because we implemented "all"
        delegate methods here.

2007-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Geoff.

        <rdar://problem/5619295> 
        REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)
        
        Add property getting methods to the plug-in.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2007-12-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - Layout test fix for mac. When dumped to the console local file paths
        now only show the name of the resource not the whole path.  This is to
        make the results machine and OS independent.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:]):

2007-12-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Layout tests fix.  We need a way to remove machine-dependent
        information from paths in layout test results. The UIDelegate now does
        this.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult):
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole):

2007-12-13  Alp Toker  <alp@atoker.com>

        Build fix for DRT breakage introduced in r28690.

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

2007-12-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Alice and Sam.

        - <rdar://5621435> Need a way to specify local resources (being loaded
        from HTTP tests) on Windows.
        - Implemented pathToLocalResource which exposes the functionality of
        converting a given unix path to the correct location on Windows.

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

2007-12-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        <rdar://problem/5132003>
        dumpResourceLoadCallbacks is not implemented in DRT on Windows.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        Set the resource load delegate.
        
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        
        * DumpRenderTree/win/ResourceLoadDelegate.cpp: Added.
        * DumpRenderTree/win/ResourceLoadDelegate.h: Added.

2007-12-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Fix conversion from double to LPARAM in dispatchMessage().

        * DumpRenderTree/win/EventSender.cpp:
        (dispatchMessageCallback):

2007-12-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe and Sam Weinig too!

        - added Helvetica Oblique and Helvetica Bold Oblique to the list of
          fonts DumpRenderTree registers.

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

2007-12-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Make DumpRenderTree on mac use its own path for Databases testing

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Keep a string to ~/Library/Application Support/DumpRenderTree 
          for future DRT-only use, then use it to construct the Databases path and set that default

2007-12-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5535636>
        Have to press 4 times instead of 2 times to get the expected result of ^^ with german keyboard.

        http://bugs.webkit.org/show_bug.cgi?id=13916
        JavaScript detects Tab as a character input on a textfield validation

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]): Added a few more named keys.
        Dispatch a keyup to better match what happens when a key is physically pressed.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Ditto. Also make sure that WM_CHAR is consistently dispatched before
        returning from keyDown().
        (getConstantCallback): Fixed a couple copy/paste mistakes.

2007-12-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver.

        - <rdar://5599845> Drosera: Does not show loal files in the file list
        on the left side.

        * Drosera/debugger.js: - Updated url dividing regex to handle %s and :s.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: - Updated Debug settings
        so the open source community can build.

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

        Rubberstamped by Sam Weinig

        Update DRT Mac to reflect the new UI Delegate methods I just checked into WebKit/mac

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:quotaForSecurityOrigin:toCreateDatabase:withEstimatedSize:]):
        (-[UIDelegate webView:frame:quotaForSecurityOrigin:fromProposedQuota:database:]):

2007-12-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam W.

        Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.
        
        Fixes <rdar://problem/5620249> Must disable SVG animation
        <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior
        
        In order to allow finer grained control over the set of SVG features
        this patch splits ENABLE_SVG_EXPERIMENTAL_FEATURES into the following
        distinct flags:
        ENABLE_SVG_ANIMATION
        ENABLE_SVG_FILTERS
        ENABLE_SVG_FONTS
        ENABLE_SVG_AS_IMAGE
        ENABLE_SVG_USE
        
        by default only ENABLE_SVG_AS_IMAGE and ENABLE_SVG_USE are set.
        
        Script handles all the new build flags, and allows --svg-experimental
        to automatically enable all features.

        * Scripts/build-webkit:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Fix version parsing.

        Rubber-stamped by Oliver.

        * Drosera/win/Drosera.vcproj/auto-version.sh:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Build modifications for Drosera.

        Reviewed by Adam.

        * Drosera/DroseraWin.make: Added.
        * Drosera/win/Drosera.vcproj/Drosera.rc:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * Drosera/win/Drosera.vcproj/PRODUCTVERSION: Added.
        * Drosera/win/Drosera.vcproj/VERSION: Added.
        * Drosera/win/Drosera.vcproj/auto-version.sh: Added.

2007-12-06  Adam Roben  <aroben@apple.com>

        Explicitly turn on the Mac font ascent hack on Windows

        This keeps our font metrics matching those from Mac.

        Reviewed by Hyatt.

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

2007-12-06  Anders Carlsson  <andersca@apple.com>

        Rename main.c to main.cpp here too.
        
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp: Copied from DumpRenderTree/win/TestNetscapePlugin/main.c.

2007-12-06  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Geoff.

        * Scripts/do-webcore-rename: Don't rename kjs_css twice.

2007-12-06  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more renaming plans.

2007-12-06  Anders Carlsson  <andersca@apple.com>

        Restore implementation of testGetIntIdentifier that was accidentally
        removed somehow (possibly when I made PluginObject be a cpp file).
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2007-12-05  Anders Carlsson  <andersca@apple.com>

        Make the entry points extern "C".
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        
2007-12-05  Anders Carlsson  <andersca@apple.com>

        C++ warning fixes.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_Destroy):
        (NPP_SetWindow):
        (NPP_NewStream):
        (NPP_HandleEvent):
        (NPP_URLNotify):
        (NPP_GetValue):

2007-12-05  Anders Carlsson  <andersca@apple.com>

        Add the .cpp files to the TestNetscapePlugIn target.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-12-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.
        
        Rename the TestNetscapePlugIn .c files to be .cpp.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: Removed.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Copied from DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c: Removed.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp: Copied from DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c: Removed.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp: Copied from DumpRenderTree/TestNetscapePlugIn.subproj/main.c.
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2007-12-05  Adam Roben  <aroben@apple.com>

        Fix case of keypresses from the Windows implementation of eventSender.keyDown

        This fixes several regression tests.

        Reviewed by Alice.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Virtual keycodes for ASCII characters are always
        uppercase, so we need to check the case of the original character
        passed in to eventSender.keyDown.

2007-12-05  Adam Roben  <aroben@apple.com>

        Learn from Tim's mistakes

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Reset the authorAndUserStylesEnabled preference for each
        test.

2007-12-05  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Initialize GTK+ and WebKit so the tests can run.

        Reorganize the headers a little.

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

2007-12-04  Anders Carlsson  <andersca@apple.com>

        Remove IWebScriptScope include.
        
        * Drosera/win/DebuggerDocumentPlatform.cpp:

2007-12-04  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Mark Rowe.

        Define CF as platform for mac and revert r28409

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/mac/DumpRenderTreeMac.h:

2007-12-04  Sam Weinig  <sam@webkit.org>

        Define CF as platform for windows.

        Reviewed by Adam Roben.

        * DumpRenderTree/win/DumpRenderTreeWin.h:

2007-12-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam and Darin.

        - Removed a needless BSTR cleanup.

        * Drosera/win/DebuggerDocumentPlatform.cpp:
        (DebuggerDocument::getPlatformCurrentFunctionStack):

2007-11-27  Adam Roben  <aroben@apple.com>

        Fix <rdar://5614497> setAuthorAndUserStylesEnabled is not implemented in DRT

        Reviewed by Maciej.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAuthorAndUserStylesEnabled): Implemented.

2007-12-04  Alp Toker  <alp@atoker.com>

        Prospective Win DRT build fix.

        * DumpRenderTree/DumpRenderTree.h:

2007-12-04  Alp Toker  <alp@atoker.com>

        Fix a clobbered copyright header.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:

2007-12-04  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15561
        GTK port needs DumpRenderTree implementation

        Start work on the GTK+ DRT.

        This does not work yet, and there are a few lingering style issues
        (nothing major) but this patch has been stuck in the bug tracker for
        too long already.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/gtk: Added.
        * DumpRenderTree/gtk/DumpRenderTree.cpp: Added.
        (autocorrectURL):
        (shouldLogFrameLoadDelegates):
        (dumpFrameScrollPosition):
        (displayWebView):
        (appendString):
        (dumpFramesAsText):
        (dumpRenderTreeAsText):
        (dump):
        (runTest):
        (main):
        * DumpRenderTree/gtk/DumpRenderTree.pro: Added.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h: Added.
        * DumpRenderTree/gtk/GCControllerGtk.cpp: Added.
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Added.
        (LayoutTestController::~LayoutTestController):
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::copyDecodedHostName):
        (LayoutTestController::copyEncodedHostName):
        (LayoutTestController::display):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::notifyDone):
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):
        (LayoutTestController::queueLoad):
        (LayoutTestController::queueReload):
        (LayoutTestController::queueScript):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setWindowIsKey):
        (LayoutTestController::setWaitToDump):
        (LayoutTestController::windowCount):
        (LayoutTestController::setPrivateBrowsingEnabled):
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: Added.
        (JSStringCopyUTF8CString):
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):

2007-12-03  Sam Weinig  <sam@webkit.org>

        Move JavaScriptCore thread testing code to pthread specific directory
        and remove the dependance on CoreFoundation by using WTF::HashSet.

        Reviewed by Geoff and Oliver.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ForwardingHeaders/wtf/HashMap.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/HashSet.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Vector.h: Added.
        * DumpRenderTree/JavaScriptThreading.h: Copied from DumpRenderTree/mac/JavaScriptThreading.h.
        * DumpRenderTree/mac/JavaScriptThreading.cpp: Removed.
        * DumpRenderTree/mac/JavaScriptThreading.h: Removed.
        * DumpRenderTree/pthreads: Added.
        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp: Copied from DumpRenderTree/mac/JavaScriptThreading.cpp.
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):

2007-12-03  Andrew Bonventre  <andybons@google.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16267
        Symbol lookup menu broken in debugger view

        * Drosera/debugger.js: Fixed javascript error where document property
        should have been used instead of contentDocument in switchFunction that
        was breaking the select symbol dropdown menu.  This is because
        window.frames will return a Window object and not a frame object like
        the author was originally expecting.

2007-12-03  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - <rdar://5618942> Drosera: Console window does not process everything
        correctly.
        - <rdar://5619005> Drosera: could be sped up by moving the 
        WebScriptScope stuff into the WebScriptCallFrame.
        - Now the console can correctly process objects and does not receive
        notifications from JavaScriptCore about the JavaScript in Drosera's
        own process.

        * Drosera/win/DebuggerDocumentPlatform.cpp:
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):

2007-12-03  Stephanie  <slewis@apple.com>

        Reviewed by Darin.

        Check to see if we are building a debug root

        * Scripts/check-for-global-initializers: 

2007-12-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - added a testGetIntIdentifier() method to TestNetscapePlugIn

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):

2007-12-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver.

        Added eventSender.dispatchMessage() - will be used to test Windows keyboard input
        in a more fine-grained manner than eventSender.keyDown().

        * DumpRenderTree/win/EventSender.cpp:
        (getConstantCallback):
        (dispatchMessageCallback):

2007-12-02  Darin Adler  <darin@apple.com>

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

2007-12-02  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Anders.

        Use [NSURL absoluteString] instead of [NSURL description] in order to get
        more uniform results cross platform.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSURL _drt_descriptionSuitableForTestResult]):

2007-12-02  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Niko.

        Rename FrameLoaderDelegate.h/cpp to FrameLoadDelegate.h/cpp.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/FrameLoadDelegate.cpp: Copied from DumpRenderTree/win/FrameLoaderDelegate.cpp.
        * DumpRenderTree/win/FrameLoadDelegate.h: Copied from DumpRenderTree/win/FrameLoaderDelegate.h.
        * DumpRenderTree/win/FrameLoaderDelegate.cpp: Removed.
        * DumpRenderTree/win/FrameLoaderDelegate.h: Removed.

2007-12-01  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        Make use of the newly introduced webkit.h convenience header.

        * GtkLauncher/main.c:

2007-12-01  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        * Check to see if the directory exists and exit if not.

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

2007-12-01  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        * Don't hide symbols when in Debug mode
        * On Linux (glibc) provide a backtrace in the test output for debugging purposes


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

2007-11-30  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15691
        [GTK] Public API does not follow GTK+ conventions

        Refactor the WebKit/GTK+ public API. Changes:
          WebKitPage -> WebKitWebView
          WebKitFrame -> WebKitWebFrame

        Public API source and header names have been updated to mirror the API
        changes.

        The API is now kept in WebKit/gtk/WebView to match other ports in the
        same class such as Mac and Win.

        * GtkLauncher/main.c:
        (activate_uri_entry_cb):
        (link_hover_cb):
        (title_change_cb):
        (progress_change_cb):
        (go_back_cb):
        (go_forward_cb):
        (create_browser):
        (main):

2007-11-30  Adam Roben  <aroben@apple.com>

        Hopefully the final build fix

        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Link against WTF.lib to
        pull in WTF's assertion/logging functions.

2007-11-30  Adam Roben  <aroben@apple.com>

        Another build fix

        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Use the right suffix for
        WebKit.lib.

2007-11-30  Adam Roben  <aroben@apple.com>

        Debug build fix

        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Added a Debug_Internal
        configuration.
        * Drosera/win/Drosera.vcproj/debug.vsprops: Updated to match other
        projects.
        * Drosera/win/Drosera.vcproj/release.vsprops: Ditto.
        * Drosera/win/Drosera.vcproj/debug_internal.vsprops: Copied from
        WebKitTools/DumpRenderTree/win/debug_internal.vsprops.

2007-11-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix drawSelectionRect to actually draw the selection rect.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (drawSelectionRect):

2007-11-30  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: WildFox already did the TextStyle -> FontStyle one.

2007-11-30  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Get ready for some future renaming.

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Removed some unnecessary functions and changed an unused return type. 

        * Drosera/win/DebuggerClient.cpp:
        (registerConsoleClass):
        * Drosera/win/DebuggerClient.h:
        * Drosera/win/Drosera.cpp:
        (registerDroseraClass):

2007-11-28  Alp Toker  <alp@atoker.com>

        Reviewed by Timothy Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=16174
        [GTK] Use "URI" not "URL" in public API

        Replace use of the term "URL" with "URI" in public headers,
        documentation and some internal code to match GLib/GTK+ convention.

        This is now mentioned in the API guidelines:
          http://trac.webkit.org/projects/webkit/wiki/HackingGtk

        * GtkLauncher/main.c:
        (activate_uri_entry_cb):
        (title_change_cb):
        (create_toolbar):
        (main):

2007-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        <rdar://problem/5230478>
        FrameLoadDelegate callbacks are not dumped in DRT.
        
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldLogFrameLoadDelegates):
        (runTest):
        (main):
        * DumpRenderTree/win/FrameLoaderDelegate.cpp:
        (BSTRtoString):
        (descriptionSuitableForTestResult):
        (FrameLoadDelegate::QueryInterface):
        (FrameLoadDelegate::didStartProvisionalLoadForFrame):
        (FrameLoadDelegate::didFailProvisionalLoadWithError):
        (FrameLoadDelegate::didCommitLoadForFrame):
        (FrameLoadDelegate::didFinishLoadForFrame):
        (FrameLoadDelegate::willCloseFrame):
        (FrameLoadDelegate::didClearWindowObject):
        (FrameLoadDelegate::didFinishDocumentLoadForFrame):
        (FrameLoadDelegate::didHandleOnloadEventsForFrame):
        * DumpRenderTree/win/FrameLoaderDelegate.h:
        (FrameLoadDelegate::windowScriptObjectAvailable):
        (FrameLoadDelegate::didFirstLayoutInFrame):

2007-11-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Add database quota UIDelegates methods to DRT UIDelegate.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:quotaForSecurityOrigin:toCreateDatabase:withEstimatedSize:]):
        (-[UIDelegate webView:quotaForSecurityOrigin:fromProposedQuota:database:]):

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - <rdar://5618976> Drosera: should listen for the WebScriptDebugServer
        dying and vice versa.
        - This fix will allow Drosera and Safari to reconnect if either of them
        closes correctly, but does not fix the case where one of them dies
        silently.

        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::attemptToCreateServerConnection): Added a safety
        check, because it's possilbe to try to connect to a server that's dying.
        (ServerConnection::serverDidDie): Implemented. This resets Drosera when
        the server has died.
        * Drosera/win/ServerConnection.h: Added the new function and removed
        an unnecessary member.

2007-11-29  Anders Carlsson  <andersca@apple.com>

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        Add shlwapi.lib to all configurations.

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        - Build fix.  Added additional includes for VS Express to the Release
        project.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5132005>
        setUserStyleSheetEnabled is not fully implemented in Windows DRT.
        
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        Add shlwapi.lib
        
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setUserStyleSheetEnabled):
        Implement this.
        
        (appendComponentToPath):
        New method which wraps the Win32 API PathAppend.
        
        (followShortcuts):
        New method which checks if a file points to a shortcut and
        follows the shortcut.
        
        (resolveCygwinPath):
        New method that takes a cygwin unix-style path and returns the Win32 path.
        
        (cfStringRefToWString):
        
        (LayoutTestController::setUserStyleSheetLocation):
        Implement this.

2007-11-29  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://5133828> fast/frames/iframe-window-focus.html output is lowercase

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        uppercase letters were being sent as lowercase letters without the shift key down.

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        - Windows build fix. VS express needs some love.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-11-28  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        Send capital letters through as lowercase letters with the shift key down
        rather than sending them as if they were highly unusual "capital letter keys".

        * Scripts/update-javascriptcore-test-results: Add a "--force" option for cases
        where you need to update results and more tests are failing than before.

2007-11-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5132001>
        contextClick is not implemented in DRT on Windows.
        
        * DumpRenderTree/win/EventSender.cpp:
        (contextClickCallback):
        Add a callback for contextClick, which sends a WM_RBUTTONDOWN message followed
        by a WM_RBUTTONUP message.
        
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::hasCustomMenuImplementation):
        (UIDelegate::trackCustomPopupMenu):
        * DumpRenderTree/win/UIDelegate.h:
        Add a no-op implementation of trackCustomPopupMenu, to prevent the default popup
        menu from being shown (and causing the DRT to hang).

2007-11-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Fix DumpRenderTree ObjC bug comparing strings.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController identityIsEqual::]): Compare strings with string
        equality instead of identiy equality.

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam.

        Reset the authorAndUserStylesEnabled preference
        back to YES for each test. Fixes the broken tests.

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

2007-11-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Drosera now displays the console window, although it cannot currently
        process JavaScript.

        * Drosera/win/DebuggerClient.cpp: Shows the console window.
        (registerConsoleClass): Implemented.
        (consoleWndProc): Implemented.
        (DebuggerClient::onSize): Implemented.
        (DebuggerClient::createWebViewWithRequest): Implemented, now creates a
        new window.
        * Drosera/win/DebuggerClient.h: Added needed method and members for 
        creating and maintaining a new window.
        * Drosera/win/Drosera.cpp: Fixed some minor bugs, and moved a couple of
        lines of code to more appropriate places.
        (Drosera::handleCommand):
        (Drosera::initUI):
        (Drosera::onSize):
        (Drosera::attach):

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5569233> Add the ability to disable author and user CSS styles
        
        Add support for disabling author and user styles for testing.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/LayoutTestController.cpp:
        (setAuthorAndUserStylesEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAuthorAndUserStylesEnabled):

2007-11-26  Dan Bernstein  <mitz@apple.com>

        - Tiger build fix.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2007-11-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - Implemented displaying variables for Drosera on Win.

        * Drosera/win/DebuggerDocumentPlatform.cpp: Changed Drosera functions
        that retrieve variables to not hold onto the return value since it's
        not returned.  Also changed to use the new signatures of the retrieval
        functions.
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        * Drosera/win/Drosera.cpp: Removed a needless TODO.
        (droseraWndProc):

2007-11-26  Sam Weinig  <sam@webkit.org>

        Cleanup names of painting and repainting functions.

        Reviewed by Adam Roben.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (drawSelectionRect): was drawSelectionRectIntoContext.
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (paintWebView): was drawWebViewIntoContext.
        (repaintWebView): was repaintWithVerticalSweep and repaintWithHorizontalSweep.

2007-11-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        - Leopard build fix

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2007-11-26  Sam Weinig  <sam@webkit.org>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16136
        Use shared PixelDumpSupport for Mac DRT

        Reviewed by Adam Roben.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/PixelDumpSupport.h: Copied from DumpRenderTree/win/PixelDumpSupport.h.
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (drawSelectionRectIntoContext):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/mac/ImageDiff.m: Removed.
        * DumpRenderTree/mac/PixelDumpSupport.h: Removed.
        * DumpRenderTree/mac/PixelDumpSupport.mm: Removed.
        * DumpRenderTree/mac/PixelDumpSupportMac.mm: Copied from DumpRenderTree/mac/PixelDumpSupport.mm.
        (setDefaultColorProfileToRGB):
        (getBitmapContextFromWebView):
        (drawWebViewIntoContext):
        (repaintWithVerticalSweep):
        (repaintWithHorizontalSweep):
        (getSelectionRect):
        * DumpRenderTree/win/PixelDumpSupport.h: Removed.

2007-11-25  David D. Kilzer  <ddkilzer@webkit.org>

        Bug 16052: prepare-ChangeLog doesn't report deleted files
        <http://bugs.webkit.org/show_bug.cgi?id=16052>

        Reviewed by Sam.

        * Scripts/prepare-ChangeLog: Fixed logic that checks for removed files.

2007-11-25  David Kilzer  <ddkilzer@webkit.org>

        Bug 15864: Replace merge-changelog with resolve-ChangeLogs
        <http://bugs.webkit.org/show_bug.cgi?id=15864>

        Reviewed by Adam.

        Roll functionality of merge-changelog into resolve-ChangeLogs
        script.  The script now checks for ChangeLog.rej and
        ChangeLog.orig files first.  If it finds them, it uses the
        ChangeLog.rej file as a patch (in old contextual diff format) to
        apply with --fuzz=3.

        * Scripts/merge-changelog: Removed.
        * Scripts/resolve-ChangeLogs: Handle traditional rejected patches.

2007-11-25  Sam Weinig  <sam@webkit.org>

        Add .xcconfig files for the ImageDiff and TestNetscapePlugIn targets of the DumpRenderTree.

        Reviewed by Mark Rowe.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig: Added.

2007-11-25  Sam Weinig  <sam@webkit.org>

        Convert DumpRenderTree to ues .xcconfig files.

        Reviewed by Mark Rowe.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: Added.

2007-11-25  Sam Weinig  <sam@webkit.org>

        Add ForwardingHeaders to wtf for DumpRenderTree.

        Reviewed by Mark Rowe.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ForwardingHeaders: Added.
        * DumpRenderTree/ForwardingHeaders/wtf: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Assertions.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Platform.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/RetainPtr.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/StringExtras.h: Added.
        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/WorkQueue.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/JavaScriptThreading.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/mac/ObjCController.m:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/mac/WorkQueueItemMac.mm:

2007-11-25  Adam Roben  <aroben@apple.com>

        Fix some test failures caused by r28019

        Now that stdout is in binary mode, we need to always use printf
        instead of wprintf. Otherwise we'll end up with UTF-16 characters in
        the output.

        Reviewed by Sam.

        * DumpRenderTree/win/UIDelegate.cpp: Replaced uses of wprintf with
        printf.
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::webViewAddMessageToConsole):

2007-11-25  Adam Roben  <aroben@apple.com>

        Set the font smoothing preference in DRT

        This makes the pixel results on Windows closer to the Mac results.

        Reviewed by Mitz.

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

2007-11-25  Adam Roben  <aroben@apple.com>

        Port ImageDiff to CG and C++

        Final part of http://bugs.webkit.org/show_bug.cgi?id=16133
        <rdar://5071708>

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.sln: Added ImageDiff.vcproj.
        * DumpRenderTree/cg/ImageDiffCG.cpp: Added.
        (main):
        (createImageFromStdin):
        (compareImages):
        (getDifferenceBitmap):
        (computePercentageDifferent):
        * DumpRenderTree/win/ImageDiff.vcproj: Added.

2007-11-25  Adam Roben  <aroben@apple.com>

        Fix image diff link generation on Windows

        Reviewed by Sam.

        * Scripts/run-webkit-tests: Removed unnecessary and incorrect calls
        to toURL.

2007-11-25  Adam Roben  <aroben@apple.com>

        Implement pixel dumping in Windows DRT

        Part of http://bugs.webkit.org/show_bug.cgi?id=16133
        <rdar://5071708>

        Reviewed by Sam.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Added.
        (printPNG): Dumps a CGImageRef as a PNG to stdout, along with a
        Content-Length header.
        (getMD5HashStringForBitmap):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h: Copied from WebKitTools/DumpRenderTree/mac/DumpRenderTreePasteboard.h.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump): Do a pixel dump if requested.
        (main): Parse pixel test options.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Added new files and added
        the cg/ subdirectory to the include path.
        * DumpRenderTree/win/MD5.cpp: Added. Windows MD5 functions aren't
        available in a header or import library, so we have to go through this
        LoadLibrary/GetProcAddress dance to use them.
        (cryptDLL):
        (init):
        (update):
        (final):
        (MD5_Init):
        (MD5_Update):
        (MD5_Final):
        * DumpRenderTree/win/MD5.h: Added.
        * DumpRenderTree/win/PixelDumpSupport.h: Added. This file should be
        moved up to the top level to share it with Mac eventually.
        * DumpRenderTree/win/PixelDumpSupportWin.cpp: Added.
        (getBitmapContextFromWebView): Forces the WebView to paint using a
        WM_PRINTCLIENT message, and puts the result in a CGBitmapContext.

2007-11-25  Adam Roben  <aroben@apple.com>

        Clean up Windows DRT's option parsing a little bit

        Reviewed by Sam.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): Put non-option arguments into a Vector.

2007-11-25  Adam Roben  <aroben@apple.com>

        Make Windows DRT stop changing LF into CRLF

        Reviewed by Sam.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): Put stdout in binary mode.
        * Scripts/run-webkit-tests: Remove the CRLF hack.

2007-11-24  David Kilzer  <ddkilzer@webkit.org>

        Removed empty directory.

        * Scripts/resources: Removed.

2007-11-23  David D. Kilzer  <ddkilzer@webkit.org>

        Fix bisect-builds to work with recent WebKit nightly builds.

        Reviewed by Dan.

        * Scripts/bisect-builds: Check for the 
        WebKit.app/Contents/Frameworks/10.[45] directory. If it exists, use
        it for the DYLD_FRAMEWORK_PATH environment variable, else fallback
        to WebKit.app/Contents/Resources.

2007-11-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        <rdar://problem/5539306> REGRESSION: redirect fails when subframe's document is opened but
        not closed (affects digg.com)

        * DumpRenderTree/mac/DumpRenderTree.mm: (runTest): Replace the current document with a blank
        one after finishing with a test to avoid having its delayed onload handler firing when
        replaced with the next one. This is ugly and still unreliable (see LayoutTests ChangeLog),
        but it helps somewhat.

2007-11-22  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Fix build-webkit to propagate make's exit status if it fails.

        * Scripts/webkitdirs.pm:

2007-11-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix crash when running pixel tests

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Parse the command line options before setting up the
        environment so that we know if we need to set up the pixel dump
        machinery.

2007-11-21  Eric Seidel  <eric@webkit.org>

        Speculative build fix for Tiger.

        * DumpRenderTree/mac/PixelDumpSupport.mm: include unistd.h

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Break out more of DumpRenderTree.mm into individual files

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/CheckedMalloc.cpp: Added.
        (checkedMalloc):
        (checkedRealloc):
        (makeLargeMallocFailSilently):
        * DumpRenderTree/mac/CheckedMalloc.h: Added.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (crashHandler):
        (dump):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/JavaScriptThreading.cpp: Added.
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * DumpRenderTree/mac/JavaScriptThreading.h: Added.
        * DumpRenderTree/mac/PixelDumpSupport.h: Added.
        * DumpRenderTree/mac/PixelDumpSupport.mm: Added.
        (restoreColorSpace):
        (setDefaultColorProfileToRGB):
        (initializeColorSpaceAndScreeBufferForPixelTests):
        (md5HashStringForBitmap):
        (dumpWebViewAsPixelsAndCompareWithExpected):

2007-11-21  Kevin Ollivier  <kevino@theolliviers.com>

        Move install-unix-extras to wx directory as it seems only to be used by that 
        port now. It now supports universal binaries on Mac and adds libpng and libjpeg. 
        Also, have build-wxwebkit run it in order to fix the Mac buildbot, and
        have install-unix-extras install into WebKitLibraries as per
        convention.
        
        Reviewed by Mark Rowe.

        * Scripts/install-unix-extras: Removed.
        * wx/build-wxwebkit:
        * wx/install-unix-extras: Copied from WebKitTools/Scripts/install-unix-extras.

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam.

        More refactoring for greater code readability

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (initializeColorSpaceAndScreeBufferForPixelTests):
        (addTestPluginsToPluginSearchPath):
        (useLongRunningServerMode):
        (runTestingServerLoop):
        (prepareConsistentTestingEnvironment):
        (dumpRenderTree):
        (main):
        (dumpFramesAsText):
        (dumpBackForwardListForWebView):
        (sizeWebViewForCurrentTest):
        (methodNameStringForFailedTest):
        (dumpBackForwardListForAllWindows):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (dump):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:createWebViewWithRequest:]):

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Abstract more of DRT into static methods

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (setupSignalHandlers):
        (allocateGlobalControllers):
        (releaseAndZero):
        (releaseGlobalControllers):
        (dumpRenderTree):
        (shouldLogFrameLoadDelegates):
        (createCFURLFromPathOrURL):
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Pull DumpRenderTreeWindow and DumpRenderTreePasteboard out into their own files

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        (dump):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h: Added.
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m: Added.
        (+[DumpRenderTreePasteboard _pasteboardWithName:]):
        (+[DumpRenderTreePasteboard releaseLocalPasteboards]):
        (-[DumpRenderTreePasteboard declareType:owner:]):
        (+[LocalPasteboard alloc]):
        (-[LocalPasteboard init]):
        (-[LocalPasteboard dealloc]):
        (-[LocalPasteboard name]):
        (-[LocalPasteboard releaseGlobally]):
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard changeCount]):
        (-[LocalPasteboard types]):
        (-[LocalPasteboard availableTypeFromArray:]):
        (-[LocalPasteboard setData:forType:]):
        (-[LocalPasteboard dataForType:]):
        (-[LocalPasteboard setPropertyList:forType:]):
        (-[LocalPasteboard setString:forType:]):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h: Added.
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm: Added.
        (+[DumpRenderTreeWindow allWindows]):
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow dealloc]):
        (-[DumpRenderTreeWindow isKeyWindow]):
        (-[DumpRenderTreeWindow keyDown:]):

2007-11-20  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for Windows. Don't use WebCore/move-js-headers.sh as
        it indiscriminately copies any headers inside JavaScriptCore,
        which includes Tiger ICU headers. 

        * wx/build-wxwebkit:
        Don't run WebCore/move-js-headers.sh any longer.

2007-11-20  Adam Treat  <treat@kde.org>

        Reviewed by David Kilzer.

        * Prepend git branch name to $baseProductDir

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

2007-11-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:  Pass "clean" flag down into buildQMakeProject.
        * Scripts/webkitdirs.pm: Respect the "clean" flag passed down from build-webkit.
        Have it trigger a "make distclean" rather than "make clean" to ensure that the
        built product and generated Makefile's are removed.

2007-11-19  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16040
        [GTK] GtkLauncher should be written in C

        Port GtkLauncher to plain C.

        Use a more conventional GTK+ coding style.

        Use a toolbar instead of menus.

        Various signature fixes and cleanups.

        Add a license header. Assume all previous modifications were copyright
        assigned to Apple Inc. by default.

        * GtkLauncher/GtkLauncher.pro:
        * GtkLauncher/main.c: Added.
        (activate_url_entry_cb):
        (update_title):
        (link_hover_cb):
        (title_change_cb):
        (progress_change_cb):
        (destroy_cb):
        (go_back_cb):
        (go_forward_cb):
        (create_browser):
        (create_statusbar):
        (create_toolbar):
        (create_window):
        (main):
        * GtkLauncher/main.cpp: Removed.

2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>

        Build script fixes to ensure they do the right thing for the 
        wx port, and update build-wxwebkit to reflect the way the
        build scripts now work.

        Reviewed by Adam.

        * Scripts/build-testkjs:
        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitdirs.pm:
        * wx/build-wxwebkit:

2007-11-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Anders.

        Make run-javascriptcore-tests report failures on exit (to support git bisect)

        * Scripts/run-javascriptcore-tests:

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

        Reviewed by Adam Roben.

        Make run-webkit-tests work with Windows debug build.

        * DumpRenderTree/win/DumpRenderTree.cpp: (main): Only use memory checks with debug CRT.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Switched Debug configuration to release CRT,
        as it is supposed to run with release Apple libraries. Removed _DEBUG preprocessor
        symbol, as it goes with debug CRT (AFAIK, it is supposed to be added automatically,
        and shouldn't be needed in Debug_internal configuration, but I didn't dare to change that).

2007-11-18  Kevin Ollivier  <kevino@theolliviers.com>

        Add wxWebKit sample and build script, and integrate it with 
        build-webkit. Also make build-webkit --clean work for all
        ports.

        Reviewed by Darin Adler.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        * wx: Added.
        * wx/browser: Added.
        * wx/browser/browser.bkl: Added.
        * wx/browser/browser.cpp: Added.
        * wx/build-wxwebkit: Added.

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

        Make it easy to run Safari in the debugger on Windows

        I've added a new script, debug-safari, which launches Safari in the
        debugger. On OS X it just calls gdb-safari.

        Reviewed by Mark Rowe.

        * FindSafari/FindSafari.cpp:
        (_tmain): Added a /debugger flag, which in combination with
        /printSafariLauncher will print a script that launches Safari in the
        debugger.
        * Scripts/debug-safari: Added.
        * Scripts/run-safari: Changed to call runSafari().
        * Scripts/run-webkit-nightly.cmd: Prepends the launcher script with
        vsvars32.bat, which will let us find VS/VC++ Express, and passes the
        first argument along to FindSafari.
        * Scripts/webkitdirs.pm:
        (sub runSafari): Added.

2007-11-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        * Scripts/run-webkit-tests: Avoid an uninitialized warning if WEBKIT_TESTFONTS is not defined. 

2007-11-16  Ryan Leavengood  <leavengood@gmail.com>

        Reviewed by David Kilzer.

        The git config command was renamed to repo-config at some point. This
        change tries git config and then git repo-config if the first fails.

        * Scripts/prepare-ChangeLog:
        (gitConfig):

2007-11-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        - fix <rdar://problem/5134075> fast/forms/select-type-ahead-non-latin.html fails on Windows

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): For characters that cannot be entered on the active
        keyboard layout, send a WM_CHAR message with the character along with
        a WM_KEYDOWN message with a virtual key code of 255.

2007-11-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Don't weak link against WebCore now that it is a sub-framework of WebKit in all configurations.

        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-11-15  Adam Roben  <aroben@apple.com>

        Make run-safari actually work on Windows

        * Scripts/run-safari: Fixed the order of arguments to cp, and added a
        chdir call.

2007-11-14  Adam Roben  <aroben@apple.com>

        Updates to Safari launching now that 3.0.4 is released

        Reviewed by Sam.

        * FindSafari/FindSafari.cpp:
        (getWebViewCLSID): Use version-independent ProgID.
        * Scripts/run-safari: Use run-webkit-nightly.cmd.

2007-11-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5309081>
        In DRT, "plugin.logDestroy = true" not working on Windows.
        
        * DumpRenderTree/win/TestNetscapePlugin/main.c:
        (NPP_Destroy):

2007-11-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * Scripts/run-sunspider: add --shark-cache for L2 Cache Miss profiling

2007-11-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5141186>
        window.layoutTestController.setWindowIsKey is not implemented in DRT.
        
        Implement setWindowIsKey.
        
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWindowIsKey):

2007-11-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix for <rdar://problem/5382579>
        http/tests/security/cross-frame-access-put.html reports large 
        negative numbers for screenLeft and screenTop (Mac reports "0")

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::UIDelegate): Initialize the RECT.
        (UIDelegate::setFrame): copy the contents of the rect, not the pointer.
        (UIDelegate::webViewFrame): ditto.
        * DumpRenderTree/win/UIDelegate.h: Use a RECT not a RECT*

2007-11-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Make Drosera show source, source URLs, and function stack on Windows,
        and some minor fixes.

        * Drosera/DebuggerDocument.cpp: Force source to always update display.
        (DebuggerDocument::updateFileSource):
        * Drosera/debugger.js: Force source to always update display.
        * Drosera/win/DebuggerClient.cpp: Create the needed functions for the
        menu controls.
        (DebuggerClient::resume):
        (DebuggerClient::pause):
        (DebuggerClient::stepInto):
        (DebuggerClient::stepOver):
        (DebuggerClient::stepOut):
        (DebuggerClient::showConsole):
        (DebuggerClient::closeCurrentFile):
        * Drosera/win/DebuggerClient.h: Ditto.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Changed
        getPlatformCurrentFunctionStack to not use an unecessary HRESULT and
        removed two bugs.  1) caller could be in a bad state when asked to
        assign into it. 2) BSTRs were not created correctly.
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        * Drosera/win/Drosera.cpp: Hook up the menu controls.
        (droseraWndProc):
        (handleCommand):
        (Drosera::resume):
        (Drosera::pause):
        (Drosera::stepInto):
        (Drosera::stepOver):
        (Drosera::stepOut):
        (Drosera::showConsole):
        (Drosera::closeCurrentFile):
        * Drosera/win/Drosera.h: Hook up the menu controls.
        * Drosera/win/ServerConnection.cpp: Removed unncessary server connection
        functions, added a null check, and fixed another bug where caller could
        be in a bad state when asked to assign into it.
        (ServerConnection::didLoadMainResourceForDataSource):
        (ServerConnection::getCallerFrame):
        * Drosera/win/ServerConnection.h: Safety first.

2007-11-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <http://bugs.webkit.org/show_bug.cgi?id=13371>
          DumpRenderTree --pixel-tests renders each test twice

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Removed the --paint option because the painting code
        is always exercised as a result of
        -[FrameLoadDelegate webView:didFinishLoadFromFrame:]
        calling -displayIfNeeded.
        (dump): Changed to always grab the image from the window since the view
        is always displayed.
        (runTest):
        (displayWebView):
        * Scripts/run-webkit-tests: No need to pass --paint to DumpRenderTree
        because it always paints.

2007-11-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        Add support for http media tests

        * Scripts/run-webkit-tests:

2007-11-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Implement LayoutTestController.setPrivateBrowsingEnabled(bool) for windows.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPrivateBrowsingEnabled):

2007-11-12  Adam Roben  <aroben@apple.com>

        * Scripts/update-webkit-localizable-strings: Changed to only scan the
        mac and win subdirectories.

2007-11-11  Adam Roben  <aroben@apple.com>

        Fix <rdar://5133816> keepWebHistory is not implemented

        Fixes fast/history/clicked-link-is-visited.html.

        Reviewed by Darin.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Clear the optionalSharedHistory.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::keepWebHistory): Set the optionalSharedHistory.

2007-11-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Follow up to <rdar://problem/5394877> Safari should not log unsafe JavaScript 
        attempts when in private browsing mode (only an issue if Log JavaScript Exceptions 
        is turned on)

        - Add LayoutTestController.setPrivateBrowsingEnabled(bool) (stub out implementation for windows)

        Added test: http/tests/security/cross-frame-access-private-browsing.html

        * DumpRenderTree/LayoutTestController.cpp:
        (setPrivateBrowsingEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest): Default to private browsing disabled.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setPrivateBrowsingEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPrivateBrowsingEnabled):

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Changed the vcproj file to use Drosera's ForwardingHeaders and not
        WebCore's!

        * Drosera/ForwardingHeaders/wtf/Assertions.h: Added.
        * Drosera/ForwardingHeaders/wtf/HashTraits.h: Added.
        * Drosera/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * Drosera/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * Drosera/ForwardingHeaders/wtf/RetainPtr.h: Added.
        * Drosera/win/Drosera.cpp:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Use the new IWebFrame [local] function signature and get the shared
        server correctly.

        * Drosera/win/DebuggerClient.cpp:
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::attemptToCreateServerConnection):

2007-11-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - add an option to run-webkit-tests to ignore pixel test failures where
          all pixels differ by no more than a specified threshold

        * DumpRenderTree/mac/ImageDiff.m:
        (main):
        (compareImages):
        (computePercentageDifferent):
        * Scripts/run-webkit-tests:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make the setting of letting Javascript access the clipboard configurable through QWebSettings, turn it off by default and turn it on in DumpRenderTree.

        * DumpRenderTree/qt/DumpRenderTree.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Reworked the QWebSettings API.
        QWebPage now returns a pointer to its mutable QWebSettings object and the settings of newly created QWebPageObjects are initialized from QWebSettings::defaultSettings().

        * DumpRenderTree/qt/DumpRenderTree.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make QWebHistory an explicitly shared object, returned as a pointer by QWebPage::history().

        * DumpRenderTree/qt/jsobjects.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Add a QWebPage::frameCreated() signal and fix DRT
        
        The removal of createFrame in QWebPage broke the re-implementation
        in DumpRenderTree. Instead emit a frameCreated() signal and
        connect to it in DumpRenderTree.
        

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

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Moved all the event handlers from QWebFrame into QWebPage.
        
        This cleans up the public API and allows us to remove the
        HackWebFrame hack in DumpRenderTree.
        

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Mark.

        Implemented the two Javascript prompt callbacks in qt/DumpRenderTree
        to prevent the default implementation from popping up messageboxes.

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

2007-11-06  Eric Seidel  <eric@webkit.org>

        * Scripts/build-testkjs: build fix... too many $$

2007-11-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        * Scripts/build-testkjs: return xcodebuild's exit status, instead of grep's

2007-11-05  Adam Roben  <aroben@apple.com>

        Add support on Windows for WEBKIT_TESTFONTS

        This environment variable lets you specify where the fonts to be used
        by DumpRenderTree reside. The Qt port is already using this, so I'm
        just following their lead.

        Reviewed by Darin.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (exePath): Refactored code out of initialize().
        (fontsPath): Returns either $WEBKIT_TESTFONTS or
        DumpRenderTree.resources.
        (initialize): Use the new fontsPath function.
        (main): Use the new exePath function.
        * Scripts/run-webkit-tests: Propagate the WEBKIT_TESTFONTS environment
        variable to DRT, like Qt does.

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

        Rubber-stamped by Alp Toker.

        Remove buggy "autocomplete" from GtkLauncher as it causes more problems than it solves.

        * GtkLauncher/main.cpp:
        (goToURLBarText):
        (main):

2007-11-04  David D. Kilzer  <ddkilzer@webkit.org>

        bisect-builds doesn't work with nightly build r19992 or newer on Leopard
        <http://bugs.webkit.org/show_bug.cgi?id=15830>

        Reviewed by Timothy.

        Restrict the range of nightly builds used by the bisect-builds script
        based on the version of Safari and the version of Mac OS X being used.

        Mac OS X 10.4: Safari 2.0: r11976 or newer
        Mac OS X 10.4: Safari 3.0: r19992 or newer

        Mac OS X 10.5: Safari 2.0: r19594 or newer
        Mac OS X 10.5: Safari 3.0: r25124 or newer

        * Scripts/bisect-builds:
        (findMacOSXVersion): Added.
        (makeNightlyList): Added argument to provide version of Mac OS X.
        Restrict range of nightly builds based on Safari and Mac OS X versions.

2007-11-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - This patch involves several changes, all of them were noticed that
        they were needed by the work being done in WebKit to get Drosera and
        WebKit working together on Windows.
        - The changes are:
        1) Added a debugger console for output messages.
        2) Drosera now listens for the WebKit server (before, the server would
        have to be running before Drosera was started.)
        3) Fixed a bug where the WebView started out as 0x0 pixels.
        4) Fixed a bug when there is no scope.
        5) Added the HTML, JS, and CSS to the project file to make them easy to
        find.
        6) Made the ServerConnection functions virtual.

        * Drosera/win/DebuggerClient.cpp: This is part of how Drosera listens
        for the WebKit server.
        (DebuggerClient::DebuggerClient):
        (DebuggerClient::~DebuggerClient):
        (DebuggerClient::didFinishLoadForFrame):
        (DebuggerClient::serverConnected):
        (DebuggerClient::attemptToCreateServerConnection):
        * Drosera/win/DebuggerClient.h: Ditto.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Fixed a bug when there is no
        scope.
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        * Drosera/win/Drosera.cpp:
        (_tWinMain): Added a console in debug for output messages.
        (Drosera::Drosera): Listen for server.
        (Drosera::initUI): The server now Initializes COM.
        (Drosera::serverConnected): Part of the listening for the server.
        (Drosera::attemptToCreateServerConnection): Ditto.
        * Drosera/win/Drosera.h: New interface for listening for the server.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Added HTML, JS, and CSS
        files to the VS project.
        * Drosera/win/ServerConnection.cpp: Part of listening for the server
        connection.
        (ServerConnection::ServerConnection):
        (ServerConnection::attemptToCreateServerConnection):
        * Drosera/win/ServerConnection.h: Ditto and virtualized the Interface
        methods.
        (ServerConnection::serverConnected):

2007-11-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15832
        fast/dom/gc-10.html crashes when run alone

        Check for !done before using objects that can be already deallocated.

        * DumpRenderTree/mac/EditingDelegate.mm:
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        (-[EditingDelegate webViewDidChangeSelection:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didReceiveIcon:forFrame:]):
        (-[FrameLoadDelegate webView:didChangeLocationWithinPageForFrame:]):
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):
        (-[FrameLoadDelegate webView:didCancelClientRedirectForFrame:]):
        (-[FrameLoadDelegate webView:willCloseFrame:]):
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):
        (-[FrameLoadDelegate webView:didHandleOnloadEventsForFrame:]):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willCacheResponse:fromDataSource:]):

2007-11-04  Mark Rowe  <mrowe@apple.com>

        Build fix.  Don't use Carbon.h as the prefix header as it triggers
        warnings that would otherwise be suppressed due to it being a system header.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-11-03  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Adam.
        
        - Turn off deprecated function warnings for TestNetscapePlugin because Carbon.h triggers them

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        Sort files(...); sections of Xcode project files.

        Rubber-stamped by Darin.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        Script to sort "files(...);" sections in Xcode project.pbxproj files.

        Reviewed by Darin.

        * Scripts/sort-Xcode-project-file: Added.

2007-11-02  Darin Adler  <darin@apple.com>

        * Scripts/run-sunspider: Changed "--base" to "--set-baseline".

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Scripts/run-sunspider: Pass the "--base" option through.

        * Scripts/sunspider-compare-results: Don't check the number of parameters; let
        the real script do that. Default configuration to Release to match run-sunspider
        so we don't end up building Debug just to compare results.

2007-11-01  Adam Roben  <aroben@apple.com>

        Make changes in WebKit/win show up under "WebKit/win:" instead of just "win:"

        Reviewed by Sam.

        * Scripts/commit-log-editor: Show all the directories beneath the
        source root, instead of just the last one.

2007-11-01  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Adam Roben.

        Print out an error message when the Windows build fails
        and provide guidance on how to find out what went wrong.

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

2007-11-01  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Adam Roben.

        Rolled out r27326 - debug CRT seems to cause no problems after all.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

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

        Switch the Debug configuration to using the non-debug CRT

        This matches WebKit.

        Reviewed by Steve.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2007-10-31  Antti Koivisto  <antti@apple.com>

        Reviewed by bdash.
        
        Disable media tests when doing leak checking on Tiger.
        They crash in QuickTime (rdar://problem/5537157).

        * Scripts/run-webkit-tests:

2007-10-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        Build media support by default on OSX only.

        * Scripts/build-webkit:

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        - Made Adam the reviewer for a previous checkin. Not sure how it didn't
        get caught by the pre-commit hooks.

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - This is a collection of relatively unrelated changes and cleanups
        to Drosera to prepare it for interacting with WebKit.  A lot of these
        changes are just correcting mistakes, for example removing included
        headers that are no longer needed.

        * Drosera/DebuggerDocument.h: Added accessor for the ServerConnection
        this will be needed by the DebuggerClient.
        (DebuggerDocument::server):
        * Drosera/win/BaseDelegate.h: Removed unnecessary include.
        * Drosera/win/DebuggerClient.cpp: 
        (DebuggerClient::didFinishLoadForFrame): Finished implementing.
        (DebuggerClient::didReceiveTitle): Added comment about its purpose.
        (DebuggerClient::createWebViewWithRequest): Added comment about its
        purpose. 
        * Drosera/win/DebuggerClient.h: Removed unnecessary include, and forward
        declarations.
        (DebuggerClient::webViewLoaded): Moved.
        * Drosera/win/Drosera.cpp: Moved a function from the HelperFunctions
        file, since this was the only place it was used.
        (cfStringToBSTR):
        * Drosera/win/Drosera.h: Cleaned up the includes.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Removed HelperFunctions.h
        * Drosera/win/HelperFunctions.h: Removed.

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Small cleanup in the ServerConnection class.

        * Drosera/win/ServerConnection.cpp: Added comments, moved some functions
        and added an include.
        (ServerConnection::currentFrame):
        (ServerConnection::getCallerFrame):
        * Drosera/win/ServerConnection.h: Added comments, moved some functions,
        made a pointer into a COMPtr, and cleaned up the includes.

2007-10-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John Sullivan.
        
        - Place the Localizable.strings file in mac or win directories
          if that location exists.
        - Also look for UI_STRING in .c files.

        * Scripts/extract-localizable-strings:

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Set the eol-style to native and made all the line endings the same
        so that I avoid messy diffs that show eol changes.

        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::didParseSource):
        (ServerConnection::didEnterCallFrame):
        (ServerConnection::willExecuteStatement):
        (ServerConnection::willLeaveCallFrame):
        (ServerConnection::exceptionWasRaised):

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        * Drosera/win/DebuggerDocumentPlatform.cpp:Implemented much of the
        functionality that could not have existed previously without the new
        interfaces.
        (JSValueRefCreateWithBSTR): Added a helper function to easily convert
        from a BSTR to a JSValueRef.
        (DebuggerDocument::platformEvaluateScript): Implemented.
        (DebuggerDocument::getPlatformCurrentFunctionStack): Implemented.
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        Implemented.
        (DebuggerDocument::platformValueForScopeVariableNamed): Implemented.
        * Drosera/win/HelperFunctions.h: Cleaned up some comments.
        * Drosera/win/ServerConnection.cpp: Added a helper function.
        (ServerConnection::getCallerFrame):
        * Drosera/win/ServerConnection.h: Added a helper function.

2007-10-29  Kevin McCullough  <kmccullough@apple.com>

        updated reviewers for my previous changelog.

2007-10-29  Kevin McCullough  <kmccullough@apple.com>
        Reviewed by Maciej and Adam and Geoff.

        - Minor mac-side improvements including moving a function to a more
        appropriate location, fixing a warning, and correctly checking
        exceptions.

        * Drosera/DebuggerDocument.cpp: Corrected the exception checking.
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::callFunctionOnObject):
        * Drosera/mac/DebuggerClient.mm: Fixes a warning.
        * Drosera/mac/DebuggerDocumentPlatform.mm: Moved
        webScriptAttributeKeysForScriptObject to DebuggerDocumentPlatform
        because it doesn't require the ServerConnection at all.
        (NSStringCreateWithJSStringRef): Made an argument const.
        (JSValueRefCreateWithNSString): Made an argument const.
        (+[WebScriptObject webScriptAttributeKeysForScriptObject:]):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        * Drosera/mac/ServerConnection.h: Moved aforementioned function.
        * Drosera/mac/ServerConnection.mm: Ditto.
        (-[ServerConnection webView:didLoadMainResourceForDataSource:]):

2007-10-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add a globalFlag property to the LayoutTestController to allow cross-domain indications.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (getGlobalFlagCallback):
        (setGlobalFlagCallback):
        (LayoutTestController::getJSClass):
        (LayoutTestController::staticValues):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::globalFlag):
        (LayoutTestController::setGlobalFlag):

2007-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Scripts/run-sunspider: Added --shark20 option, to run Shark at its highest sample
        resolution instead of its default.

2007-10-29  David Kilzer  <ddkilzer@webkit.org>

        Fixed showStatus() to print status for successfully resolved conflicts when using git.

        Reviewed by Mark Rowe.

        Previously showStatus() would run "git diff --name-status" after a ChangeLog conflict
        was successfully resolved, but this would not show any status because the change had
        already been cached in the index using "git add".  The solution is to add an optional
        second argument to showStatus() which adds the "--cached" switch to the command.

        * Scripts/resolve-ChangeLogs:
        (showStatus):

2007-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej and Geoff, in unison.

        * Scripts/run-webkit-tests: remove broken --svg option

2007-10-28  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * Scripts/run-sunspider: Default to "Release" configuration rather than
        defaulting to the last configuration used as other scripts do. This can
        still be overriden on the command line with "--debug" if there's some
        reason to do so. Also fix a typo.

        * Scripts/sunspider-compare-results: Fix a typo.

2007-10-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Implemented the WebScriptDebugListener functions now that the
        WebScriptDebugServer exists

        * Drosera/win/ServerConnection.cpp: Implemented WebScriptDebugListener
        functions.
        (ServerConnection::currentFrame):
        (ServerConnection::didLoadMainResourceForDataSource):
        (ServerConnection::didParseSource):
        (ServerConnection::failedToParseSource):
        (ServerConnection::didEnterCallFrame):
        (ServerConnection::willExecuteStatement):
        (ServerConnection::willLeaveCallFrame):
        (ServerConnection::exceptionWasRaised):
        * Drosera/win/ServerConnection.h: Removed unused arguments from the
        members arguments list.

2007-10-26  David Kilzer  <ddkilzer@webkit.org>

        prepare-ChangeLog and update-webkit create needless ChangeLog conflicts
        <http://bugs.webkit.org/show_bug.cgi?id=15600>

        Reviewed by Darin.

        The resolve-ChangeLog script merges conflicted ChangeLogs in svn or git by creating
        a patch of the local changes and applying it with a fuzz level of 3 to the new file.
        If the patch is successful, it runs 'svn resolved' or 'git add' on the new ChangeLog
        file.  Note that it may also be used as a stand-alone script.

        * Scripts/prepare-ChangeLog: Call resolve-ChangeLogs for conflicted ChangeLog files.
        * Scripts/resolve-ChangeLogs: Added.
        * Scripts/update-webkit: Call resolve-ChangeLogs for conflicted ChangeLog files.

2007-10-26  Mark Rowe  <mrowe@apple.com>

        Qt build fix.  r27084 added a destructor implementation for LayoutTestController
        to the Qt port on the assumption that it was an implementation of the cross-platform
        LayoutTestController class.  It is not, so it did not need to be changed.

        * DumpRenderTree/qt/jsobjects.cpp: Remove empty destructor.

2007-10-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Fix builds with code coverage enabled.

        * Scripts/build-webkit: Don't overwrite the existing value of OTHER_LDFLAGS.

2007-10-25  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        * Scripts/make-js-test-wrappers: Don't generate a wrapper for intersectsNode.js.
        * Scripts/prepare-ChangeLog: Add a special case for prefix of empty string.

2007-10-25  Stephanie  <slewis@apple.com>

        build Fix

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-10-25  Stephanie  <slewis@apple.com>

        Reviewed by Mark Rowe, Adam Roben.

        Weak link against WebCore so DumpRenderTree can be bundled with production roots.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: 

2007-10-25  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://5549689> 2 tests in fast/forms fail when run with other tests on Windows

        Moving destructor into platform-specific files
        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::~LayoutTestController):
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::~LayoutTestController):

        LayoutTestController wasn't being destroyed
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

        Added declspec
        * DumpRenderTree/win/EditingDelegate.h:

        Reset certain values on the webview (or related delegate) that might 
        have changed while running a test
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::~LayoutTestController):

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

        Make sunspider-compare-results work with relative paths

        Reviewed by Sam.

        * Scripts/sunspider-compare-results: Convert arguments to absolute
        paths before we chdir.

2007-10-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Implemented server calls now the WebScriptDebugServer exists.
        - Also removed no longer needed call to initialize CG.

        * Drosera/win/Drosera.cpp: No longer initializes CG because this happens
        automatically now.
        (_tWinMain):
        * Drosera/win/ServerConnection.cpp: Now uses the COM class.
        (ServerConnection::ServerConnection):
        (ServerConnection::~ServerConnection):
        (ServerConnection::pause):
        (ServerConnection::resume):
        (ServerConnection::stepInto):
        (ServerConnection::applicationTerminating):
        (ServerConnection::serverConnectionDidDie):
        * Drosera/win/ServerConnection.h: Now uses the COM class.

2007-10-24  George Staikos  <staikos@kde.org>

        Unbreak Qt build.

        * Scripts/build-webkit:

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

        Remove now-unnecessary call to InitializeCoreGraphics

        WebKit takes care of this now.

        Reviewed by Ada.

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

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

        Use WebTextRenderer in DRT

        Reviewed by Ada.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Use WebTextRenderer instead of using AddFontResourceEx.

2007-10-24  Sven Herzberg  <sven@imendio.com>

        Reviewed by Mark Rowe.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=15614
        Bug 15614: [GTK] qmake based backends don't build on OS X

        * Scripts/build-webkit: set QMAKESPEC correctly if building the QT or
        GTK backend on a Mac
        * Scripts/webkitdirs.pm: extracted the darwin-test from isOSX() into
        isDarwin() to make it reusable in other places (like the workaround-
        for-prebuilt-qmake in build-webkit)

2007-10-24  David Kilzer  <ddkilzer@webkit.org>

        Refurbish update-webkit script.

        Reviewed by Adam.

        * Scripts/update-webkit: Add -h|--help switch and usage statement.  Check result of
        GetOptions() call.  Fix -q|--quiet switch to be passed to svn command properly.  Use
        multi-argument version of system() for flexibility and security.  Check for existence
        of Internal directory using -d test instead of -x.

2007-10-24  David Kilzer  <ddkilzer@webkit.org>

        Minor clean-up of prepare-ChangeLog script.

        Reviewed by Adam.

        * Scripts/prepare-ChangeLog: Keep list of updated ChangeLog files in an array instead
        of a string.  Use multi-argument versions of open() and system() for flexibility and
        security.

2007-10-24  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Fix <rdar://5410959>  editing/selection/drag-to-contenteditable-iframe.html fails on Windows

        Move the call to replaySavedEvents from doDragDrop to doMouseMove because we don't want to 
        replay the saved events when we're still processing the mousedown that starts the drag
        * DumpRenderTree/win/EventSender.cpp:
        (doMouseMove):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::doDragDrop):

2007-10-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam, Steve and Darin.

        - Stubbed out the WebScriptDebugListener functionality in the Server
        Connection class to prepare it for receiving those callbacks.
        - Also I changed the instantiation of DebuggerClient, DebuggerDocument
        and the ServerConnection to not need to be initialized with a server
        name, since that is not the way we connect to the WebKit server. 

        * Drosera/DebuggerDocument.cpp: Fixed a bug where I was always logging
        no exception.  Now it only loggs when there is an exception
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::callFunctionOnObject):
        * Drosera/win/DebuggerClient.cpp: No longer needs the ServerConnection
        to be instantiated with a server's name.
        (DebuggerClient::DebuggerClient):
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/DebuggerClient.h: Removed unsued variable.
        * Drosera/win/Drosera.cpp: Client no longer needs to be initialized with
        a server name.
        (Drosera::init):
        (Drosera::initServer):
        * Drosera/win/Drosera.h: No longer need the ServerConnection to be
        instantiated with a server's name.
        * Drosera/win/ServerConnection.cpp: 
        (ServerConnection::ServerConnection): No longer needs a server name
        (ServerConnection::~ServerConnection): Only release the global context
        if there is one.
        (ServerConnection::serverConnectionDidDie): Stub for
        IWebScriptDebugListener
        (ServerConnection::QueryInterface): ditto
        (ServerConnection::AddRef): ditto
        (ServerConnection::Release): ditto
        (ServerConnection::didLoadMainResourceForDataSource): ditto
        (ServerConnection::didParseSource): ditto
        (ServerConnection::failedToParseSource): ditto
        (ServerConnection::didEnterCallFrame): ditto
        (ServerConnection::willExecuteStatement): ditto
        (ServerConnection::willLeaveCallFrame): ditto
        (ServerConnection::exceptionWasRaised): ditto
        * Drosera/win/ServerConnection.h: Stubbed out the
        IWebScriptDebugListener functions, and this class no longer needs to be
        instantiated with a server name.

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add a layoutTestController.dumpSelectionRect() dummy. It only has an effect on mac pixel tests anyway. Makes us pass another 5 test cases.

        * DumpRenderTree/qt/jsobjects.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add another command.

        * DumpRenderTree/qt/jsobjects.cpp:
        (TextInputController::doCommand):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add empty eventSender.clearKillRing(), and map some of the special keys used in eventSender.keyDown() to things that work on Qt/X11.

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement eventSender.keyDown().

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        some smaller fixes to the editing support in DRT. Makes another few tests pass.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/jsobjects.cpp:
        (TextInputController::doCommand):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        first bit of implementation for the textinputcontroller.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (TextInputController::TextInputController):
        (TextInputController::doCommand):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make the man webpage believe it has focus, so the editing tests work correctly.

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

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement layoutTestController.dumpEditingCallbacks() correctly.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpEditingCallbacks):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Implement support for testing editing.

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

2007-10-23  Sam Weinig  <sam@webkit.org>

        Check for null BSTR that can be passed to the UIDelegate methods
        from javascript null and undefined.  Fixes a failing test case on
        Windows (fast/dom/Window/alert-undefined.html)

        Reviewed by Eric Seidel.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::webViewAddMessageToConsole):

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        Don't print a massive pile of setenvs from tools that automatically build testkjs.

        * Scripts/build-testkjs:

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - add wrapper that finds the right copy of testkjs
        
        * Scripts/sunspider-compare-results: Added.

2007-10-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - After talking with Steve I now see that the WebKit server must be
        running for DCOM to create the distributed objects, which makes sense
        and currently WebKit only allows one instance to be running at a time
        which avoids accidentally connecting to the wrong server
        - In light of this I have removed the code for the attach box and
        NotificationServer and known server names, since they are all extranious
        now.

        * Drosera/win/Drosera.cpp: Removed notification classes and known server
        names.
        (_tWinMain): Uses init instead of initUI.
        (droseraWndProc): No longer creats an attach dialog box.
        (Drosera::Drosera): Does the OleInitialize so COM is ready to go and
        it's not manditory to call init before doing COM stuff.
        (Drosera::init): calls initUI and will call attach when the
        functionality exists. 
        (Drosera::initUI): Has changed very little.
        (Drosera::attach): Changed the signature to reflect that we no longer
        need the dictionary of known server names.
        * Drosera/win/Drosera.h: Removed notification classes and known server
        names.  Also renamed and moved some functions.
        * Drosera/win/Drosera.vcproj/Drosera.rc: Removed the Attach box.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Moved resource.h from the
        headers to the resources folder. 
        * Drosera/win/resource.h: Removed the Attach box.

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

        Windows build fix

        * Scripts/build-dumprendertree: Fix path to DumpRenderTree.sln.

2007-10-22  Kevin McCullough  <kmccullough@apple.com>

        - Removed a leak that was fixed.

        * Scripts/run-webkit-tests:

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - Changed the Client so that the DebuggerDocument now own the
        ServerConnection.  This simplifies ownership and cleanup. 

        * Drosera/win/DebuggerClient.cpp: The DebuggerDocument now owns the
        ServerConnection.
        (DebuggerClient::initWithServerName):
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/DebuggerClient.h: DebuggerDocument now owns the 
        ServerConnection.
        * Drosera/win/Drosera.cpp: Moved some WebFrame initialization logic to
        until after we have a server which we are attached to.
        (Drosera::initUI):
        (Drosera::attach):
        * Drosera/win/Drosera.h: Removed two needless pointers I forgot to take
        out previously.

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        When running build-testkjs make sure it's called through the perl interpreter, to fix the build for Qt/Windows.

        * Scripts/run-javascriptcore-tests:

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Wrap WEXITSTATUS with a little exitStatus() helper function that falls back to the use of $returnvalue >> 8 on Windows to determine the exit status on platforms without WEXITSTATUS.

        * Scripts/build-drosera:
        * Scripts/build-dumprendertree:
        * Scripts/build-testkjs:
        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-sunspider:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2007-10-22  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe.
        
        Fix for local database support after r26879
        Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set

        * Scripts/build-webkit:

2007-10-22  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        - Do not build testkjs as an application bundle. This is
        needed for run-javascriptcore-tests on OSX.
        - Also, based on r26633, allow to test the WebKit/Qt port on OSX.
        - Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set
        as we do not have -rpath on OSX.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * Scripts/run-webkit-tests:

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by aroben.

        Fix support for Signed-off-by detection in prepare-ChangeLog
        --git-commit. The Signed-off-by tag does not appear in the header
        but usually at the end.

        * Scripts/prepare-ChangeLog:

2007-10-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric.

        Fix run-javascriptcore-tests for Gtk.

        * Scripts/build-testkjs: testkjs is built by build-webkit for Gtk.

2007-10-20  Eric Seidel  <eric@webkit.org>

        Reviewed by aroben.

        * Scripts/find-extra-includes: fix path matching regex to not match ".patch"

2007-10-20  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.
        
        Add improved argument handling to run-sunspider, including
        --runs=<number>, --shell=<path>, --tests=<pattern>, --shark, and --help
        Also re-factor code into subroutines

        * Scripts/build-dumprendertree: removed bogus comments
        * Scripts/build-testkjs: Added.
        * Scripts/run-javascriptcore-tests: use build-testkjs
        * Scripts/run-sunspider: improved argument handling, abstraction
        * Scripts/run-webkit-tests: improved abstraction

2007-10-20  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, Windows build fix.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2007-10-20  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - http://bugs.webkit.org/show_bug.cgi?id=15544
          <rdar://problem/5076426> fast/events/arrow-navigation.html needs to
          not rely on Apple-specific key codes

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        Added named key "rightArrow". Later we could have a whole table of these.
        Also tweaked modifiers code a little.

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Ditto.

2007-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=15566
          possible fix for leak seen in DumpRenderTree

        * DumpRenderTree/WorkQueue.cpp: (WorkQueue::queue):
        Delete the item if it's not put on the queue, since the caller has
        no way of knowing that. Would be better to have the parameter type
        be auto_ptr to express the fact that we take ownership.

        - unrelated change

        * Drosera/mac/main.m: Add missing include.

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - This change should be identical but for some reason was not working
        on my machine.

        * Scripts/prepare-ChangeLog:

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver and Tim.

        - Made use of RetainPtr to avoid retain and release issues and moved the
        log function to DebuggerDocumentPlatform, which seems to be a more
        logical place for it to live.
        - Also moved knownServers from the ServerConnection to
        DebuggerApplication to match the Windows code and because it makes sense
        that a connection knows its own server but not all of them.

        * Drosera/mac/DebuggerClient.h: Moved the log function to
          DebuggerDocumentPlatform.
        * Drosera/mac/DebuggerClient.mm: Ditto. Also do not release the server
          Because it's owned by an own Ptr in DebuggerDocument.  Also moved the
          call for the server name up from the ServerConnection class.
        (-[DebuggerClient dealloc]):
        (-[DebuggerClient webView:didReceiveTitle:forFrame:]): Moved the call
          for the server name up from the ServerConnection.
        * Drosera/mac/DebuggerDocumentPlatform.mm: Made the server an OwnPtr.
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog): Log directly from here. No need to call
          DebuggerClient.
        * Drosera/mac/ServerConnection.h: Removed the knownServers function. The
          way I see it, a ServerConnection should only know about its connection
          and the group of all possible servers should be kept by the
          application.
        * Drosera/mac/ServerConnection.mm: Removed knownServer but added
          currentServerName, it makes sense that the connection should know that
          name.
        (-[ServerConnection currentServerName]):

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Integrated changes from mac drosera.  Recently I've encapsulated
        out the server connection object from the rest of Drosera because
        it is very platform dependent right now and RPC is not implemented on
        windows.  This functionality, of communicating with the WebKit server
        is the next area I will be focusing on in Windows.

        - Other changes and cleanup were made to organize the code and add notes
        on which parts still need work.  Also some mac code is added and
        commented out, to act as pseudocode for the logic of those parts.

        * Drosera/DebuggerDocument.h: Make the ServerConnection live in a smart
          pointer.
        * Drosera/config.h: Added whitespace.
        * Drosera/win/DebuggerApplication.cpp: Removed. The functionality of
          these files got moved into Drosera.h/cpp
        * Drosera/win/DebuggerApplication.h: Removed.
        * Drosera/win/DebuggerClient.cpp: Lots of cleanup and restructuring 
          happened here to better match the logic flow of the same code on the 
          mac side and to use the new ServerConnection class.
        (DebuggerClient::DebuggerClient): Constructor that takes a server name.
        (DebuggerClient::initWithServerName): Initializer that will set up the
          class to use a ServerConnection object.  This was necessary so I could
          create a DebuggerClient without having to initilaize it at
          construction.
        (DebuggerClient::QueryInterface): Moved from Drosera.cpp, the Client
          will be the UIDelegate and FrameLoadDelegate.
        (DebuggerClient::AddRef): For IUnknown.
        (DebuggerClient::Release): For IUnknown.
        (DebuggerClient::didFinishLoadForFrame): Part of the FrameLoadDelegate
          this still needs to set the global context of the server, but
          IWebFrame does not have an accessor for the global context yet. 
        (DebuggerClient::windowScriptObjectAvailable): Part of FrameLoadDelegate
          this is a pass through for the same function in the document.
        (DebuggerClient::didReceiveTitle): Unimplemented part of
          FrameLoadDelegate this would change the title of the window.
        (DebuggerClient::createWebViewWithRequest): Part of the
          FrameLoadDelegate.  This is about new windows via Window.open() and
          how their delegates are set.
        (DebuggerClient::runJavaScriptAlertPanelWithMessage): Part of the
          UIDelegate.  Just a debug function for printing messages.
        * Drosera/win/DebuggerClient.h: Moved functionality from Drosera.h
          because the Client should be the UIDelegate and FrameLoadDelegate
          to match the delegates on mac.
        (DebuggerClient::webViewLoaded): Added accessor method.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Added. I had apperently
          forgotten to add this file before.  This is where the platform
          dependent versions of the Documents functions live. Most of these are
          unimplemented because some piece of functionality does not exist on
          Windows yet.
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/win/Drosera.cpp: Removed UIDelegate and FrameLoadDelegate
          responsibilities becaue they belong in the Client. Also I laid the
          groundwork for attaching Drosera to a WebKit process
        (attachWndProc): Now if a server is selected the Client becomes it's
          delegate.
        (Drosera::Drosera): Added the construction of the Client and dictionary
          of server names. 
        (Drosera::initUI): This is no longer the delegates, the Client is.
        (Drosera::webViewLoaded): Now asks the Client instead of holding local
          state. 
        (Drosera::applicationDidFinishLaunching): Placeholder for needed
          notification registration when it's possible to implement.
        (Drosera::serverLoaded): Ditto
        (Drosera::serverUnloaded): Ditto
        (Drosera::attach): Attach Drosera to the WebKit server.
        * Drosera/win/Drosera.h: Ditto for Drosera.cpp comment.
        (Drosera::getInst): 
        (Drosera::setInst):
        (Drosera::knownServers):
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Removed DebuggerApplication
          and added the ServerConnection.
        * Drosera/win/DroseraPrefix.h: Added an ifndef check.
        * Drosera/win/ServerConnection.cpp: Added. This is the interesting part
          Most of the functions are completely unimlemented because they cannot
          connect with the WebKit server, because one does not exist on Windows
          yet.
        (ServerConnection::initWithServerName): 
        (ServerConnection::~ServerConnection):
        (ServerConnection::setGlobalContext):
        (ServerConnection::pause):
        (ServerConnection::resume):
        (ServerConnection::stepInto):
        (ServerConnection::switchToServerNamed):
        (ServerConnection::applicationTerminating):
        (ServerConnection::serverConnectionDidDie):
        (ServerConnection::currentFrame):
        * Drosera/win/ServerConnection.h: Added. Ditto.
        (ServerConnection::ServerConnection):

2007-10-19  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        Fix for these broken layout tests on Windows:
        
        fast/forms/focus-selection-input.html
        fast/forms/focus-selection-textarea.html
        fast/forms/select-accesskey.html
        
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        correct the VK code for alt key.
        
2007-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.
        
        Make the GtkLauncher code slightly more readable.

        * GtkLauncher/main.cpp:
        (setupMainMenu): Added.
        (setupMainWindowUI): Added.
        (main):

2007-10-19  Maciej Stachowiak  <mjs@apple.com>

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

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2007-10-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix <rdar://problem/5313523>
        REGRESSION(Leopard): http/tests/incremental/slow-utf8-text.pl fails on Leopard

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Changed to use _responseMIMEType.

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

        Make it possible to have Windows-specific tests and results

        When searching for tests to run and the Skipped file, we will only
        look in platform/win and the cross-platform directory. When looking
        for expected results, we will look in platform/win, then
        platform/mac-leopard, then platform/mac, then finally the
        cross-platform directory.

        Reviewed by Sam.

        * Scripts/run-webkit-tests:
        (sub expectedDirectoryForTest): Search in mac-leopard and mac before
        searching in the cross-platform directory.
        (sub buildPlatformHierarchy): Removed some unneeded calls to
        dirname/basename.

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

        Add back the call to register WebKit that we had before WebKitInitializer existed

        This is needed to ensure that the right WebKit is used when
        instantiating COM objects.

        Reviewed by Oliver.

        * DumpRenderTree/win/debug_internal.vsprops: Define
        DEBUG_WEBKIT_HAS_SUFFIX.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize):

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

        Import File::Basename in webkitdirs since we use it

        * Scripts/webkitdirs.pm:

2007-10-17  Kevin McCullough  <kmccullough@apple.com>

        - Updated the tiger leaks list to make the internal bots green.

        * Scripts/run-webkit-tests:

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

        Build fix for VC++ Express

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

2007-10-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Minor mac improvements based on observations I made while implementing the
        Windows code.

        * Drosera/mac/DebuggerApplication.mm: Attach does not need to create the server
        then hand it to the Client who will retain it, it should just be the client who
        creates and owns the server.
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerClient.h: Can now be created with just a server name.
        * Drosera/mac/DebuggerClient.mm: Creates the server.
        (-[DebuggerClient initWithServerName:]):
        * Drosera/mac/ServerConnection.mm: Does not need to include 2 header files, but
        can instead forward declare what it needs.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        * Scripts/run-webkit-tests: Added --add-platform-exceptions; useful when you
        want to turn failing tests into platform-specific test results. Also did a
        number of tweaks, including fixing a potential bug where expectedDirectoryForTest
        would take the type of results into account only some of the time.

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

        Add a new nightly launcher script for Windows

        This new script is for versions of Safari that don't delay-load
        WebKit. I had to make FindSafari be able to print out the nightly
        launcher script on stdout because Windows shell scripts can't capture
        the output from a command into an environment variable.

        Reviewed by Steve.

        * FindSafari/FindSafari.cpp:
        (_tmain): Added /printSafariLauncher option.
        * Scripts/run-webkit-nightly.cmd: Added.

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

        Replace WebKitInitializer with FindSafari

        We now rely on setting the PATH environment variable to tell Windows
        where to find WebKit and its dependencies (similar to
        DYLD_FRAMEWORK_PATH on Mac).

        This change also make DumpRenderTree no longer delay-load WebKit.

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.sln: Removed WebKitInitializer, added
        FindSafari.
        * DumpRenderTree/win/DumpRenderTree.cpp: Don't use WebKitInitializer.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Don't link against
        WebKitInitializer, don't delay-load WebKit.
        * Scripts/run-javascriptcore-tests: Call setPathForRunningWebKitApp.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/webkitdirs.pm:
        (sub setPathForRunningWebKitApp): Added.
        * WebKitInitializer/WebKitInitializer.cpp: Removed.
        * WebKitInitializer/WebKitInitializer.h: Removed.
        * WebKitInitializer/WebKitInitializer.vcproj: Removed.
        * WebKitInitializer/debug.vsprops: Removed.
        * WebKitInitializer/debug_internal.vsprops: Removed.
        * WebKitInitializer/release.vsprops: Removed.

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

        Fix Bug 15532: run-safari fails if Safari is installed in a non-default location

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

        FindSafari simply prints the location of an installed Safari.exe on
        stdout.

        Reviewed by Darin.

        * FindSafari/FindSafari.cpp: Copied from WebKitTools/WebKitInitializer/WebKitInitializer.cpp.
        (getStringValue):
        (getWebViewCLSID):
        (getInstalledWebKitDirectory):
        (_tmain):
        * FindSafari/FindSafari.vcproj: Added.
        * Scripts/webkitdirs.pm:
        (sub installedSafariPath): Added. Calls FindSafari on Windows.

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

        Updated for rename of WebKit_debug.dll to WebKit.dll for the Debug configuration

        Reviewed by Kevin McCullough.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Use WebKitDLLConfigSuffix
        when referring to WebKit.dll.
        * DumpRenderTree/win/debug.vsprops: Added WebKitDLLConfigSuffix.
        * DumpRenderTree/win/debug_internal.vsprops: Ditto.
        * DumpRenderTree/win/release.vsprops: Ditto.
        * Scripts/run-safari: Don't pass /debug to Safari anymore because we
        never have a _debug suffix on WebKit.dll.
        * WebKitInitializer/WebKitInitializer.cpp:
        (initializeWebKit): Only use the _debug suffix for WebKit.dll when
        specified.
        * WebKitInitializer/debug_internal.vsprops: Added
        DEBUG_WEBKIT_HAS_SUFFIX preprocessor definition.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback):
        Remove now-unneeded control/alt key hack; the tests have been updated.

2007-10-16  Kevin McCullough  <kmccullough@apple.com>

        - Updated leaks list because our internal bot upgraded it's version of leopard and 
        one of the leaks was fixed between that revision and the bot's previous version of
        leopard.

        * Scripts/run-webkit-tests:

2007-10-15  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - I encapsulated out the server connecton functionality because it is a specific part
        of Drosera that will be platform dependant until the WebScriptDebugServer can be moved
        into WebCore and C++.  But if it is encapsulated out it can be easily replaced on
        Windows.  So the majority of this patch is moving preexisting functionality.

        - Also I removed the prefix header and changed to use config.h because it is more
        standard on how we use config.h in windows and it didn't make much sense to keep
        the prefix header and the config.h

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::DebuggerDocument):
        * Drosera/DebuggerDocument.h:
        * Drosera/config.h:
        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerClient.h:
        * Drosera/mac/DebuggerClient.mm:
        (-[DebuggerClient initWithServerConnection:]):
        (-[DebuggerClient dealloc]):
        (-[DebuggerClient windowDidLoad]):
        (-[DebuggerClient windowWillClose:]):
        (-[DebuggerClient webView:didFinishLoadForFrame:]):
        (-[DebuggerClient webView:didReceiveTitle:forFrame:]):
        * Drosera/mac/DebuggerDocumentPlatform.mm:
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/mac/Drosera.pch: Removed.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * Drosera/mac/ServerConnection.h: Added.
        * Drosera/mac/ServerConnection.mm: Added.
        (-[ServerConnection initWithServerName:]):
        (-[ServerConnection dealloc]):
        (-[ServerConnection setGlobalContext:]):
        (-[ServerConnection pause]):
        (-[ServerConnection resume]):
        (-[ServerConnection stepInto]):
        (-[ServerConnection switchToServerNamed:]):
        (-[ServerConnection applicationTerminating:]):
        (-[ServerConnection serverConnectionDidDie:]):
        (-[ServerConnection webView:didLoadMainResourceForDataSource:]):
        (-[ServerConnection webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[ServerConnection webView:failedToParseSource:baseLineNumber:fromURL:withError:forWebFrame:]):
        (-[ServerConnection webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[ServerConnection webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[ServerConnection webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        (-[ServerConnection webView:exceptionWasRaised:sourceId:line:forWebFrame:]):
        (-[ServerConnection currentFrame]):
        (-[ServerConnection webScriptAttributeKeysForScriptObject:]):
        (-[ServerConnection knownServers]):

2007-10-15  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15002
          Script to automatically search nightly builds for regressions (bisect-builds)

        * Scripts/bisect-builds: Added.

2007-10-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - New JavaScript benchmark
        http://bugs.webkit.org/show_bug.cgi?id=15515

        * Scripts/run-sunspider: Added. Wrapper to run sunspider on the
        current development or release build of JavaScriptCore.

2007-10-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam.

        Fix 'run-webkit-tests --qt' complaining about the --qt argument.

        * Scripts/webkitdirs.pm:
        - Change checkArgv to remove the options from @ARGV to prevent
        them from interfering with further option processing.
        - Fix logic error in determineIsQt that would prevent it from bailing out early.
        - Change isOSX to mean OS X and not Qt or Gtk.  Most of our uses of isOSX assume that this is the meaning
        already, so this change fixes several broken areas of the scripts including 'run-webkit-tests --qt' on a Mac
        incorrectly using the Mac results, and 'run-webkit-tests --gtk' attempting to build the Mac DumpRenderTree.

2007-10-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - added logging of window.prompt and window.confirm

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        Implement the recommended delegate rather than the deprecated one.
        (-[UIDelegate webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:]):
        Added.
        (-[UIDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:]):
        Added.

        * DumpRenderTree/win/UIDelegate.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runJavaScriptAlertPanelWithMessage): Got rid of unnecessary check for null string.
        (UIDelegate::runJavaScriptConfirmPanelWithMessage): Added.
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt): Added.
        (UIDelegate::webViewAddMessageToConsole): Got rid of unnecessary check for null string.

2007-10-15  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Fixed <rdar://5382546> layoutTestController.setCustomPolicyDelegate is unimplemented causing tests to fail

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Like on mac, before running each test, set the webview's policy delegate to null
        (main): allocate the global policy delegate for DRT's custom use
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        Adding files to project
        * DumpRenderTree/win/DumpRenderTreeWin.h: declaring global DRT policy delegate
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        set the webview's policy delegate to DRT's custom one if the test requests it.
        * DumpRenderTree/win/PolicyDelegate.cpp: Added.
        Implementation is a direct port of DumpRenderTree/mac/PolicyDelegate.mm
        (PolicyDelegate::PolicyDelegate):
        (PolicyDelegate::QueryInterface):
        (PolicyDelegate::AddRef):
        (PolicyDelegate::Release):
        (PolicyDelegate::decidePolicyForNavigationAction):
        * DumpRenderTree/win/PolicyDelegate.h: Added.
        (PolicyDelegate::decidePolicyForNewWindowAction):
        (PolicyDelegate::decidePolicyForMIMEType):
        (PolicyDelegate::unableToImplementPolicyWithError):

2007-10-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        * Scripts/webkitdirs.pm: Use qmake binary specified via --qmake on command-line
        when querying for QMAKE_MKSPECS.

2007-10-14  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Adam Roben.
        
        Fix run-webkit-tests is too greedy calculating platform hierarchy
        http://bugs.webkit.org/show_bug.cgi?id=15465
        
        Fix run-webkit-tests being too greedy in trying to split the platform name up
        causing it to try and find tests in every directory above the first "-" in the
        path to the LayoutTests

        * Scripts/run-webkit-tests:

2007-10-14  Oleg Sukhodolsky <son.two@gmail.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15006
        Refactoring of buildQMakeGdkProject()/buildQMakeQtProject() and isGdk()/isQt()
        to reduce code duplication.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        buildQMakeProject() renamed to buildQMakeQtProject().
        buildQMakeGdkProject()/buildQMakeQtProject() now take just one parameter (directory),
        unused $colorize has been removed.

=== Start merge of feature-branch 2007-10-12 ===

2007-10-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        * Scripts/build-webkit: add --help, remove unused --color

2007-10-07  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        * Drosera/mac/DebuggerDocumentPlatform.mm:
        (DebuggerDocument::platformEvaluateScript): null check before trying to make a JSString

2007-10-03  Rob Buis  <buis@kde.org>

        Reviewed by Olliej.

        Adapt to changed location of Ahem font.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

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

        Reviewed by Adam Roben.
        
        Make pixel tests more useful!
        Finally fix the image diff 0.00% mystery problem
        Highlight any image differences in the image diff.
        Add a link from image diffs back to original test file.

        * DumpRenderTree/mac/ImageDiff.m:
        (compareImages): highlight any differences
        (computePercentageDifferent): round to two decimal places
        * Scripts/run-webkit-tests: add a few more toURL calls for the windows folks

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

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-webkit-tests: print the % image difference on main results page

2007-10-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Update WebKitLauncher to notify you of new builds from the correct branch, rather than always checking trunk.

        * BuildSlaveSupport/build-launcher-app: Generate a file named BRANCH into WebKit.app so that it knows which branch it was built from.
        * WebKitLauncher/start.html: Use the new URL format that includes the branch we were built from.

2007-10-01  Mark Rowe  <mrowe@apple.com>

        * BuildSlaveSupport/build-launcher-dmg: Tweak once more to handle nightly builds for branches.

2007-09-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.
        
        DerivedSources.make was finding "ENABLE_SVG" in the string
        "ENABLE_SVG_EXPERIMENTAL_FEATURES" thus --no-svg wasn't functioning
        quite correctly.

        * Scripts/build-webkit: make --no-svg imply --no-svg-experimental

2007-09-25  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Eric.

        * BuildSlaveSupport/build-launcher-dmg: Allow the platform tag to be specified on the command line.
        This makes it possible to automate nightly builds for the feature-branch.

2007-07-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Mark.

        Enable svg experimental features as default here in feature-branch.

        * Scripts/build-webkit:

2007-06-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Weinig.
        
        Add VIDEO flag for timed media features

        * Scripts/build-webkit
        
=== End merge of feature-branch 2007-10-12 ===

2007-10-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - 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

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

        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.

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

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

        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.

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

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