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

        Merge r35362.

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

        Reviewed by Sam

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

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

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

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

        Merge r37008.

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

        Reviewed by Sam Weinig.
        
        https://bugs.webkit.org/show_bug.cgi?id=21178
        <rdar://problem/6248651>
        
        Return the result value from getURL.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (getURL):

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