2009-06-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Add a script to automate the rolling over of ChangeLog files when they grow too large.

        * Scripts/roll-over-ChangeLogs: Added.

2009-06-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.
        
        <rdar://problem/6974857>
        
        Build with ENABLE_3D_RENDERING turned on by default on SnowLeopard.

        * Scripts/build-webkit:

2009-06-12  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Mark Rowe.
        Reviewed by Simon Hausmann.

        Refactor handling of options in the build-webkit script
        
        Options are now defined in one place, and then reused when creating
        the usage help text, the arguments to GetOptions(), and when passing
        the options on to the underlying port-dependent build systems.
        
        This allows the Qt port to read the defaults for the options from the
        pro file (dynamically), and to pass the options on to qmake at build.

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

2009-06-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Cameron Zwarich.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=26312>.
        Bug 26312: Multiple copies of Safari opened with WebKit nightly and Safari 3.2.3

        Skip the trampoline detection for versions of Safari < 4.0 as they don't play these
        tricks, and having WebKitNightlyEnabler assume that we were in the trampoline was
        preventing our LaunchServices trickery from being run.  This led to fresh copies of
        WebKit.app being launched when a URL or file was opened from an external application
        rather than the existing instance being reused.

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (insideSafari4OnTigerTrampoline):
        (enableWebKitNightlyBehaviour):

2009-06-13  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Mark "Snowy" Rowe.

        Update iExploder/htdocs/cssproperties.in by running update-iexploder-cssproperties.

        * iExploder/htdocs/cssproperties.in:

2009-06-13  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Eric Seidel.  Landed by Adam Barth.

        Removed dead file.
        https://bugs.webkit.org/show_bug.cgi?id=26308

        * DumpRenderTree/win/TestNetscapePlugin/main.c: Removed.

2009-06-12  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [Gtk] use strlen instead of g_utf8_strlen so we can enable more tests.

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

2009-06-12  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25599
        [GTK] Enable more tests

        Implement dumping of status callback.

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

2009-06-11  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Steve Falkenburg.

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

        Revert 42565 as it leads to DumpRenderTree crashing on startup because
        Windows can't find CFURLCacheCopySharedURLCache in CoreNetwork.dll.

        * DumpRenderTree/win/DumpRenderTree.cpp:

2009-06-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Jan Alonzo.

        [gtk] Change DumpRenderTree to use a GtkScrolledWindow instead of GtkFixed

        Change the code to use GtkScrolledWindow and resize the GtkScrolledWindow
        to pass more tests. Make sure the content is bigger than a thumbnail.

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

2009-06-10  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        Clear the frame name before we run each tests so we don't get
        "someFloaString" or "3" in the target frame name.

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

2009-06-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - add a LayoutTestController method for temporarily changing the WebKit
          cache model

        * DumpRenderTree/LayoutTestController.cpp:
        (setCacheModelCallback): Added. Calls
        LayoutTestController::setCacheModel() with the first argument as an
        integer.
        (LayoutTestController::staticFunctions): Added setCacheModel.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCacheModel):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Reset the cache model to
        WebCacheModelDocumentBrowser.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setCacheModel): Added. Calls -[WebPreferences
        setCacheModel:].
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCacheModel):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setCacheModel):

2009-06-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Have sunspider-compare-results use the system version of the jsc
        command line binary as there's no good reason to rebuild from source
        to simply compare results.

        * Scripts/sunspider-compare-results:

2009-06-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Removed setUseFixedLayout and renamed setFixedLayoutSize to
        setFixedContentsSize.

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

2009-06-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build, add missing function declaration.

        * DumpRenderTree/qt/jsobjects.h:

2009-06-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=24642>.
        Bug 24642: REGRESSION: Nightly builds sometimes erroneously display a message about failing to launch successfully

        Safari 4 on Tiger plays some shenanigans during launch that can confuse the nightly launcher application
        in to running its initialization code too soon.

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (insideSafariOnTigerTrampoline): Detect these shenanigans.
        (enableWebKitNightlyBehaviour): Delay initialization when needed.

2009-06-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Antti Koivisto

        Add dispatchPendingLoadRequests() to test fix for <rdar://problem/6727495>

        * DumpRenderTree/LayoutTestController.cpp:
        (dispatchPendingLoadRequestsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::dispatchPendingLoadRequests): Implement using [WebView _dispatchPendingLoadRequests] SPI

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::dispatchPendingLoadRequests): Need implementations.
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::dispatchPendingLoadRequests): Ditto.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::dispatchPendingLoadRequests): Ditto.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::dispatchPendingLoadRequests): Ditto.

2009-06-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Cameron Zwarich.

        Delete the AccessibilityController that we allocated in -init.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate dealloc]):

2009-06-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Factor out the code to check whether a library contains a given symbol in to a helper function.

        * Scripts/webkitdirs.pm:

2009-06-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Detect when XHTML MP and WCSS are disabled and skip their associated regression tests.

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

2009-06-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/6778101> Four SSL-related test failures

        With newer versions of CFNetwork we receive a NSURLErrorServerCertificateUntrusted error
        code rather than the more specific NSURLErrorServerCertificateHasUnknownRoot that DumpRenderTree
        was looking for.  Update DumpRenderTree to accommodate the different error code.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):

2009-06-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Fix Perl warning when calling chdir with an empty/undefined path
        
        This happened when the included makespec was in the same directory as
        the parent makespec, so the relative path between the two was empty.

        * Scripts/webkitdirs.pm:

2009-06-04  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        Fix crashes due to unbalanced start/stop observer calls.

        * DumpRenderTree/mac/DumpRenderTreeWindow.h: Added observingWebView.
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow startObservingWebView]): Call stopObservingWebView
        in case we're already observing some other WebView. Set observingWebView.
        (-[DumpRenderTreeWindow stopObservingWebView]): Do nothing if
        observingWebView is already NO. Clear observingWebView.

2009-06-03  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMainFrameIsFirstResponder):
        Remove explicit calls to _updateFocusedActiveState when the view is made first responder.
        Focused state already properly updates when views become first responders, so these calls
        are unnecessary.

        (LayoutTestController::setWindowIsKey):
        Explicitly call _updateActiveState when our window becomes key, since we're just faking it
        and the notification won't be sent.

2009-06-02  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Mark Rowe.
        
        Add "replace" behavior so that it shows the addition part of the
        replacement of the file first, and then shows the changes.
        
        Future: Add in showing the removal part of the replacement.

        * Scripts/svn-create-patch:

2009-06-02  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Update WinLauncher for WebKitCreateInstance.
        https://bugs.webkit.org/show_bug.cgi?id=26136

        * WinLauncher/WinLauncher.cpp: Revise implementation to
          use WebKitCreateInstance (rather than CoCreateInstance).
        * WinLauncher/WinLauncher.h: Modify include path for
          WebKit.h to match DumpRenderTree style.
        * WinLauncher/WinLauncher.vcproj: Remove unnecessary
          WebKit.tlb and EmbeddedIDL flags from build.

2009-06-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Adam Roben.

        [Qt] Fix Perl warning about uninitialized value (passedConfiguration())

        * Scripts/webkitdirs.pm:

2009-06-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        Use File::Spec->tmpdir instead of hardcoded paths for tempfile() dir
        
        This fixes the Windows-build if the user does not have a /tmp directory.

        * Scripts/bisect-builds:

2009-06-01  Yongjun Zhang  <yongjun.zhang@nokia.com>>

        Reviewed by Holger Freyther.  Landed by Adam Barth.

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

        [Qt] EventSender.keyDown doesn't support Arrow Up and Down keys.
        Add Down and Up key support.
        
        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):

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

        Reviewed by Sam Weinig.

        svn-create-patch displays confusing "Broken pipe" errors from Subversion
        when files have been renamed in local working copy.  This was happening
        because we invoke 'svn info' to determine the URL that the file was copied
        from, but we were closing the pipe to the subprocess before SVN had finished
        writing its output.

        * Scripts/prepare-ChangeLog: Consume all 'svn info' output before closing the file handle.
        * Scripts/svn-create-patch: Ditto.

2009-05-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        - implement LayoutTestController::clearAllDatabases() on
          Windows.

        Needed for storage/transaction-error-callback.html.

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

2009-05-28  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Added new build flag --filters. More details in WebCore/ChangeLog.

        * Scripts/build-webkit:

2009-05-28  Olivier DOLE  <odole@pleyo.com>

        Reviewed by Maciej.

        Add options to sunspider-compare-results to know which test suite to
        compare (see bug #15941).

        * Scripts/sunspider-compare-results:

2009-05-27  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Update build-webkit to handle a new version of WebKitSystemInterface.

        * Scripts/build-webkit:

2009-05-27  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Maciej Stachowiak.

        When building with MinGW, don't use the __declspec(dl{import,export})
        decorations and rely on the linker to use its nifty auto-import feature.
        It is extremely hard to get the decorations right with MinGW in general
        and impossible in WebKit, where the resulting shared library is linking
        together some static libraries.

        * DumpRenderTree/config.h:

2009-05-23  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Land the updated version of WebKitLauncher that the nightly builds have been using.

        Changes include:
        1) Support for self-updating via Sparkle.
        2) Now respects the "Open using Rosetta" preference.
        3) Passes environment variables through to the spawned Safari process.
        4) Logs a list of extensions that are detected to the system console.
        5) Disables extensions that are known to cause crashes too early in the
           launch process to be detected by the extension-detection code.

        * WebKitLauncher/Configurations/Base.xcconfig: Added.
        * WebKitLauncher/Configurations/WebKitLauncher.xcconfig: Added.
        * WebKitLauncher/Configurations/WebKitNightlyEnabler.xcconfig: Added.
        * WebKitLauncher/Info.plist:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitNightlyEnabler.h: Added.
        * WebKitLauncher/WebKitNightlyEnabler.m:
        (myBundleDidLoad):
        (myApplicationWillFinishLaunching):
        (poseAsWebKitApp):
        (webKitLauncherBundle):
        (enableWebKitNightlyBehaviour):
        * WebKitLauncher/WebKitNightlyEnablerSparkle.h: Added.
        * WebKitLauncher/WebKitNightlyEnablerSparkle.m: Added.
        (initializeSparkle):
        (updatePermissionPromptDescription):
        (skipSignatureVerificationInDownloadDidFinish):
        (updateAlertPanel):
        (updateAlertInitForAlertPanel):
        (-[NSAlert webKitHandleButtonPress:]):
        (setMethodImplementation):
        * WebKitLauncher/main.m:
        (displayErrorAndQuit):
        (getLastVersionShown):
        (saveLastVersionShown):
        (getPathForStartPage):
        (getCurrentVersion):
        (getShowStartPageVersion):
        (startPageDisabled):
        (addStartPageToArgumentsIfNeeded):
        (preferredArchitecture):
        (myExecve):
        (locateSafariBundle):
        (currentMacOSXVersion):
        (checkFrameworkPath):
        (main):

2009-05-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha and Xan Lopez.

        [Gtk] Enable database and localStorage support
        https://bugs.webkit.org/show_bug.cgi?id=25629

        Enable database and localStorage for running the storage/ tests.

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

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

        Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr

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

        Reviewed by Oliver Hunt.

        * DumpRenderTree/ForwardingHeaders/wtf/OwnPtrCommon.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/PassOwnPtr.h: Added.

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

        resolve-ChangeLogs: Add missing newline to status message

        * Scripts/resolve-ChangeLogs: Added newline to status message
        that is printed when the -c|--continue switch is used but there
        are unmerged files remaining in the git working directory.

2009-05-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Add an error message to a die statement in run-webkit-tests
        I hit this die when two users tried to run-webkit-tests at the same time. :(

        * Scripts/run-webkit-tests:

2009-05-22  Andre Pedralho  <andre.pedralho@openbossa.org>

        Reviewed by Simon Hausmann.

        Fixed --makeargs usage in Qt build.

        * Scripts/build-webkit:

2009-05-22  Zoltan Horvath  <horvath.zoltan.6@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Correcting error message on missing WEBKIT_TESTFONTS
        environment varible in Qt-port.

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

2009-05-21  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by Antti Koivisto.

        Make it possible to write js-only http tests by exposing a /js-test-resources alias.
        https://bugs.webkit.org/show_bug.cgi?id=25915

        Second attempt at landing, now using -c instead of -C to make sure
        that mod_alias is loaded on Apache 1.x instances before using Alias.

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2009-05-21  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Default to running HTTP tests for GTK+.

        * Scripts/run-webkit-tests:

2009-05-21  Darin Adler  <darin@apple.com>

        Rolled the httpd changes out, since many machines (including the bots)
        have an older version of Apache that does not support the Alias command.
        Or maybe it's something else, but the bots are failing.

        * Scripts/run-webkit-httpd: Rolled back.
        * Scripts/run-webkit-tests: Ditto.

2009-05-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Geoffrey Garen.

        Make it possible to write js-only http tests by exposing a /js-test-resources alias.
        https://bugs.webkit.org/show_bug.cgi?id=25915

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2009-05-21  Andre Pedralho  <andre.pedralho@openbossa.org>

        Reviewed by Gustavo Noronha.

        Added --makeargs flag to the build script.

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

2009-05-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Anders Carlsson.

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

        Add testHasProperty and testHasMethod to the existing functions
        of the PluginObject to be able to test the browser hasproperty
        and hasmethod implementation. Invoke them from pluginInvoke.

        Change the defines to an enum to avoid manually updating
        NUM_METHOD_IDENTIFIERS and assigning numbers.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testHasProperty): test hasproperty
        (testHasMethod): test hasmethod
        (pluginInvoke): invoke the two

2009-05-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by George Staikos.

        BUG 25843: [Qt] Remove qt-port build flag
        <https://bugs.webkit.org/show_bug.cgi?id=25843>

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * Scripts/webkitdirs.pm:

2009-05-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Remove layoutTestController.addFileToPasteboardOnDrag and add eventSender.beginDragWithFiles
        https://bugs.webkit.org/show_bug.cgi?id=25852

        This allows us to now test multi-file file drags in DumpRenderTree per:
        https://bugs.webkit.org/show_bug.cgi?id=25862

        I removed the existing tests using addFileToPasteboardOnDrag()
        and replaced them with a new test (editing/pasteboard/file-input-files-access)
        which covers several more drag-drop cases.

        I added a DumpRenderTreeFileDraggingSource class to avoid
        the hack of if (!draggingSource) in [DumpRenderTreeDraggingInfo draggingSourceOperationMask]

        New Test: editing/pasteboard/file-input-files-access.html

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeFileDraggingSource.h: Added.
        * DumpRenderTree/DumpRenderTreeFileDraggingSource.m: Added.
        (-[DumpRenderTreeFileDraggingSource draggingSourceOperationMaskForLocal:]):
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::staticValues): removed addFileToPasteboardOnDrag support
        (LayoutTestController::staticFunctions): removed addFileToPasteboardOnDrag support
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest): ASSERT that draggingInfo has been cleared
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Sorted selectors.
        (+[EventSendingController webScriptNameForSelector:]): Sorted selectors.
        (-[EventSendingController beginDragWithFiles:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController keyDown:withModifiers:]):
        (-[EventSendingController fireKeyboardEventsToElement:]): removed spurious { }
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]): removed addFileToPasteboardOnDrag support

2009-05-19  Kevin Ollivier  <kevino@theolliviers.com>

        wxMSW build fixes for DRT.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (runTest):
        * DumpRenderTree/wx/WorkQueueItemWx.cpp:
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):

2009-05-18  Julien Chaffraix  <jchaffraix@webkit.org>

        Bug 24569: Add some cookies tests

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

        Patch by David Kilzer.

        * Scripts/make-js-test-wrappers: Added regex to skip
        cookies-test-(post|pre).js files.

2009-05-18  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Use python-config to get Python linking info on Unix OSes. 

        * wx/build-wxwebkit:

2009-05-18  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, initialize variable that doesn't get set on Windows.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (MyApp::OnInit):

2009-05-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Various autotools build refactoring and fixes
        https://bugs.webkit.org/show_bug.cgi?id=25286

        Add -no-install and -no-fast-install to programs and tests that we
        don't install. Also remove -O2 since this is already handled at
        configure time.

        * GNUmakefile.am:

2009-05-18  Julie Parent  <jparent@google.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=25846
        Make eventSender dispatch a drag over event.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):

2009-05-18  Julie Parent  <jparent@google.com>

        Reviewed by Eric Seidel.

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

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

2009-05-18  Julie Parent  <jparent@google.com>

        Reviewed by Eric Seidel.

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

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

2009-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Jan Michael Alonzo.

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

        Merge r41819 into Gtk. Do not use printf but send messages
        through the log command.

        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (log):
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_destroy_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2009-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Jan Michael Alonzo.

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

        Forward port r39877 from main.c of OSX to TestNetscapePlugin
        of Gtk.

        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):

2009-05-15  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Don't parse args using getopt since it isn't available on Windows.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (MyApp::OnInit):

2009-05-15  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [GTK] Implement layoutTestController.waitForPolicyDelegate
        https://bugs.webkit.org/show_bug.cgi?id=25036

        Connect to 'navigation-policy-decision-requested' and handle
        waitForPolicy in the callback.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (webViewNavigationPolicyDecisionRequested):
        (main):
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::notifyDone):
        (LayoutTestController::waitForPolicyDelegate):

2009-05-14  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

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

        Make paths where data is saved be scoped to the ~ directory,
        so that one can run independent instances by setting CFFIXED_USER_HOME.

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

2009-05-13  David Kilzer  <ddkilzer@apple.com>

        Fix resolve-ChangeLogs when used with Subversion

        Reviewed by Darin Adler.

        Fixes the following issue when run on a Subversion repository:

            $ ./WebKitTools/Scripts/resolve-ChangeLogs
            ERROR: --continue may only be used with a git repository

        * Scripts/resolve-ChangeLogs: Check for the boolean value of
        $gitRebaseContinue, not whether it's defined, when validating
        command-line switches.

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

        Bug 21418: resolve-ChangeLogs should have a --continue option which does git rebase --continue

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

        Reviewed by Darin Adler.

        * Scripts/resolve-ChangeLogs: Added -c|--continue switch that
        runs "git rebase --continue" before exiting the script.
        (hasGitUnmergedFiles): Added.  Returns true if there are
        unmerged files in the git repository.

2009-05-11  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] Make sure that public APIs are properly exported on all Qt platforms
        https://bugs.webkit.org/show_bug.cgi?id=25601

        * Scripts/webkitdirs.pm: Remove QT_SHARED define from Qt builds, define QT_MAKEDLL in WebCore.pro instead

2009-05-07  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes for Python extension and DRT.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (MyApp::OnInit):
        * wx/build-wxwebkit:

2009-05-07  Steve Falkenburg  <sfalken@apple.com>

        Remove manifest fixup from r42729 to fix clean builds.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2009-05-06  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, fixes for wx trunk builds.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (MyApp::OnInit):
        * wx/build-wxwebkit:

2009-05-06  Steve Falkenburg  <sfalken@apple.com>

        Explicitly set WebKitPaintNativeControls to false to allow Windows results to match Mac.

        Reviewed by Adam Roben.

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

2009-05-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Build QtWebKit as a framework on Mac

        This implies both debug and release build by default, unless
        one of the --debug or --release config options are passed to
        the build-webkit script.

        Frameworks can be disabled by passing CONFIG+=webkit_no_framework
        to the build-webkit script.

        To be able to build both debug and release targets in parallel
        we have to use separate output directories for the generated
        sources, which is not optimal, but required to avoid race conditions.

        An optimization would be to only require this spit-up on Mac.

        * Scripts/webkitdirs.pm:

2009-05-05  Darin Adler  <darin@apple.com>

        Try to fix Mac build.

        * DumpRenderTree/AccessibilityUIElement.cpp: (elementAtPointCallback): Initialize x and y.

2009-05-05  Maclolm MacLeod  <mmacleod@webmail.co.za>

        Reviewed by Kevin Ollivier.

        Have wxWebkit make use of gcc(4 and greater) hidden visibility feature
        
        https://bugs.webkit.org/show_bug.cgi?id=24345

        * wx/build-wxwebkit:

2009-05-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 25574: AXImageMap children links don't respond properly to accessibilityHitTest:
        https://bugs.webkit.org/show_bug.cgi?id=25574

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (elementAtPointCallback):
        (getXCallback):
        (getYCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (descriptionOfValue):
        (AccessibilityUIElement::elementAtPoint):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::x):
        (AccessibilityUIElement::y):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        (AccessibilityUIElement::insertionPointLineNumber):
        (AccessibilityUIElement::supportsPressAction):
        (AccessibilityUIElement::lineForIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::elementAtPoint):
        (AccessibilityUIElement::x):
        (AccessibilityUIElement::y):

2009-05-06  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha.

        http://bugs.webkit.org/show_bug.cgi?id=17066
        [GTK] Improve frameloader signals

        Update GtkLauncher to use the new load-status and progress properties
        instead of the previous loading signals.

        * GtkLauncher/main.c:
        (update_title):
        (notify_load_status_cb):
        (notify_progress_cb):
        (create_browser):
        (create_window):

2009-05-05  Adam Roben  <aroben@apple.com>

        Don't use pdevenv when building with VC++ Express

        Fixes Bug 25308: REGRESSION (r42182): Build fails after following
        build instructions on webkit.org fail when using VC++ Express
        <https://bugs.webkit.org/show_bug.cgi?id=25308>

        Reviewed by Eric Seidel.

        * Scripts/webkitdirs.pm:
        (setupCygwinEnv): When Visual Studio is installed, set $vcBuildPath to
        point to pdevenv. When VC++ Express is installed, set $vcBuildPath to
        point to VC++ Express, as before.
        (buildVisualStudioProject): Use $vcBuildPath to build instead of
        hard-coding pdevenv.

2009-05-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        Mention --qt as an option in the build-webkit help

        * Scripts/build-webkit:

2009-05-04  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey Proskuryakov.

        Enable spell-checking in DumpRenderTree.

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

2009-05-04  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.
        
        Initial DRT implementation for wx.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/wx: Added.
        * DumpRenderTree/wx/DumpRenderTree.bkl: Added.
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp: Added.
        (LayoutWebViewEventHandler::LayoutWebViewEventHandler):
        (LayoutWebViewEventHandler::bindEvents):
        (LayoutWebViewEventHandler::OnLoadEvent):
        (LayoutWebViewEventHandler::OnAlertEvent):
        (LayoutWebViewEventHandler::OnConfirmEvent):
        (LayoutWebViewEventHandler::OnPromptEvent):
        (LayoutWebViewEventHandler::OnConsoleMessageEvent):
        (LayoutWebViewEventHandler::OnReceivedTitleEvent):
        (LayoutWebViewEventHandler::OnWindowObjectClearedEvent):
        (notifyDoneFired):
        (dumpFramesAsText):
        (dump):
        (runTest):
        (MyApp::OnInit):
        * DumpRenderTree/wx/DumpRenderTreeWx.h: Added.
        * DumpRenderTree/wx/GCControllerWx.cpp: Added.
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: Added.
        (LayoutTestController::~LayoutTestController):
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::copyDecodedHostName):
        (LayoutTestController::copyEncodedHostName):
        (LayoutTestController::display):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::notifyDone):
        (LayoutTestController::pathToLocalResource):
        (LayoutTestController::queueLoad):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setWindowIsKey):
        (LayoutTestController::setSmartInsertDeleteEnabled):
        (LayoutTestController::setJavaScriptProfilingEnabled):
        (LayoutTestController::setWaitToDump):
        (LayoutTestController::windowCount):
        (LayoutTestController::setPrivateBrowsingEnabled):
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        (LayoutTestController::setPopupBlockingEnabled):
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):
        (LayoutTestController::execCommand):
        (LayoutTestController::setPersistentUserStyleSheetLocation):
        (LayoutTestController::clearPersistentUserStyleSheet):
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::setDatabaseQuota):
        (LayoutTestController::numberOfActiveAnimations):
        (LayoutTestController::setSelectTrailingWhitespaceEnabled):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::setIconDatabaseEnabled):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::isCommandEnabled):
        (LayoutTestController::webHistoryItemCount):
        (LayoutTestController::waitForPolicyDelegate):
        * DumpRenderTree/wx/WorkQueueItemWx.cpp: Added.
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):
        * Scripts/build-dumprendertree:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:
        * wx/build-wxwebkit:

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

        Reviewed by Geoffrey Garen.

        Don't pass an exception parameter if we don't care about the value.

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

2009-05-02  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Another cut at getting tests passing on Windows again.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didStartProvisionalLoadForFrame): Tweak formatting.
        (FrameLoadDelegate::didFailProvisionalLoadWithError): Ditto.
        (FrameLoadDelegate::didCommitLoadForFrame): Ditto.
        (FrameLoadDelegate::didFinishLoadForFrame): Ditto.
        (FrameLoadDelegate::didFailLoadWithError): Added missing logging.

2009-05-02  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Try to get tests passing on Windows again.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldLogFrameLoadDelegates): Allow either "/" or "\" as a path
        separator. Also require separator before as well as after path name.

2009-04-30  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, define ENABLE_JAVASCRIPT_DEBUGGER.

        * wx/build-wxwebkit:

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=25470
        Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler.

        * Scripts/build-webkit: Added ENABLE_JAVASCRIPT_DEBUGGER define.

2009-04-29  Mark Rowe  <mrowe@apple.com>

        Update build.webkit.org configuration for the addition of the new GTK buildbot.

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

2009-04-29  Mark Rowe  <mrowe@apple.com>

        Ignore the --use-remote-links-to-tests option for GTK as it leads to
        perl errors being spewed at the end of run-webkit-tests.

        * Scripts/run-webkit-tests:

2009-04-29  Mark Rowe  <mrowe@apple.com>

        Implement test-result-archive for GTK.

        * BuildSlaveSupport/test-result-archive:

2009-04-28  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by David Kilzer.

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

        Make sure "--pixel --add-platform-exceptions" produces platform
        specific pixel test results.

        * Scripts/run-webkit-tests: Support "--pixel
        --add-platform-exceptions"

2009-04-28  Steve Falkenburg  <sfalken@apple.com>

        Fix link warnings building TestNetscapePlugin on Windows due to mismatched
        DLL name vs. LIBRARY directive name.
        
        Reviewed by Jon Honeycutt.

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.def:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin_debug.def: Added.

2009-04-28  Steve Falkenburg  <sfalken@apple.com>

        Fix warnings about PRODUCTION and ARCHIVE_BUILD on Windows builds
        of ImageDiff and DumpRenderTree.
        
        Rubber stamped by Adam Roben.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:

2009-04-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Add ability to get the children count of an AX element.

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

2009-04-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [GTK] Make layout tests / jsc tests usable without build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=21784

        This requires WEBKITOUTPUTDIR to be set to the build directory.
        Set the location of the product dir to the location pointed to by
        WEBKITOUTPUTDIR.

        * Scripts/webkitdirs.pm:

2009-04-27  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Adam Roben.

        Use libsoup's facilities to resolve relative URLs, instead, since
        it is a more robust method.

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

2009-04-26  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        Resolve relative URLs when queueing loads. This fixes
        post-goback-same-url.html timing out.

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

2009-04-24  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Switching JSCore from a static lib to a dynamic lib
        to match the Apple build and fix symbol exports.

        * wx/build-wxwebkit:

2009-04-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Add PrettyPatch support to run-webkit-tests

        * Scripts/run-webkit-tests:

2009-04-24  Steve Falkenburg  <sfalken@apple.com>

        Fix nightly for Windows x64 users.
        Installed browser location is written to a slightly different registry key in that case.
        
        * FindSafari/FindSafari.cpp:
        (getInstalledWebKitDirectory):

2009-04-23  Mark Rowe  <mrowe@apple.com>

        Fix the Windows DRT build.

        * DumpRenderTree/win/PolicyDelegate.h:

2009-04-23  Brady Eidson  <beidson@apple.com>

        Fix Windows DRT build.

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

2009-04-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak

        Add additional support for test:
        <rdar://problem/5689748> - Cannot redirect to protocols handled by external applications.

        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:unableToImplementPolicyWithError:frame:]): Dump formatted information when
          a policy cannot be implemented.

        * DumpRenderTree/win/PolicyDelegate.cpp:
        (PolicyDelegate::unableToImplementPolicyWithError): Ditto.
        * DumpRenderTree/win/PolicyDelegate.h:

2009-04-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Darin Adler.

        Fix for <rdar://problem/6816957>
        Turn off Geolocation by default

        * Scripts/build-webkit:

2009-04-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt.

        - dump the node in the element dictionary in the action information
          passed to the policy delegate

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

2009-04-21  Adam Roben  <aroben@apple.com>

        Windows build fix after r42726

        * DumpRenderTree/win/DumpRenderTree.cpp: Touched to force a rebuild.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Delete any pre-r42726
        manifest files during the pre-build event.

2009-04-21  Steve Falkenburg  <sfalken@apple.com>

        Use new WebKitCreateInstance API instead of CoCreateInstance
        or COMPtr's createInstance to instantiate WebKit COM objects.

        Reviewed by Adam Roben.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize):
        (runTest):
        (createWebViewAndOffscreenWindow):
        (main):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/GCControllerWin.cpp:
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::webHistoryItemCount):
        (LayoutTestController::setIconDatabaseEnabled):
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        (LoadItem::invoke):

2009-04-20  Timothy Hatcher  <timothy@apple.com>

        Stop using the fullDocumentTeardownEnabled WebPreference methods.
        Just set the WebKitEnableFullDocumentTeardownPreferenceKey default.

        Reviewed by Darin Adler.

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

2009-04-21  Geoffrey Garen  <ggaren@apple.com>

        Rubber-stamped by Adam Roben.
        
        Disabled one more Mozilla JS test because it fails intermittently on Windows.
        (See https://bugs.webkit.org/show_bug.cgi?id=25160.)

        * Scripts/run-javascriptcore-tests:

2009-04-21  Adam Roben  <aroben@apple.com>

        Fix running run-safari and run-webkit-tests from the paths recommended
        on webkit.org

        Reviewed by Steve Falkenburg and Sam Weinig.

        * Scripts/run-webkit-nightly.cmd: Moved quotes from variable
        definitions to variable uses. Otherwise cmd.exe can get confused about
        the quoting.
        * Scripts/run-webkit-tests: Changed to use an absolute path to
        execAppWithEnv so that run-webkit-tests will work when run from
        outside the source tree.

2009-04-21  Adam Roben  <aroben@apple.com>

        Rename JavaScriptCore_debug.dll to JavaScriptCore.dll in the Debug
        configuration

        This matches the naming scheme for WebKit.dll, and will be necessary
        once Safari links against JavaScriptCore.dll. This change also causes
        run-safari not to fail (because the launcher printed by FindSafari was
        always looking for JavaScriptCore.dll, never
        JavaScriptCore_debug.dll).

        Part of Bug 25305: can't run safari or drt on windows
        <https://bugs.webkit.org/show_bug.cgi?id=25305>

        Reviewed by Steve Falkenburg and Sam Weinig.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Use
        $(WebKitDLLConfigSuffix) for naming JavaScriptCore.{dll,lib}.

2009-04-21  Steve Falkenburg  <sfalken@apple.com>

        Update FindSafari for JavaScriptCore DLL changes.
        Also removed code previously needed to support running nightlies against Safari 3 on Windows.
        
        Reviewed by Mark Rowe.

        * FindSafari/FindSafari.cpp:
        (getStringValue):
        (getInstalledWebKitDirectory):
        (_tmain):

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

        Reviewed by Sam Weinig.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added PlainTextController.h
        and PlainTextController.mm.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]): Added PlainTextController
        as "window.plainText".

        * DumpRenderTree/mac/PlainTextController.h: Added.
        * DumpRenderTree/mac/PlainTextController.mm: Added.

2009-04-20  Steve Falkenburg  <sfalken@apple.com>

        Separate JavaScriptCore.dll from WebKit.dll.
        Slight performance improvement or no change on benchmarks.
        
        Allows us to break a circular dependency between CFNetwork and WebKit on Windows,
        and simplifies standalone JavaScriptCore builds.

        Reviewed by Oliver Hunt.

        * DumpRenderTree/config.h: Specify JS, WebKit exported data as __declspec(dllimport)
        * DumpRenderTree/win/DumpRenderTree.vcproj: Link against JavaScriptCore.dll

2009-04-20  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Tim Hatcher.

        Add licenses for xcconfig files.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig:
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig:

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

        Make FEATURE_DEFINES completely dynamic

        Reviewed by Darin Adler.

        Make FEATURE_DEFINES depend on individual ENABLE_FEATURE_NAME
        variables for each feature, making it possible to remove all
        knowledge of FEATURE_DEFINES from build-webkit.

        * Scripts/build-webkit: Define individual ENABLE_FEATURE_NAME
        variables instead of the whole FEATURE_DEFINES string when
        building with Xcode.  Miscellaneous clean up:
        - Reordered/sorted command-line switch variables.
        - Reordered/sorted command-line switches in $usage.
        - Reordered/sorted command-line switches in GetOptions().
        - Defined $svgSupport to true if any --svg-feature switch is
          set in order to match "Implies SVG Support" claim.
        - Build JavaScriptGlue after JavaScriptCore again!
        - Fixed --[no-]geolocation for GTK+ port and sorted GTK+
          command-line switches.
        - Added "exit 0" statement at the end of the script.

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

        Simplify FEATURE_DEFINES definition

        Reviewed by Darin Adler.

        This moves FEATURE_DEFINES and its related ENABLE_FEATURE_NAME
        variables to their own FeatureDefines.xcconfig file.  It also
        extracts a new ENABLE_GEOLOCATION variable so that
        FEATURE_DEFINES only needs to be defined once.

        * Scripts/build-webkit: Realphabetized code related to enabling
        Geolation features for WebKit.  Also set ENABLE_GEOLOCATION
        variable for xcodebuild.

2009-04-16  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25223
        REGRESSION: Back button after form submission to the same URL fails to navigate.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate processWork:]): Need to defer processing the work
        queue if a navigation started between locationChangeDone and our
        delayed processWork call.  This can happen when using queueLoadingScript
        to load script that simulates a click on a link or submit button since
        those clicks happen asynchronously.
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::processWork): Same as above.

2009-04-16  Geoffrey Garen  <ggaren@apple.com>

        Build fix: updated check-for-global-initializers to account for code motion.

        * Scripts/check-for-global-initializers:

2009-04-16  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Adam Roben.

        Compare test's response mime type and dump test as text properly.

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


2009-04-16  Adam Roben  <aroben@apple.com>

        Skip yet another JavaScriptCore test that sometimes fails on Windows

        See Bug 25160: Various ecma/Date tests sometimes fail on Windows (but
        not Mac)
        <https://bugs.webkit.org/show_bug.cgi?id=25160>

        * Scripts/run-javascriptcore-tests: Skip ecma/Date/15.9.2.2-6.js.

2009-04-15  Steve Falkenburg  <sfalken@apple.com>

        Redo last build fix in a more straightforward way.

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

2009-04-15  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build of DumpRenderTree.

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

2009-04-15  Adam Roben  <aroben@apple.com>

        Skip yet another JavaScriptCore test that sometimes fails on Windows

        See Bug 25160: Various ecma/Date tests sometimes fail on Windows (but
        not Mac)
        <https://bugs.webkit.org/show_bug.cgi?id=25160>

        * Scripts/run-javascriptcore-tests: Skip ecma/Date/15.9.2.2-2.js (who
        didn't see it coming?).

2009-04-14  Adam Roben  <aroben@apple.com>

        Skip another JavaScriptCore test that sometimes fails on Windows

        See Bug 25160: Various ecma/Date tests sometimes fail on Windows (but
        not Mac)
        <https://bugs.webkit.org/show_bug.cgi?id=25160>

        Rubber-stamped by Geoff Garen.

        * Scripts/run-javascriptcore-tests: Skip ecma/Date/15.9.2.2-3.js.

2009-04-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Move the DerivedSources.make calls into build-wxwebkit so that
        the FEATURE_DEFINES are parsed properly.

        * wx/build-wxwebkit:

2009-04-14  Adam Roben  <aroben@apple.com>

        Small run-javascriptcore-tests cleanup

        Reviewed by Cameron Zwarich.

        * Scripts/run-javascriptcore-tests: Move the list of tests to skip
        into its own variable, annotated with the bugs that are filed about
        the various failures.

2009-04-14  Adam Roben  <aroben@apple.com>

        Skip another sometimes-failing ecma/Date test on Windows

        These failing tests are covered by Bug 25160: Various ecma/Date tests
        sometimes fail on Windows (but not Mac)
        <https://bugs.webkit.org/show_bug.cgi?id=25160>

        Reviewed by Cameron Zwarich.

        * Scripts/run-javascriptcore-tests: Added ecma/Date/15.9.2.1.js to the
        list of tests to skip.

2009-04-14  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [Gtk] disable soup auth dialog when running DRT
        https://bugs.webkit.org/show_bug.cgi?id=24598

        Disable soup's auth dialog when running the tests.

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

2009-04-13  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        * Scripts/check-for-exit-time-destructors: Add ERROR: and WARNING: prefixes to
        make these scripts work better with the build window in new versions of Xcode.
        * Scripts/check-for-global-initializers: Ditto.
        * Scripts/check-for-weak-vtables: Ditto.

2009-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Disabled another JavaScriptCore test because it fails on Windows but
        not Mac, so it makes the bots red.

        * Scripts/run-javascriptcore-tests:

2009-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Disabled two JavaScriptCore tests because they fail on Window or Mac but
        not both, so they make the bots red.

        * Scripts/run-javascriptcore-tests:

2009-04-13  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Added another exception.

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

        Add our new test font to the list that DRT knows about

        Reviewed by Dan Bernstein.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Added WebKit Layout Tests 2.ttf.

2009-04-09  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Unreviewed Gtk build fix for undefined reference: g_thread_init.
        Add GLIB_LIBS to DRT and GtkLauncher build config.

        * GNUmakefile.am:

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

        Reinstating <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings

        Rolled r42345 back in.  The build failure was caused by an
        internal script which had not been updated the same way that
        build-webkit was updated.

        * Scripts/build-webkit:

2009-04-09  David Levin  <levin@chromium.org>

        Reviewed by David Kilzer.

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

        Launch DumpRenderTree and the image diff tool in a way that will work from perl threads.
        This is a workaround due to a perl limitation. When perl does open* calls on a thread, it ignores
        the environment of the current thread and simply uses the environment of the main thread instead.

        * Scripts/execAppWithEnv: Added.
        * Scripts/run-webkit-tests:

2009-04-09  Alexey Proskuryakov  <ap@webkit.org>

        Reverting <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings.
        It broke Mac build, and I don't know how to fix it.

        * Scripts/build-webkit:

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

        <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings

        Reviewed by Darin Adler and Maciej Stachowiak.

        Introduce the ENABLE_SVG_DOM_OBJC_BINDINGS feature define so
        that SVG DOM Objective-C bindings may be optionally disabled.

        * Scripts/build-webkit: Added --[no-]svg-dom-objc-bindings
        command-line argument.  Set special ENABLE_SVG_DOM_OBJC_BINDINGS
        Xcode variable required by WebCore.xcconfig.

2009-04-07  Adam Roben  <aroben@apple.com>

        Print the number of files being compiled when using pdevenv

        * Scripts/parallelcl:

2009-04-07  Mark Rowe  <mrowe@apple.com>

        Land the current build.webkit.org configuration for safekeeping.

        * BuildSlaveSupport/build.webkit.org-config/README: Added.
        * BuildSlaveSupport/build.webkit.org-config/Makefile:
        * BuildSlaveSupport/build.webkit.org-config/buildbot.tac:
        * BuildSlaveSupport/build.webkit.org-config/config.json: Added.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/build.webkit.org-config/public_html/buildbot.css: Renamed from BuildSlaveSupport/build.webkit.org-config/buildbot.css.
        * BuildSlaveSupport/build.webkit.org-config/public_html/index.html: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/robots.txt: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/__init__.py: Removed.
        * BuildSlaveSupport/build.webkit.org-config/webkit/auth.py: Removed.
        * BuildSlaveSupport/build.webkit.org-config/webkit/basesteps.py: Removed.
        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py: Removed.
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py: Removed.
        * BuildSlaveSupport/build.webkit.org-config/webkit/schedulers.py: Removed.
        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py: Removed.
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Removed.

2009-04-07  Mark Rowe  <mrowe@apple.com>

        Ignore the mysterious exception that Cygwin's Python is throwing when attempting
        to remove the layout-test-results directory.

        * BuildSlaveSupport/test-result-archive:

2009-04-07  Mark Rowe  <mrowe@apple.com>

        Change the working directory before removing the test result directory
        in the hopes of making the Windows build slaves happier.

        * BuildSlaveSupport/test-result-archive:

2009-04-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Roben.

        Make the links to tests in the uploaded results.html files on build.webkit.org point to the test files.

        * Scripts/VCSUtils.pm: Add a function that will return the location of a file relative to the root of the working copy.
        * Scripts/run-webkit-tests: Convert the path in to a remote URL if the path is below the layout tests directory.

2009-04-07  Mark Rowe  <mrowe@apple.com>

        Remove the layout-test-results directory after we have archived it so that
        log files and results are reset between runs of the tests.

        * BuildSlaveSupport/test-result-archive:

2009-04-07  Mark Rowe  <mrowe@apple.com>

        Helper script for uploading layout test results for display on build.webkit.org.

        * BuildSlaveSupport/test-result-archive: Copied from WebKitTools/BuildSlaveSupport/built-product-archive.

2009-04-11  Brian Weinstein  <bweinstein@gmail.com>

        Reviewed by Darin Adler.

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

        Allows timeout to be set in run-webkit-tests as a command line argument.

        * Scripts/run-webkit-tests:

2009-04-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Tor Arne Vestbø.

        Add /Programs to the productDir for GTK+, instead of adding
        /JavaScriptCore, when running jsc.

        * Scripts/run-sunspider:

2009-04-04  Kevin Ollivier  <kevino@theolliviers.com>

        Build fixes for wxMac/Tiger and PPC builds.

        * wx/build-wxwebkit:

2009-04-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Update the version of ICU dlls.

        * wx/build-wxwebkit:

2009-04-03  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe.

        Fix running DumpRenderTree with a root.

        * Scripts/run-webkit-tests:

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

        Build fix for Windows machines that don't have WebKitTools/Scipts in
        their PATH

        * Scripts/pdevenv: Add WebKitTools/Scripts to PATH when launching
        Visual Studio/VC++ Express.

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

        Use pdevenv when building .vcproj files via our scripts

        Reviewed by Mark Rowe.

        * Scripts/webkitdirs.pm:
        (sub buildVisualStudioProject): Use pdevenv instead of invoking Visual
        Studio/VC++ Express directly.

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

        Windows support for built-product-archive.

        * BuildSlaveSupport/built-product-archive:

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

        Make resolve-ChangeLogs -f work when the working tree has spaces in
        its path

        Reviewed by Mark Rowe and David Kilzer.

        * Scripts/resolve-ChangeLogs:
        (sub fixMergedChangeLogs): Quote the path to resolve-ChangeLogs in
        case it contains spaces.

2009-03-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24777
        WebKit tools are broken on Tiger

        * Scripts/webkitdirs.pm: Don't use arch command with options on Tiger.

2009-03-31  Darin Adler  <darin@apple.com>

        * Scripts/add-include: Added.

2009-03-31  Mark Rowe  <mrowe@apple.com>

        Fix use of incorrect constant.

        * BuildSlaveSupport/built-product-archive:

2009-03-30  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Stephanie Lewis.

        Add a script in support of the new build.webkit.org configuration.

        * BuildSlaveSupport/built-product-archive: Added.

2009-03-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Make policy-delegate logging work even for local files by processing the URLs as we
        do for other delegates.

        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        Use _drt_descriptionSuitableForTestResult on the URL.

        * DumpRenderTree/win/PolicyDelegate.cpp:
        (PolicyDelegate::decidePolicyForNavigationAction): Use urlSuitableForTestResult on the URL.

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

        Windows build fix

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::waitForPolicyDelegate): Added this empty stub.

        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        (LoadItem::invoke):
        (ScriptItem::invoke):
        Changed to use data members instead of removed member functions.

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

        Gtk DRT build fix per changeset
        http://trac.webkit.org/changeset/42082. Not reviewed.

        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (LoadItem::invoke):
        (ScriptItem::invoke):

2009-03-29  Darin Adler  <darin@apple.com>

        * DumpRenderTree/qt/jsobjects.cpp: Rolled out changes to this file. Maybe this will fix
        Qt building of DumpRenderTree.

2009-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        Bug 24922: change WorkQueue-based navigation tests to not depend on synchronous form submission
        https://bugs.webkit.org/show_bug.cgi?id=24922

        Don't rely on delegate methods to guess whether a queued step starts a load or not, because
        script-triggered loads can't be detected that way. Instead have the steps themselves indicate
        whether or not a load was triggered.

        * DumpRenderTree/LayoutTestController.cpp:
        (queueLoadingScriptCallback): Added. Version for scripts that perform loads.
        (queueNonLoadingScriptCallback): Added. Version for scripts that do not perform loads.
        (LayoutTestController::staticFunctions): Replaced queueScript with queueLoadingScript and
        queueNonLoadingScript.
        (LayoutTestController::queueBackNavigation): Moved here since it's platform-independent now.
        (LayoutTestController::queueForwardNavigation): Ditto.
        (LayoutTestController::queueLoadingScript): Replacement for queueScript. Here since it's
        platform-independent.
        (LayoutTestController::queueNonLoadingScript): Ditto.
        (LayoutTestController::queueReload): Moved here since it's platform-independent now.
        * DumpRenderTree/LayoutTestController.h: Ditto.

        * DumpRenderTree/WorkQueue.cpp:
        (WorkQueue::processWork): Added. Shared by the different platform's work queue implementations.
        * DumpRenderTree/WorkQueue.h: Ditto.

        * DumpRenderTree/WorkQueueItem.h: Changed the invoke function to return true if the item
        started a load. Removed unused getter functions. Made invoke functions private.
        Added LoadingScriptItem and NonLoadingScriptItem, making ScriptItem an abstract base.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (processWork): Use the new WorkQueue::processWork function to implement the new rule.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Removed queue functions that are now
        platform-independent and in LayoutTestController.cpp.
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (LoadItem::invoke): Return true.
        (ReloadItem::invoke): Ditto.
        (ScriptItem::invoke): Ditto.
        (BackForwardItem::invoke): Ditto.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate processWork:]): Use the new WorkQueue::processWork function to implement
        the new rule.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Removed queue functions that are now
        platform-independent and in LayoutTestController.cpp.
        * DumpRenderTree/mac/WorkQueueItemMac.mm:
        (LoadItem::invoke): Return true.
        (ReloadItem::invoke): Ditto.
        (ScriptItem::invoke): Ditto.
        (BackForwardItem::invoke): Ditto.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::processWork): Use the new WorkQueue::processWork function to implement
        the new rule. Removed queue functions that are now platform-independent and in
        LayoutTestController.cpp.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::processWork): Use the new WorkQueue::processWork function to implement
        the new rule.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Removed queue functions that are now
        platform-independent and in LayoutTestController.cpp.
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        (LoadItem::invoke): Return false when we fail, true when we succeed.
        (ReloadItem::invoke): Ditto.
        (ScriptItem::invoke): Ditto.
        (BackForwardItem::invoke): Ditto.

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

        Reviewed by Eric Seidel.
        
        Always use wxGraphicsContext on Mac to ensure path, matrix, etc. support.

        * wx/build-wxwebkit:

2009-03-27  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * Scripts/extract-localizable-strings: Fixed version check for perl 5.10 compatibility.

2009-03-27  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Added waitForPolicyDelegate, a more-reliable way to make our mailto form submission
        tests work.

        * DumpRenderTree/AccessibilityController.cpp:
        (getFocusedElementCallback): Use static_cast instead of reinterpret_cast because there's
        no reason to use reinterpret_cast just to get from void* to a specific type.
        (getRootElementCallback): Ditto.
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (toAXElement): Ditto.
        * DumpRenderTree/GCController.cpp:
        (collectCallback): Ditto.
        (collectOnAlternateThreadCallback): Ditto.
        (getJSObjectCountCallback): Ditto.
        * DumpRenderTree/LayoutTestController.cpp:
        (many functions):  Ditto.
        (waitForPolicyDelegateCallback): Added.
        (LayoutTestController::staticFunctions): Sorted functions by name.
        Added waitForPolicyDelegate.

        * DumpRenderTree/LayoutTestController.h: Sorted functions by name.
        Added waitForPolicyDelegate.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): Added code to reset the state of the
        policy delegate.
        (runTest): Added an additional call to resetWebViewToConsistentStateBeforeTesting just
        before loading an empty page. This prevents extra policy delegate calls from being logged.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::waitForPolicyDelegate): Added. Puts us into wait mode, and then
        tells the policy delegate to notify when done, then points the web view at the policy delegate.

        * DumpRenderTree/mac/PolicyDelegate.h: Added setControllerToNotifyDone: method.

        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        Added code to do notifyDone if controllerToNotifyDone is set.
        (-[PolicyDelegate setControllerToNotifyDone:]): Added.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting): Added code to reset the state of the
        policy delegate. Also moved the call to resetUndoManager in here.
        (runTest): Removed the call to resetUndoManager (see above). Added an additional call to
        resetWebViewToConsistentStateBeforeTesting to match the Mac code.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate): 0, not NULL.

        * DumpRenderTree/win/PolicyDelegate.cpp:
        (PolicyDelegate::PolicyDelegate): Initialize m_controllerToNotifyDone to 0.
        (PolicyDelegate::decidePolicyForNavigationAction): Added code to do notifyDone if
        m_controllerToNotifyDone is set.

        * DumpRenderTree/win/PolicyDelegate.h: Added setControllerToNotifyDone and
        m_controllerToNotifyDone.

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

        Reviewed by Gavin Barraclough.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=24765
        prepare-ChangeLog and svn-create-patch doesn't work with svn 1.6

        * Scripts/prepare-ChangeLog:
        * Scripts/svn-create-patch:

2009-03-26  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        * Scripts/do-webcore-rename:Update for rename of JSUnprotectedEventListener to
        JSEventListener.

2009-03-26  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        * Scripts/do-webcore-rename: Update for rename of JSEventListener to
        JSProtectedEventListener. This includes all the related renames, but
        not that one because that one renames the file.

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

        Reduce run-webkit-tests's time out limit to 15 seconds (or 2.5 minutes
        under GuardMalloc)

        The previous limit was 60 seconds (or 10 minutes under GuardMalloc).
        There's no evidence that we need the limit to be this long, and having
        it be so long just makes timed-out tests take forever to complete.
        DRT's watchdog timer is 10 seconds, so still has time to fire before
        run-webkit-tests will cut it off.

        Reviewed by Simon Fraser.

        * Scripts/run-webkit-tests:
        (sub readFromDumpToolWithTimer): Reduced the limit to 15 seconds (or
        2.5 mintues under GuardMalloc).

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

        Make DRT's watchdog timer actually work on Windows

        We were previously trying to use a CFRunLoopTimer for the watchdog
        timer on Windows. This doesn't work because we don't use a CFRunLoop
        on the main thread on Windows.

        This patch changes the watchdog timer on Windows be a normal Windows
        timer.

        Reviewed by Simon Fraser.

        * DumpRenderTree/DumpRenderTree.h: Moved declaration of
        waitToDumpWatchdog from here...
        * DumpRenderTree/mac/DumpRenderTreeMac.h: ...to here.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (invalidateAnyPreviousWaitToDumpWatchdog): Added. This function
        cancels an existing watchdog timer.
        (dump): Call invalidateAnyPreviousWaitToDumpWatchdog. This will
        prevent watchdogs from previous tests firing during subsequent ones.
        This matches Mac's behavior.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Added a declaration of
        waitToDumpWatchdog.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (waitUntilDoneWatchdogFired): Converted this to be a Windows
        TIMERPROC.
        (LayoutTestController::setWaitToDump): Changed to use SetTimer instead
        of CFRunLoopAddTimer.

2009-03-25  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Steve Falkenburg.

        Update test result search path for Windows now that it has updated versions of ICU, libxml2, and friends.

        * Scripts/run-webkit-tests:

2009-03-24  Mark Rowe  <mrowe@apple.com>

        Fix the Tiger build some more.

        * DumpRenderTree/mac/TextInputController.m:

2009-03-24  Mark Rowe  <mrowe@apple.com>

        Fix the Tiger build.

        * DumpRenderTree/mac/TextInputController.m:

2009-03-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon "The Most Boring Man in the World" Honeycutt.

        Explicitly map NSNotFound to -1 so that the result of-characterIndexForPointX:Y: does
        not differ between 32- and 64-bit.

        * DumpRenderTree/mac/TextInputController.m:
        (-[TextInputController characterIndexForPointX:Y:]):

2009-03-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Use a different platform search path for tests and skip lists, so that Tiger doesn't end up
        using the Leopard skip list.  Tests and skip lists are now looked for in the directory for
        the current OS and the generic "mac" directory.  Tests and skip lists for newer OS versions are
        ignored.

        * Scripts/run-webkit-tests:

2009-03-23  Stephanie  <slewis@apple.com>

        Fix root build.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2009-03-23  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe.

        Add production configuration for creating roots of WebKitTools.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2009-03-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Make testapi run as part of the standard JavaScriptCore tests.

        We only run testapi on the mac as currently windows webkit doesn't
        place all the necessary files for testapi, and we also test the
        JSC/CF APIs as well.

        * Scripts/run-javascriptcore-tests:

2009-03-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe.

        Make build-jsc build testapi and minidom in addition to jsc itself.

        * Scripts/build-jsc:

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

        Reviewed by Darin Adler.

        Only release the result NPVariant if the call to NPN_Invoke was successful.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testNPRuntime):

2009-03-19  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Mark Rowe.

        Make determinePassedArchitecture always consume the --32-bit
        option, also in non-AppleMacWebkit platforms. Solution pointed out
        by Mark Rowe.

        * Scripts/webkitdirs.pm:

2009-03-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Work around <rdar://problem/6698023> by activating fonts from disk.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Copy fonts into DumpRenderTree.resources
        in the built products directory.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateFonts): Activate the fonts from disk.

2009-03-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6693300> Don't rely on printf from TestNetscapePlugIn appearing in test results

        Switch from using printf to using the NPAPI to invoke console.log so that plug-in messages appear
        in test results even when the plug-in's stdout differs from DumpRenderTree's stdout.

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (log): Invoke console.log via the NPAPI.
        (NPP_Destroy): Call log instead of printf.
        (NPP_SetWindow): Ditto.
        (handleEventCarbon): Ditto.
        (handleEventCocoa): Ditto.
        (NPP_HandleEvent): Pass the instance in to the event handler.

2009-03-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Use the normal search rules for tests inside the platform directory.

        This allows tests inside the platform directory to have different results
        on different versions of Mac OS X.

        * Scripts/run-webkit-tests:

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

        resolve-ChangeLogs should not die on unmerged non-ChangeLog files

        Reviewed by Adam Roben.

        Fixes the following bug in resolve-ChangeLogs:

            Use of uninitialized value in -e at ./WebKitTools/Scripts/resolve-ChangeLogs line 132.
            Died at ./WebKitTools/Scripts/resolve-ChangeLogs line 164.

        * Scripts/resolve-ChangeLogs:
        (findUnmergedChangeLogs): Check the result of findChangeLog() to
        make sure we don't add undef values to the list of files being
        returned.

2009-03-17  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Simon Fraser.

        Fix the usage of the $architecture variable for non-Apple-Mac
        ports.

        * Scripts/webkitdirs.pm:

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

        Bug 24645: bisect-builds script doesn't work with Safari 4 Public Beta (version string)

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

        Reviewed by Mark Rowe.

        * Scripts/bisect-builds:
        (makeNightlyList): Added checks for Safari 4 Public Beta on
        Tiger and Leopard.

2009-03-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        Change the terminology from '3D transforms' to '3D rendering'.

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

2009-03-17  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Mark Rowe.

        Enable HTML5 media elements support by default also for the GTK+
        port.

        * Scripts/build-webkit:

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

        Reviewed by Mark Rowe.
        
        Tweak the BUILDING_ON_* defines so that they work with the default values set by
        AvailabilityMacros.h.
        
        https://bugs.webkit.org/show_bug.cgi?id=24630

        * DumpRenderTree/mac/DumpRenderTreeMac.h:

2009-03-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        Make coverage testing more reliable by ensuring --coverage does not
        clobber configuration settings, and by removing the unnecessary 
        dependency on matplotlib.

        * CodeCoverage/regenerate-coverage-display:
        * Scripts/webkitdirs.pm:

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

        Reviewed by Darin Adler and John Sullivan.

        When a plug-in instance is torn down, all plug-in objects will first be invalidated and then deallocated.
        Since objects can be deallocated in any order, it is not safe to call NPN_ReleaseObject on member variables.
        
        Instead, just zero out the member variable in invalidate.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvalidate):
        (pluginDeallocate):

2009-03-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam Weinig.
        
        REGRESSION: undo-iframe-location-change.html is failing on the buildbots
        https://bugs.webkit.org/show_bug.cgi?id=24626
        
        Added a call to [[webview undoManager] removeAllActions]
        to make sure anything left on the undo stack after one test
        will not affect any later test.

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

2009-03-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Change the layout test result search policy for Mac OS X to fit better with the idea of
        newer OS versions improving on previous OS versions.

        The results for the latest version of Mac OS X are placed in the "mac" directory.  The
        results for older versions of Mac OS X are structured as a series of overlays.  When
        running on Leopard, the results in "mac-leopard" are searched before those in "mac".
        When running on Tiger, the results in "mac-tiger" are searched before those in
        "mac-leopard" and "mac".

        * Scripts/run-webkit-tests:

2009-03-13  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Take advantage of the ability of recent versions of Xcode to easily switch the active
        architecture.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:

2009-03-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Timothy Hatcher.

        Remove the --64-bit argument from scripts in favor of them detecting when 64-bit should be preferred.

        The scripts will automatically target 64-bit if the system and hardware support it.  This can be
        overridden by passing --32-bit to individual scripts, or using set-webkit-configuration --32-bit
        to make the override persistent.

        * Scripts/build-webkit: Remove architecture-related code.
        * Scripts/gdb-safari: Remove architecture-related code, and clean up how the environment variables are passed to gdb.
        * Scripts/run-javascriptcore-tests: Remove architecture-related code.
        * Scripts/run-safari: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/set-webkit-configuration: Handle the --32-bit and --64-bit arguments.  The --32-bit argument will set the
        architecture preference to the 32-bit architecture of the machine.  The --64-bit argument will remove any architecture
        override that is in effect so that 64-bit support will be automatically detected.
        * Scripts/webkitdirs.pm: Add auto-detection of the best architecture for the machine, and the ability to override the
        auto-detection.

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

        Reviewed by Dan Bernstein.

        <rdar://problem/6610666> Revise the Cocoa event model text API

        Add a case statement for NPCocoaEventTextInput.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (handleEventCocoa):

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

        wx build fix. Let DerivedSources.make know we want database APIs.

        * wx/build-wxwebkit:

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

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

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

        Reviewed by Adam Roben.

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

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

        Clarify comments regarding order of FEATURE_DEFINES

        Rubber-stamped by Mark Rowe.

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

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

        Reviewed by Holger Freyther.

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

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

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

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

        Reviewed by Holger Freyther.

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

        Add plugin support only for X11 builds

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

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

        Reviewed by Mark Rowe.

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

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

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

        Reviewed by Holger Freyther.

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

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

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

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

        Reviewed by George Staikos.

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

        * Scripts/webkitdirs.pm:

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

        Change the isCygwin check in update-webkit to isAppleWinWebKit

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

        Reviewed by John Sullivan.

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

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

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

        Reviewed by Darin Adler

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

        Change NSURLRequest/IWebURLRequest dumping to include the mainDocumentURL

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

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

        Reviewed by Mark Rowe.

        Enable Geolocation (except on Tiger and Leopard).

        * Scripts/build-webkit:

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

        Build fixes for wxWidgets Mac trunk build.

        * wx/build-wxwebkit:

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

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

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

        Reviewed by David Kilzer.

        * Scripts/prepare-ChangeLog:

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

        Reviewed by Eric Seidel.

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

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

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

        Windows build fix after r41349

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

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

        Reviewed by Oliver Hunt.

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

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

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

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

        Reviewed by Holger Freyther.

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

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

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

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

        Reviewed by Holger Freyther.

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

         Implement dumping of WebKitWebBackForwardList and its history
         items.

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

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

         Reviewed by Holger Freyther.

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

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

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

        Reviewed by Holger Freyther.

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

        * Scripts/webkitdirs.pm:

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

        Reviewed by Holger Freyther.

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

        * Scripts/build-webkit:

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

        Reviewed by Holger Freyther.

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

        Refactor gtk lib detection and put it in builtDylibPathForName

        * Scripts/webkitdirs.pm:

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

        Rubber-stamped by Holger Freyther.

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

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

        Rubber-stamped by Alexey Proskuryakov.

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

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

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

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

        Reviewed by Eric Seidel

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Dan Bernstein

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

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

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

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

        Reviewed by Zack Rusin.

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

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

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

        Reviewed by Alexey Proskuryakov.

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Cameron Zwarich.

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

        * Scripts/webkitdirs.pm:

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        * Scripts/build-webkit:

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

        Reviewed by Alexey Proskuryakov.

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

        Add soup flags now that dependency is explicit.

        * GNUmakefile.am:

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

        Reviewed by Oliver Hunt.

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

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

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

        Rubber-stamped by Alexey Proskuryakov.

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

        * Scripts/make-js-test-wrappers:

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

        Reviewed by Alexey Proskuryakov.

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Adam Roben

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

        * Scripts/webkitdirs.pm:

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

        No review.

        Remove debugging code which was committed by mistake.

        * Scripts/run-webkit-tests:

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

        Reviewed by Adam Roben

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

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

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

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

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

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

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

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

        Reviewed by John Sullivan.

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

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

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

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

        Reviewed by Simon Fraser.

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

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

        Reviewed by Simon Fraser.

        * Scripts/build-webkit:

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

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

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

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

        Reviewed by Dan Bernstein.

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

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

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

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

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

        Robustify DumpRenderTree/win a little

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

        Reviewed by Alexey Proskuryakov.

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

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

        Fix the #include file order, per review comments.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:

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

        Reviewed by Dan Bernstein

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Reviewed by Oliver Hunt.

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

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

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

        Remove semi-colons from the end of ObjC method implementations

        Rubber-stamped by Adam Roben.

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

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

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

        Build fix for GTK.

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

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

        Reviewed by Sam Weinig.

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

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

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

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

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

        * Scripts/run-webkit-tests:

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

        Rubber stamped by Holger Freyther.

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

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

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

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

        Fix Windows build.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:

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

        Reviewed by Sam Weinig.

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

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

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

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

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

        Reviewed by Darin Adler.

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

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

        Reviewed by Beth Dakin.

        Add AX methods to retrieve the parent of an element.

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

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

        Reviewed by Adam Roben.

        Set the count to the right number of elements.

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

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

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

        Rubber-stamped by Alice Liu.

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by David Kilzer.

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

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

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

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

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

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

        Bug 22795: favicons should be saved to webarchives

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

        Reviewed by Darin Adler.

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

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

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

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

        Update copyright year in version resources.

        Reviewed by Adam Roben.

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc:

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

        Reviewed by John Sullivan.

        - update copyright

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

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

        Reviewed by Sam Weinig.

        Add NPRuntime test.

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

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

        Use the modern spelling of WebKit.

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

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Simon Hausmann.

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Maciej Stachowiak.

        Implement numberOfActiveAnimations to fix the build

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

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

        Reviewed by George Staikos.

        Fix unused variable warnings

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Don't install internal headers in WebKit framework

        Reviewed by Darin Adler.

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

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

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

        Reviewed by George Staikos.

        Add support for fixedLayoutSize to the qt DRT

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

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

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

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

        Reviewed by Darin Adler.

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

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

        Reviewed by Holger Freyther.

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

        Prevent TestNetscapePlugin from installing system-wide.

        * GNUmakefile.am:

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

        Reviewed by Holger Freyther.

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

        Move WebKitWebView's size allocation into a proper place.

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by George Staikos.

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Mark Rowe.

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

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

        * Scripts/prepare-ChangeLog:

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

        Reviewed by Holger Freyther.

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

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

        * GNUMakefile.am:

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

        Reviewed by Geoff Garen.

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

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

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

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

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

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

        Reviewed by Holger Freyther.

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

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

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

        Reviewed by Darin Adler.

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

        Implement animation and transition pausing.

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

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

        Reviewed by Adam Roben.

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

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

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

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

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

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

        Reviewed by Simon Hausmann.

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

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

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

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

        Rubber-stamped by Mark Rowe.

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

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

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

        Reviewed by Adam Roben.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Reviewed by Darin

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

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

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

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

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

        Rubber-stamped by Ada Chan.

        Fix gdb-safari on Tiger.

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

        * Scripts/gdb-safari:

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

        Reviewed by Alexey Proskuryakov.

        Ignore WML tests, if no WML support available.

        * Scripts/run-webkit-tests:

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

        Reviewed by Oliver Hunt.

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

        * Scripts/run-javascriptcore-tests:

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

        Fix Tiger build.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:

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

        Reviewed by John Sullivan.

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

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

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

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

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

        Reviewed by Eric Seidel.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Geoff Garen.

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

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

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

        Reviewed by Cameron Zwarich.

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

        * Scripts/make-js-test-wrappers:

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

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

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

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

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

        Build fix only, no review.

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

        * Scripts/build-webkit:

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

        Reviewed by David Hyatt (and Mark Rowe).

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

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

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

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

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

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

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

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

        Fix a leak in WinLauncher shutdown

        Reviewed by Sam Weinig.

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

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

        Fix a crash on exit in WinLauncher

        Reviewed by Sam Weinig.

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

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

        Add a Debug_Internal configuration to WinLauncher

        This matches our other projects.

        Reviewed by Sam Weinig.

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

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

        Reviewed by David Kilzer.

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

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

        * Scripts/webkitdirs.pm:

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

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

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

        Reviewed by Brady Eidson.

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

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

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

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

        Reviewed by Adam Roben.

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

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

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

        * GNUmakefile.am:

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

        Reviewed by Nikolas Zimmermann and Mark Rowe.

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

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

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

        Reviewed by Nikolas Zimmermann.

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

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

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

        Reviewed by Nikolas Zimmermann.

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

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

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

        Reviewed by Nikolas Zimmermann.

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

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

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

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

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

        Reviewed by Brady Eidson.

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

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

        Reviewed by Holger Freyther.

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

        Remove print'ing to stderr

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

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

        Windows build fix.

        * DumpRenderTree/cg/PixelDumpSupportCG.h:

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

        Windows build fix.

        * DumpRenderTree/cg/ImageDiffCG.cpp:

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

        Fix bustage.

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

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

        Reviewed by Darin Adler

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

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

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

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

        Reviewed by Holger Freyther.

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

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

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

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

        Reviewed by Mark Rowe.

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

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

        * Scripts/build-webkit:

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

        Reviewed by Alexey Proskuryakov.

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

        * Scripts/gdb-safari:

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

        Reviewed by Holger Freyther. Landed by Jan Alonzo.

        Get SVG tests tested on GTK port.

        * Scripts/webkitdirs.pm:

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

        Reviewed by Darin Adler.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Rubber-stamped by Darin Adler.

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

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

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

        Reviewed by George Staikos.

        Add --(no-)wml build flags.

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

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

        Not reviewed.

        Try to fix gtk build.

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

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

        Reviewed by Maciej.

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

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Sam Weinig.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

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

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

        Rubber stamped by Geoff Garen.

        - do the long-planned StructureID -> Structure rename

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

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

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

        * wx/install-unix-extras:

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

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

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

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:

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

        Reviewed by Simon Hausmann.

        Fix hanging DRT with Qt.

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

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

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

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

        BUILD WAS NOT BROKEN: Rolling r38189 back in.

        Please perform a clean build if you see crashes.

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

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

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

        Reviewed by Beth Dakin.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        GTK build script tweak.

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

        * Scripts/webkitdirs.pm:

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

        Fix 64-bit build.

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

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

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

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

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

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

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

        Reviewed by Tim Hatcher.

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

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

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

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

        Reviewed by Dan Bernstein.

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

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

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

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

        Not reviewed.

        * Scripts/do-webcore-rename:

        Add some renames to contemplate for the future.

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

        Requested by Mark Rowe.

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

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

        Bug 21997: prepare-ChangeLog should filter out ChangeLog files

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

        Reviewed by Darin Adler.

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

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

        Reviewed by Jon Homeycutt.

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

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:

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

        Reviewed by Dan Bernstein.

        Fixed 64 bit build failure.

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

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

        Fix GTK DRT following build breakage in r37928.

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

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

        Reviewed by Mark Rowe.

        Fix recently introduced double-free crashes in GTK DRT.

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

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

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

        Reviewed by Mark Rowe.

        Fix GTK DRT hang when running the tests.

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

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

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

        Reviewed by Sam Weinig.

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

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

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

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

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

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

        Reviewed by Darin Adler and Kevin McCullough.

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

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

        Reviewed by Dan Bernstein

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

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

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

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

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

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

        * wx/build-wxwebkit:

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

        Try fixing the 64-bit build.

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

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

        Reviewed by Sam Weinig.

        <rdar://problem/5440917> Support NPN_Construct

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

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

        (pluginInvoke):
        Handle testConstruct.

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

        (testEnumerate):
        Only enumerate the two first properties.

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

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

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

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

        Reviewed by Adam Roben.

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

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

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

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

        Reviewed by Sam Weinig.

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

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

        Reviewed by Adam Roben

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

        Implement LayoutTestController::elementDoesAutoCompleteForElementWithId() on Windows

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:

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

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

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

        Exclude strings marked with UNLOCALIZED_STRING or UNLOCALIZED_LPCTSTR.

        * Scripts/extract-localizable-strings:

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

        Reviewed by Mark Rowe.

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

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Mark Rowe.

        Fix layout tests that use prologues and epilogues.

        * Scripts/run-webkit-tests:

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

        Reviewed by Mark Rowe.

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Stephanie Lewis.

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

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

        * Scripts/run-webkit-tests:

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

        Gtk build fix. Not reviewed.

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

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

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

        Reviewed by Tim Hatcher.

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

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

        Fix windows build.

        Reviewed by Sam Weinig.

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

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

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

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

        Reviewed by David Kilzer.

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

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

        Reviewed by Sam Weinig.

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

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

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

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

        Reviewed by Beth Dakin.

        Added a method to get the links in a webpage

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

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

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

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

        Reviewed by Adam.

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

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

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

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

        Reviewed by Sam Weinig and Anders Carlsson.

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

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

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

        Reviewed by Oliver Hunt.

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

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

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

        Not reviewed.

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

        * Scripts/check-for-global-initializers:

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

        Fix the Windows build after r37434.

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

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

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

        Rubber-stamped by Mark Rowe.

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

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

        Reviewed by Dan Bernstein

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

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

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

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

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

        Reviewed by Dave Kilzer.

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

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

        Reviewed by Tim Hatcher.

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

        * Scripts/check-for-weak-vtables:

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

        Reviewed by Darin Adler

        Render images to RGBA8 bitmaps independently of platform endianness.

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

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

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

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

        Reviewed by Darin Adler

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

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Dan Bernstein.

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

        * Scripts/check-for-global-initializers:

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

        Rubber-stamped by Dan Bernstein.

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

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

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

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

        Reviewed by Dan Bernstein

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

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

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

        Reviewed by Simon.

        Changed copyright from Trolltech ASA to Nokia.

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


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

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

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

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

        Reviewed by Adam.

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

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

        Reviewed by Sam Weinig.

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

        Return the result value from getURL.

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

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

        Reviewed by Tim Hatcher.

        Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed.

        * Scripts/build-webkit:

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

        Remove usage of atlstr.h and CString for VCExpress compatibility

        Reviewed by Stephanie Lewis.

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

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

        wx build fix. Update the version of libpng.

        * wx/install-unix-extras:

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

        Reviewed by Darin Adler.

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

        Add method to ObjCController to return a runtime array.

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

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

        Reviewed by Sam Weinig.

        Speculative build fix.

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

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

        Reviewed by Sam Weinig.

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

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

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

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

        Reviewed by Steve Falkenburg.

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

        * GNUmakefile.am:

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

        Reviewed by Oliver Hunt.

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

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

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

        Fixed Windows bustage

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

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

        Reviewed by Darin Adler.

        Expose titleUIElement call for DumpRenderTree

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

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

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

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

        Reviewed by Dan Bernstein.

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

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

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

        Really fix tiger jsc tests.

        * Scripts/run-javascriptcore-tests:

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

        Reviewed by Maciej Stachowiak.

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

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

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

        Rubber-stamped by Sam Weinig.

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

        Also fixes some coding style issues in ResourceLoadDelegate.mm.

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

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

        Reviewed by Mark Rowe and Maciej Stachowiak..

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

        * Scripts/run-javascriptcore-tests:

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

        Reviewed by Sam Weinig.

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

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

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

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

        Reviewed by Mark Rowe.

        Add flag to disable running sample on tests that timeout.

        * Scripts/run-webkit-tests:

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

        Windows build fix after r36511

        Update for rename of layoutTestController to gLayoutTestController.

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

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

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

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

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

        Fix the build.

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

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

        Reviewed by Eric Seidel

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

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

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

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

        Reviewed by Eric Seidel

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

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

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

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

        Reviewed by Stephanie Lewis.

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

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

        Build fix.

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

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

        Reviewed by Mark Rowe.

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

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

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

        Another Windows nightly build fix.

        Reviewed by Sam Weinig.

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

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

        Reviewed by Mark Rowe.

        Fix DRT build

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

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

        Fix Windows nightlies.

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

        Reviewed by Dave Hyatt.

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

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

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

        Reviewed by Maciej Stachowiak.

        Add a --profile flag to run-sunspider.

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

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

        Reviewed by Oliver Hunt.

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

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

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

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

        Reviewed by Eric Seidel.

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

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

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

        Reviewed by Oliver Hunt.

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

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

        * Scripts/run-sunspider:

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

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

        * wx/build-wxwebkit:

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

        More Mac build fixes.

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

        * Scripts/build-webkit:

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

        Mac build fix.  Ensure that dashboard support is enabled.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

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

        Build fix. Copy correct version of ICU.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

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

        Reviewed by Simon.

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

        * Scripts/run-webkit-tests:

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

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

        Reviewed by Sam Weinig.

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

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

        Reviewed by Mark Rowe

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

        * BuildSlaveSupport/build-launcher-app:

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

        Reviewed by Ada Chan.

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

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

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

        Reviewed by Beth Dakin.

        Add snowleopard platform in layout tests

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

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

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

        Reviewed by Darin Adler.

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

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

        * Scripts/run-webkit-tests:

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

        Reviewed by Holger Freyther.

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

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

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

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

        Reviewed by Cameron Zwarich.

        Updated project files to XCode 3.1.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2008-08-15  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Geoff Garen.

        <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework

        * Scripts/check-for-global-initializers: Ignore initializers when building the debug variant.

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Holger.

        Revert r31585 and disable http tests for the Qt build again unless
        explicitly enabled.

        Running the http tests unfortunately currently still triggers
        failures in non-http tests due to side-effects. Disable them by default for
        now, for more reliable results.

        * Scripts/run-webkit-tests:

2008-08-10  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed (and updated) by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=16620
        [GTK] Autotools make dist and make check support

        Get make dist working.

        Note that not all possible configurations have been tested yet.

        * GNUmakefile.am:

2008-08-10  Alp Toker  <alp@nuanti.com>

        Remove leftover qmake/GTK+ build files.

        * DumpRenderTree/gtk/DumpRenderTree.pro: Removed.
        * GtkLauncher/GtkLauncher.pro: Removed.

2008-08-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        AX functions shouldn't return position information because it changes
        based on the platform

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::boundsForRange):

2008-08-06  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Fix leaks seen on build-bot by fixing memory management of AccessibilityUIElement.
        <https://bugs.webkit.org/show_bug.cgi?id=20297>
        <rdar://problem/6093153>

        I've made AccessibilityUIElement a stack object for now.  It could be
        made RefCounted, but I figured that might be overkill for the moment.
        Essentially it's just a RefPtr itself. :)

        I also fixed a few typos, such as AccessibilityUIElement() instead of ~AccessibilityUIElement()
        which was causing additional leaks. :)

        I added toAXElement to remove a bunch of copy/paste code.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (toAXElement):
        (allAttributesCallback):
        (attributesOfLinkedUIElementsCallback):
        (attributesOfChildrenCallback):
        (lineForIndexCallback):
        (boundsForRangeCallback):
        (childAtIndexCallback):
        (getRoleCallback):
        (getTitleCallback):
        (getDescriptionCallback):
        (getWidthCallback):
        (getHeightCallback):
        (getIntValueCallback):
        (getMinValueCallback):
        (getMaxValueCallback):
        (getInsertionPointLineNumberCallback):
        (finalize):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement::platformUIElement):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::focusedElement):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::attributesOfLinkedUIElements):
        (AccessibilityUIElement::attributesOfChildren):

2008-08-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Cameron Zwarich.

        Speculative fix for an error I keep seeing in my Cygwin build

        * Scripts/webkitdirs.pm: make determineConfigurationProductDir() always call determineConfiguration() even on cygwin

2008-08-02  Kevin Ollivier  <kevino@theolliviers.com>

        Forgot to commit licensing correction in last commit.

        * wx/packaging/wxWebKitInstaller.iss.in:

2008-08-02  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Scripts for building a wxWebKit installer for wxPython on Win, eventually will
        be used for nightlies.

        https://bugs.webkit.org/show_bug.cgi?id=20036

        * wx/packaging: Added.
        * wx/packaging/build-win-installer.py: Added.
        * wx/packaging/wxWebKitInstaller.iss.in: Added.

2008-07-31  Adam Roben  <aroben@apple.com>

        Follow-up to r35500

        * WinLauncher/WinLauncher.vcproj: Set the manifest properties for the
        Release configuration, too.

2008-07-31  Stefan Landvogt <stefan.landvogt@gmail.com>

        Fix Bug 20245: WinLauncher does not start in WebKit-debug right out of
        the box

        <https://bugs.webkit.org/show_bug.cgi?id=20245>

        Reviewed by Adam Roben.

        * WinLauncher/WinLauncher.vcproj: adding the following properties to
        WinLauncher > Properties > Manifest Tool > Isolated COM
        Type Library File: $(WebKitOutputDir)\lib\WebKit.tlb
        Component File Name: WebKit$(WebKitDLLConfigSuffix)
        Doing the change on "All Configurations"

2008-07-31  Adam Roben  <aroben@apple.com>

        Windows build bot fix

        * DumpRenderTree/win/ImageDiff.vcproj: Don't fail if files that only
        exist for people at Apple can't be found. Also updated the ICU version
        to 3.8.

2008-07-31  David Kilzer  <ddkilzer@apple.com>

        Fix layout test results for webarchive/test-xml-stylesheet.xml

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (convertMIMEType): Work around the "text/xml" local file type
        regression in Leopard using the BUILDING_ON_LEOPARD macro.  Also
        stop mangling "application/x-javascript" into "text/javascript".
        (convertWebResourceDataToString): When checking whether to dump a
        resource as text, also check to see if the MIME type is in the
        -[WebHTMLRepresentation supportedNonImageMIMETypes] array.
        * DumpRenderTree/mac/DumpRenderTreeMac.h: Added BUILDING_ON_LEOPARD
        macro.

2008-07-31  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Alice Liu

        Add AX support to get the bounds for a range of text
        Add AX support to get the child of an element
        Add AX support to get all the parameterized attribute names of an element

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (parameterizedAttributeNamesCallback):
        (boundsForRangeCallback):
        (childAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::parameterizedAttributeNames):
        (AccessibilityUIElement::boundsForRange):

2008-07-31  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

        Make run-launcher set DYLD_LIBRARY_PATH to make things work on Mac OS X.

        * Scripts/run-launcher:

2008-07-30  Jessica Kahn  <jess@apple.com>

        Reviewed by Adam Roben.

        Slightly stricter checking for previous change, suggested by Adam.

        * Scripts/extract-localizable-strings:

2008-07-30  Jessica Kahn  <jess@apple.com>

        Reviewed by Darin Adler.

        Added support for UI_STRING and UI_STRING_KEY macros with flexible prefixes.

        * Scripts/extract-localizable-strings:

2008-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Copy icu38* files instead of icu36* files.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-07-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

        DRT/Gtk build fix for r35362

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):

2008-07-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        Add the ability to dump whether-or-not an element should have autocomplete enabled,
        from the perspective of the WebKit API

        * DumpRenderTree/LayoutTestController.cpp:
        (elementDoesAutoCompleteForElementWithIdCallback):
        (LayoutTestController::staticFunctions):

        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId): Stub for now until I can get on Windows

2008-07-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Add support for AXLineForIndex and AXInsertionPointIndex through the
        accessibility controller

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (lineForIndexCallback):
        (getInsertionPointLineNumberCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::insertionPointLineNumber):
        (AccessibilityUIElement::lineForIndex):

2008-07-25  Adam Roben  <aroben@apple.com>

        Try to fix the Windows build bot

        * DumpRenderTree/win/DumpRenderTree.vcproj: Don't try to copy files
        that don't exist for people outside of Apple.

2008-07-18  Landry Breuil  <landry@openbsd.org>

        Bug 19975: [OpenBSD] Patches to enable build of WebKit

        <https://bugs.webkit.org/show_bug.cgi?id=19975>

        Reviewed by David Kilzer.

        * DumpRenderTree/DumpRenderTree.h: OpenBSD doesn't support wide characters.

2008-07-16  Jon Honeycutt  <jhoneycutt@apple.com>

        CygwinDownloader fails to install necessary packages
        https://bugs.webkit.org/show_bug.cgi?id=20075

        Reviewed by Mark Rowe.

        * CygwinDownloader/cygwin-downloader.zip: Rebuilt after two broken
        mirrors removed in r34116. Set MIME type to application/octet-stream.

2008-07-16  Jon Honeycutt  <jhoneycutt@apple.com>

        CygwinDownloader's make-zip.sh script fails
        https://bugs.webkit.org/show_bug.cgi?id=20074

        Reviewed by Mark Rowe.

        * CygwinDownloader/cygwin-downloader.py:

2008-07-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Refactor accessibility testing code.

        We now have:
        - AccessibilityController
          Controller which has access to the WebView and can provide the focused element, root element
          and in the future, elementAtPoint.

        - AccessibilityUIElement
          Object which provides access to the data provided by the Accessibility APIs.

        * DumpRenderTree/AccessibilityController.cpp:
        (getFocusedElementCallback):
        (getRootElementCallback):
        (AccessibilityController::getJSClass):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityUIElement.cpp: Added.
        (allAttributesCallback):
        (attributesOfLinkedUIElementsCallback):
        (attributesOfChildrenCallback):
        (getRoleCallback):
        (getTitleCallback):
        (getDescriptionCallback):
        (getWidthCallback):
        (getHeightCallback):
        (getIntValueCallback):
        (getMinValueCallback):
        (getMaxValueCallback):
        (finalize):
        (AccessibilityUIElement::makeJSAccessibilityUIElement):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h: Added.
        (AccessibilityUIElement::platformUIElement):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm: Added.
        (AccessibilityUIElement::AccessibilityUIElement):
        (descriptionOfValue):
        (attributesOfElement):
        (nsStringToJSStringRef):
        (concatenateAttributeAndValue):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::attributesOfLinkedUIElements):
        (AccessibilityUIElement::attributesOfChildren):
        (AccessibilityUIElement::allAttributes):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):

2008-07-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Add support to get attributes of the AXChildren of an objecty

        * DumpRenderTree/AccessibilityController.cpp:
        (attributesOfChildrenForFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (descriptionOfValue):
        (AccessibilityController::attributesOfChildrenForFocusedElement):

2008-07-14  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-07-14  Adam Roben  <aroben@apple.com>

        Attempted Windows build fix

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj: Add
        CoreFoundation/OSXCompatibilityHeaders[/GNUCompatibility] to the
        include path.

2008-07-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Eliminate per-thread JavaScript global data instance support and make arbitrary
        global data/global object combinations possible.

        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp:
        (runJavaScriptThread): Don't pass a released context reference to JSGarbageCollect.
        In this scenario, it was causing crashes after each 10-20 tests, because there was a large
        chance for a different thread to cause GC after the context was released.

2008-07-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        Make sure we read WebCore Leak messages.  Force full document teardown for DumpRenderTree.

        Up timeout limit, some slower machines were timing out before crashtracer finished writing out to disk and quitting DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (resetWebViewToConsistentStateBeforeTesting):
        * Scripts/run-webkit-tests:

2008-07-10  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Print <div> backgrounds when printing from DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):

2008-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Fix copying of expected results to correct location

        * Scripts/run-webkit-tests:

2008-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by aroben.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpAsPDFCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpAsPDF):
        (LayoutTestController::setDumpAsPDF):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpFrameAsPDF):
        (dump):

2008-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by weinig.

        Add Content-Type support to DumpRenderTree and run-webkit-tests
        and move expected.txt files to expected.webarchive

        https://bugs.webkit.org/show_bug.cgi?id=15565

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (compareImages):
        (main):
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * Scripts/run-webkit-tests:

2008-07-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        Port r34988 to Mac: allow tests to define JavaScript to execute when
        NPP_DestroyStream or NPP_URLNotify is called.

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New): Remove initialization that happens in pluginAllocate. Look
        for new arguments onStreamDestroy and onURLNotify.
        (NPP_Destroy): Free onStreamDestroy and onURLNotify.
        (executeScript): Code moved from onStreamLoad.
        (NPP_NewStream): Call executeScript.
        (NPP_DestroyStream): Same.
        (NPP_URLNotify): Same.

2008-07-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders.

        This patch extends DRT accessibility tests to add the ability to
        query the intValue, minValue, and maxValue of the focused element.

        * DumpRenderTree/AccessibilityController.cpp:
        (intValueOfFocusedElementCallback):
        (minValueOfFocusedElementCallback):
        (maxValueOfFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::intValueOfFocusedElement):
        (AccessibilityController::minValueOfFocusedElement):
        (AccessibilityController::maxValueOfFocusedElement):

2008-07-07  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * DumpRenderTree/win/ImageDiff.vcproj:

2008-07-02  Jon Honeycutt  <jhoneycutt@apple.com>

        Allow tests to define JavaScript to execute when NPP_DestroyStream or
        NPP_URLNotify is called.

        Reviewed by Anders.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Add a new
        property, "returnErrorFromNewStream." This is to support the test for
        <rdar://5983747> Safari crashes trying to load the SilverLight plugin,
        caused by WebKit calling NPP_DestroyStream after a plug-in returns an
        error from NPP_NewStream.
        (pluginGetProperty):
        (pluginSetProperty):
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Added new
        members, onStreamDestroy and onURLNotify.
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_New): Remove initialization of onStreamLoad; this was moved to
        pluginAllocate. Look for new arguments onStreamDestroy and
        onURLNotify, and store their values.
        (NPP_Destroy): Free new members.
        (executeScript): Code moved from onStreamLoad
        (NPP_NewStream): If returnErrorFromNewStream has been set to true,
        return a generic error code. If onStreamLoad is set, execute it as
        JavaScript.
        (NPP_DestroyStream): If onStreamDestroy is set, execute it as JS.
        (NPP_URLNotify): Same, for onURLNotify.

2008-07-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel and John Sullivan

        Add the ability to tell DRT to call stopLoading on a WebFrame inside of a didStartProvisionalLoadForFrame
        load delegate.

        Required to add a layout test for the fix for <rdar://problem/5549871>

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]): If stopProvisionalFrameLoads is set, call
          [WebFrame stopLoading] to test for the crash reflected in 5549871

        All of the following are infrastructure to add the layoutTestController.setStopProvisionalFrameLoads() call:
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (setStopProvisionalFrameLoadsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::stopProvisionalFrameLoads):
        (LayoutTestController::setStopProvisionalFrameLoads):

2008-07-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Support ability to get width and height of an element through accessibility

        * DumpRenderTree/AccessibilityController.cpp:
        (widthOfFocusedElementCallback):
        (heightOfFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::widthOfFocusedElement):
        (AccessibilityController::heightOfFocusedElement):

2008-06-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Support the ability to get the linked ui elements of an object

        * DumpRenderTree/AccessibilityController.cpp:
        (attributesOfLinkedUIElementsForFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::attributesOfLinkedUIElementsForFocusedElement):
        (AccessibilityController::allAttributesOfFocusedElement):
        (attributesOfElement):
        (nsStringToJSStringRef):

2008-06-29  Sam Weinig  <sam@webkit.org>

        Fix Tiger build.

        * DumpRenderTree/mac/EventSendingController.mm:
        (eventTypeForMouseButtonAndAction):

2008-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Add multi-button mouseevent support to DRT
        https://bugs.webkit.org/show_bug.cgi?id=15173

        It's now possible to specify the mouse button with:
        eventSender.mouseDown(1); eventSender.mouseUp(1); etc.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (eventTypeForMouseButtonAndAction):
        (-[EventSendingController updateClickCountForButton:]):
        (-[EventSendingController mouseDown:]):
        (-[EventSendingController mouseUp:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController contextClick]):

2008-06-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Copy <test>-expected.png from the right location to /tmp/layout-test-results.
        Use $expectedPixelDir instead of $expectedDir. Allows using SVG pixel tests again.

        * Scripts/run-webkit-tests:

2008-06-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Christian Dywan.

        [Gtk] Initialize webview settings before running DRT tests
        http://bugs.webkit.org/show_bug.cgi?id=19778

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (setDefaultsToConsistentStateValuesForTesting):
        (main):

2008-06-26  Darin Adler  <darin@apple.com>

        * Scripts/check-for-weak-vtables: Fixed comment.

2008-06-26  Darin Adler  <darin@apple.com>

        * Scripts/check-for-weak-vtables: Added.

2008-06-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam.

        Do not include AXPosition in the dump of all of the accessibility
        attributes since it is screen-specific.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::allAttributesOfFocusedElement):

2008-06-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders.

        This is a speculative fix for the failing layout test on the build
        bot. It seems that the problem that the Build Bot is having is
        Tiger-specific. On Tiger, [NSValue description] was not very smart.
        So I replaced our call to description with a hand-rolled equivalent
        that will match on both platforms.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (descriptionOfValue):

2008-06-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        This patch adds support to the AccessibilityController to query the
        following attributes specifically, without a full attribute dump:
        AXRole, AXTitle, and AXDescription.

        * DumpRenderTree/AccessibilityController.cpp:
        (allAttributesForFocusedElementCallback):
        (roleOfFocusedElementCallback):
        (titleOfFocusedElementCallback):
        (descriptionOfFocusedElementCallback):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::allAttributesForFocusedElement):
        (concatenateAttributeAndValue):
        (AccessibilityController::roleOfFocusedElement):
        (AccessibilityController::titleOfFocusedElement):
        (AccessibilityController::descriptionOfFocusedElement):

2008-06-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Stephanie Lewis.

        - move the linker flags from the debug configuration in the project
          to the shared configuration

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:

2008-06-24  Dan Bernstein  <mitz@apple.com>

        - try to fix the Tiger build

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:

2008-06-24  Sam Weinig and Beth Dakin  <bdakin@apple.com and sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/5884881> Make DumpRenderTree support
        accessibility tests

        This patch adds some basic support for accessibility layout tests
        on the Mac.

        * DumpRenderTree/AccessibilityController.cpp: Added.
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (dumpCurrentAttributesCallback):
        (AccessibilityController::makeWindowObject):
        (AccessibilityController::getJSClass):
        (AccessibilityController::staticFunctions):
        * DumpRenderTree/AccessibilityController.h: Added.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm: Added.
        (descriptionOfValue):
        (AccessibilityController::dumpCurrentAttributes):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.h:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):

2008-06-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein

        * Scripts/extract-localizable-strings:
        add UI_STRING_LOCALIZE_LATER, LPCTSTR_UI_STRING_LOCALIZE_LATER, and LOG_WARNING to the
        list of debugging macros, to avoid noise when keeping the list of localized string
        exceptions up to date

2008-06-24  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Darin Adler.

        - add a font family for testing font-weight

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added linker
        flags to create data sections for the WeightWatcher fonts.
        * DumpRenderTree/fonts: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher100.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher200.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher300.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher400.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher500.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher600.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher700.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher800.ttf: Added.
        * DumpRenderTree/fonts/WebKitWeightWatcher900.ttf: Added.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateFonts): Renamed activateAhemFont to this and made it activate
        the WeightWatcher fonts in addition to Ahem.
        (prepareConsistentTestingEnvironment): Adjusted for the name change.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Added the WeightWatcher fonts.

2008-06-20  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin Adler.

        Extend the build-webkit (and set-webkit-configuration) script to
        support Cairo-based webkit builds.  (see http://bugs.webkit.org/show_bug.cgi?17952)

        * Scripts/build-webkit:  Add --cairo-win32 to the help message
        * Scripts/webkitdirs.pm:  Extend the 'determinePassedConfiguration
          subroutine to recognize the --cairo-win32 flag.  When present,
          the build configuration is changed from Debug/Release to
          Debug_Cairo/Release_Cairo.  This flag is only active when the
          isCygwin() test is true.

2008-06-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Justin Garcia.

        - prefer Leopard results when running on Snow Leopard.

        * Scripts/run-webkit-tests: Added a mapping of Snow Leopard to
          mac-leopard.
        * Scripts/webkitdirs.pm: Added isSnowLeopard().

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: Updated.
        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: Updated for the latest round of renaming.
        * Scripts/do-webcore-rename: Tweaked and reorganized a bit.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/create-exports: Added.
        * Scripts/do-file-rename: Added some planned renames.
        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Updated for the latest round of renaming.

2008-06-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - rename testkjs to jsc

        * Scripts/build-jsc: Copied from Scripts/build-testkjs.
        * Scripts/build-testkjs: Removed.
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc: Copied from Scripts/run-testkjs.
        * Scripts/run-sunspider:
        * Scripts/run-testkjs: Removed.
        * Scripts/sunspider-compare-results:

2008-06-14  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Moved planned renames into a separate hash
        from the actual renames. Removed many renames that are either done or
        no longer planned.

2008-06-14  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Fixed obvious typo.

2008-06-13  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Added three more exceptions.

2008-06-10  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon.

        For the qmake based build make it possible to build against makespecs where
        QMAKE_CC is defined in a configuration file included from qmake.conf.

        * Scripts/webkitdirs.pm: Added support for include() statements in
        qmake.conf.

2008-06-09  Alp Toker  <alp@nuanti.com>

        gcc3/autotools build fix. Add explicit -O2 -fno-strict-aliasing to
        each of the tools since these are no longer set globally.

        * GNUmakefile.am:

2008-06-08  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Added another exception.

2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Timothy.

        Remove the --squirrelfish option from SunSpider, as it is no longer needed.

        * Scripts/run-sunspider:

2008-06-05  Alp Toker  <alp@nuanti.com>

        Build fix for r34387.

        * GNUmakefile.am:

2008-06-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver.

        Add an exception for Opcode.o to the global initializers check so that
        we can dump instruction statistics in the JavaScript virtual machine.

        * Scripts/check-for-global-initializers:

2008-05-30  Steve Falkenburg  <sfalken@apple.com>

        Generate an isolated COM manifest for registry free COM.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-06-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt and Mitz.

        <rdar://problem/5704119>
        repro crash in WebCore::RenderPart::setWidget (plugin-related?)

        Call -[WebView display] in the "plug-in" failed delegate method, simulating
        the sheet that Safari puts up.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:plugInFailedWithError:dataSource:]):

2008-05-30  Timothy Hatcher  <timothy@apple.com>

        Made the starting line number of scripts be 1-based throughout the engine.
        This cleans up script line numbers so they are all consistent now.

        Reviewed by Oliver Hunt.

        * DumpRenderTree/mac/ObjCController.m:
        (runJavaScriptThread): Pass a line number of 1 instead of 0 to JSEvaluateScript.
        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp:
        (runJavaScriptThread): Ditto.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runJavaScriptThread): Ditto.

2008-05-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Fixed VCSUtils.pm to work with git repositories inside symlinks.

        * Scripts/VCSUtils.pm: Compute a relative path from the git repository
        root, instead of the root of the filesystem, to work around a bug in
        abs2rel when traversing symlinked home directories.

2008-05-29  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Restore original behavior of isOSX() referring to the Mac port, not the OS itself.

        https://bugs.webkit.org/show_bug.cgi?id=19311

        * Scripts/webkitdirs.pm:

2008-05-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Fix run-iexploder-tests and run-mangleme-tests to work with updated shared scripts and
        configuration files.

        * Scripts/run-iexploder-tests:
        * Scripts/run-mangleme-tests:
        Renamed runSafari to not conflict with the one in webkitdirs.
        Added SSLCertificateFile option for httpd, as now needed.

2008-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Update the sample app after wxWebFrame->wxWebBrowserShell rename.

        * wx/browser/browser.cpp:
        (MyApp::OnInit):

2008-05-24  Andreia Gaita  <shana@isninja.com>

        Reviewed by Alp Toker.

        cygwin-downloader.py fixes.

        Remove two non-working mirrors. Add a check for missing dependency
        packages to avoid bailing out on an inconsistent Cygwin package list.

        * CygwinDownloader/cygwin-downloader.py:

2008-05-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Darin Adler.

        Remove useQmake usage. QMake build doesn't support Gtk port
        anymore.

        Also fix 2 occurences of "Web Kit". Should be WebKit.

        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-05-22  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Dan.

        implement the beforeUnload UI delegate so that DRT will dispatch beforeunload events.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        (SearchableWebViewHost::runBeforeUnloadConfirmPanelWithMessage):

2008-05-21  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        DumpRenderTree support for <rdar://problem/5787733> fast/dom/HTMLDocument/hasFocus.html fails on Windows

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewFocus): Added.
        (UIDelegate::webViewUnfocus): Added.
        * DumpRenderTree/win/UIDelegate.h:

2008-05-21  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Stephanie Lewis.

        Set the pass_through flag on Getopt so that extra arguments can be passed through to Safari,
        rather than trigger an unknown argument message.  This allows run-webkit-tests to display results
        once more.

        * Scripts/run-safari:

2008-05-21  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Maciej, Mark.

        arch doesn't take arguments on tiger.  expand DRT timeout for guardMalloc.

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-05-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Stephanie Lewis.

        Improve the behavior of run-webkit-tests with 64-bit WebKit by automatically inferring whether to run 64-bit.

        If --64-bit is not passed to run-webkit-tests, attempt to guess whether we should run 64-bit.
        This decision is made based on the 64-bitness of the built WebKit framework if it exists, and
        can be manually overridden by passing --64-bit or --no-64-bit.  This removes the need to always
        pass an argument to run-webkit-tests after having built with "make x86_64".

        * Scripts/gdb-safari:
        * Scripts/run-safari:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm: Split the setting of the 64-bit flag, the determination of the
        preferred architecture, and exporting of the environment variables for 'arch' out into
        separate subroutines.

2008-05-20  Mark Rowe  <mrowe@apple.com>

        Fix "make x86_64" by adding x86_64 target to WebKitTools Makefile.

        * Makefile:

=== End merge of squirrelfish ===

2008-04-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - added support for --ubench mode

        * Scripts/run-sunspider:

2008-03-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        --squirrelfish mode: pared down tests for squirrelfish to chew on.

        * Scripts/run-sunspider:

=== Start merge of squirrelfish ===

2008-05-21  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Added another exception.

2008-05-19  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Adam.

        Explicitly set run mode to 32bit unless overridden to avoid
        confusion when running tests

        * Scripts/build-dumprendertree:
        * Scripts/gdb-safari:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-05-16  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Steve.

        Print out pending unload event count. Also print out main frame name to match Mac.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (descriptionSuitableForTestResult):
        (FrameLoadDelegate::didFinishDocumentLoadForFrame):

2008-05-16  Timothy Hatcher  <timothy@apple.com>

        Remove the Drosera project, code and resources since it has been
        replaced with the Web Inspector's debugger. Removes references to
        Drosera in various scripts and makefiles.

        Rubber-stamped by Mark Rowe.

        * BuildSlaveSupport/build-launcher-app:
        * Drosera/DebuggerDocument.cpp: Removed.
        * Drosera/DebuggerDocument.h: Removed.
        * Drosera/Drosera.icns: Removed.
        * Drosera/DroseraWin.make: Removed.
        * Drosera/English.lproj/Debugger.nib/classes.nib: Removed.
        * Drosera/English.lproj/Debugger.nib/info.nib: Removed.
        * Drosera/English.lproj/Debugger.nib/keyedobjects.nib: Removed.
        * Drosera/English.lproj/MainMenu.nib/classes.nib: Removed.
        * Drosera/English.lproj/MainMenu.nib/info.nib: Removed.
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib: Removed.
        * Drosera/ForwardingHeaders/wtf/Assertions.h: Removed.
        * Drosera/ForwardingHeaders/wtf/HashTraits.h: Removed.
        * Drosera/ForwardingHeaders/wtf/Noncopyable.h: Removed.
        * Drosera/ForwardingHeaders/wtf/OwnPtr.h: Removed.
        * Drosera/ForwardingHeaders/wtf/Platform.h: Removed.
        * Drosera/ForwardingHeaders/wtf/RetainPtr.h: Removed.
        * Drosera/Images/Drosera.ico: Removed.
        * Drosera/Images/SourceArrow.png: Removed.
        * Drosera/Images/SourceArrowBlank.png: Removed.
        * Drosera/Images/SourceArrowOpen.png: Removed.
        * Drosera/Images/background_stripe.png: Removed.
        * Drosera/Images/breakPoint.tif: Removed.
        * Drosera/Images/breakPointDisabled.tif: Removed.
        * Drosera/Images/breakpointeditor.png: Removed.
        * Drosera/Images/close.tif: Removed.
        * Drosera/Images/close_active.tif: Removed.
        * Drosera/Images/close_hover.tif: Removed.
        * Drosera/Images/console.png: Removed.
        * Drosera/Images/continue.tif: Removed.
        * Drosera/Images/fileIcon.jpg: Removed.
        * Drosera/Images/finishFunction.tif: Removed.
        * Drosera/Images/glossyFooterFill.tif: Removed.
        * Drosera/Images/glossyHeader.png: Removed.
        * Drosera/Images/glossyHeaderPressed.png: Removed.
        * Drosera/Images/gradientBackground.png: Removed.
        * Drosera/Images/gutter.png: Removed.
        * Drosera/Images/navLeftDisabled.png: Removed.
        * Drosera/Images/navLeftNormal.png: Removed.
        * Drosera/Images/navLeftPressed.png: Removed.
        * Drosera/Images/navRightDisabled.png: Removed.
        * Drosera/Images/navRightNormal.png: Removed.
        * Drosera/Images/navRightPressed.png: Removed.
        * Drosera/Images/pause.tif: Removed.
        * Drosera/Images/popUpArrows.png: Removed.
        * Drosera/Images/programCounter.tif: Removed.
        * Drosera/Images/programCounterBreakPoint.tif: Removed.
        * Drosera/Images/programCounterBreakPointDisabled.tif: Removed.
        * Drosera/Images/run.tif: Removed.
        * Drosera/Images/siteCollapsed.tif: Removed.
        * Drosera/Images/siteExpanded.tif: Removed.
        * Drosera/Images/siteIcon.tif: Removed.
        * Drosera/Images/small.ico: Removed.
        * Drosera/Images/splitterBar.tif: Removed.
        * Drosera/Images/splitterDimple.tif: Removed.
        * Drosera/Images/step.tif: Removed.
        * Drosera/Images/stepOut.tif: Removed.
        * Drosera/Images/stepOver.tif: Removed.
        * Drosera/Images/stop.tif: Removed.
        * Drosera/Images/toolbarBackground.png: Removed.
        * Drosera/Images/verticalSplitterBar.tiff: Removed.
        * Drosera/Images/verticalSplitterDimple.tiff: Removed.
        * Drosera/Makefile: Removed.
        * Drosera/breakpointEditor.html: Removed.
        * Drosera/config.h: Removed.
        * Drosera/console.css: Removed.
        * Drosera/console.html: Removed.
        * Drosera/console.js: Removed.
        * Drosera/debugger.css: Removed.
        * Drosera/debugger.html: Removed.
        * Drosera/debugger.js: Removed.
        * Drosera/mac/DebuggerApplication.h: Removed.
        * Drosera/mac/DebuggerApplication.mm: Removed.
        * Drosera/mac/DebuggerClient.h: Removed.
        * Drosera/mac/DebuggerClient.mm: Removed.
        * Drosera/mac/DebuggerDocumentPlatform.mm: Removed.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj: Removed.
        * Drosera/mac/Info.plist: Removed.
        * Drosera/mac/LauncherInfo.plist: Removed.
        * Drosera/mac/Makefile: Removed.
        * Drosera/mac/ServerConnection.h: Removed.
        * Drosera/mac/ServerConnection.mm: Removed.
        * Drosera/mac/launcher.m: Removed.
        * Drosera/mac/main.m: Removed.
        * Drosera/viewer.css: Removed.
        * Drosera/viewer.html: Removed.
        * Drosera/win/BaseDelegate.h: Removed.
        * Drosera/win/DebuggerClient.cpp: Removed.
        * Drosera/win/DebuggerClient.h: Removed.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Removed.
        * Drosera/win/Drosera.cpp: Removed.
        * Drosera/win/Drosera.h: Removed.
        * Drosera/win/Drosera.vcproj/Drosera.rc: Removed.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Removed.
        * Drosera/win/DroseraPrefix.cpp: Removed.
        * Drosera/win/DroseraPrefix.h: Removed.
        * Drosera/win/Info.plist: Removed.
        * Drosera/win/ServerConnection.cpp: Removed.
        * Drosera/win/ServerConnection.h: Removed.
        * Drosera/win/resource.h: Removed.
        * Makefile:
        * Scripts/build-drosera: Removed.
        * Scripts/gdb-drosera: Removed.
        * Scripts/run-drosera: Removed.
        * Scripts/run-drosera-nightly.cmd: Removed.
        * Scripts/run-drosera.cmd: Removed.
        * Scripts/webkitdirs.pm:

2008-05-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Anders.

        Dump the unload count for a frame after parsing is finished.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):

2008-05-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=10707
        DumpRenderTree should not be able to access non-local resources

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        Block them, and complain.

2008-05-15  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Update the version of libpng to download and instsall.

        * wx/install-unix-extras:

2008-05-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        - isDarwin() and isCygwin() returned an empty string if the platform equality check fails.
          We now force the return value to be numeric.

        - Removed platform checks as it was a work around the previous issue.

        - Replaced isDarwin() by isOSX() as they have now the same behaviour.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2008-05-12  Adam Roben  <aroben@apple.com>

        Support for testing NPN_PostURL

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (toCString): Added this helper function.
        (testPostURLFile): Added. Writes the passed-in content to the
        passed-in file and calls NPN_PostURL with the passed-in URL and
        target.
        (pluginInvoke): Added a case for testPostURLFile.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (followShortcuts): Changed to allow paths that don't yet exist.

2008-05-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Minor cleanup of the DRT Xcode project.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:  Use GCC_OPTIMIZATION_LEVEL rather than
        OPTIMIZATION_CFLAGS.  Don't include Info.plist in the "Copy Bundle Resources" build phase as it does
        not need to be there.

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add support for testing application caches.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        Empty the cache.

        (resetWebViewToConsistentStateBeforeTesting):
        Turn on support for the application cache.

2008-05-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Update TestNetscapePlugIn to build 64-bit using the Cocoa event model.

        It currently does not attempt to print events which means that plugins/mouse-events.html
        will fail when run 64-bit.  All other tests that use this plugin pass.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testGetIntIdentifier):
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_HandleEvent):

2008-05-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        Explicitly call shutDownWebKit() before quitting.

        * Drosera/win/Drosera.cpp:
        (_tWinMain):

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2008-05-09  Mark Rowe  <mrowe@apple.com>

        Fix the Tiger build of Drosera.

        * Drosera/config.h: Define BUILDING_ON_TIGER when building on Tiger.

2008-05-09  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Mark Rowe.

        Remove the ENABLE_CROSS_DOCUMENT_MESSAGING #ifdefs.

        * Scripts/build-webkit:

2008-05-08  Mark Rowe  <mrowe@apple.com>

        Another attempt at a Tiger build fix.

        Use DumpRenderTreeMac.h rather than DumpRenderTree.h as DumpRenderTreePasteboard is not an Obj-C++ file.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:

2008-05-08  Mark Rowe  <mrowe@apple.com>

        Tiger build fix.  Include DumpRenderTree.h so that BUILDING_ON_TIGER will be defined.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:

2008-05-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt and Dan Bernstein.

        Update DumpRenderTree to build 64-bit.

        The three major changes here are:
        1) Use NSInteger in the appropriate places.
        2) Use ColorSync API that is available in 64-bit to switch display profiles.
        3) Use method-swizzling to achieve similar results to class posing when using the Obj-C 2.0 runtime.

        The build of DumpRenderTree will still fail in 64-bit for now as the TestNetscapePlugIn target also
        needs updated to successfully build.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Don't prevent Xcode from building 64-bit.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (swizzleAllMethods):
        (poseAsClass):
        (prepareConsistentTestingEnvironment):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (restoreColorSpace):
        (failedGettingCurrentProfile):
        (setDefaultColorProfileToRGB):

2008-05-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Clean up Drosera so that it will build 64-bit.

        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication numberOfRowsInTableView:]): Use NSInteger rather than int.
        (-[DebuggerApplication tableView:objectValueForTableColumn:row:]): Ditto.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj: Use the default value for VALID_ARCHS.

2008-05-07  David Kilzer  <ddkilzer@apple.com>

        Use File::Find and Getopt::Long in make-js-test-wrappers

        Reviewed by Darin Adler.

        * Scripts/make-js-test-wrappers:
        - Updated Apple copyright statement.
        - Added command-line switch parsing and -h|--help switch.
        - Allowed user to pass list of files/directories on which to do
          a restricted search for TEMPLATE.html files.  The default
          behavior is still to search the entire LayoutTests directory.
        - Removed duplicate 'use strict' statement.
        - Replaced use of `find` statements with File::Find::find().
        - Remove unneeded chomp() calls now that we use File::Find.
        (directoryFilter): Added.  Filters .svn directories when used
        with File::Find::find().
        (findTemplateFiles): Added.  Returns a list of TEMPLATE.html
        files found.

2008-05-05  Steve Falkenburg  <sfalken@apple.com>

        Copy dependencies of ImageDiff, DumpRenderTree in post-build step.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:

2008-05-05  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Look for the right ImageDiff executable for debug builds.

        * Scripts/run-webkit-tests:

2008-05-05  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Ignore a Java leak showing up in the WebKit
        leak tests.

2008-05-05  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        In the Qt's DumpRenderTree, adjust the web view properly (because W3C SVG
        tests expect to be 480x360)

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):

2008-05-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - add an option to svn-apply to set the reviewer name in change logs

        * Scripts/svn-apply: Added a [-r|--reviewer name] option.

2008-05-01  David Kilzer  <ddkilzer@apple.com>

        Clean up configuration usage in run-webkit-tests

        Reviewed by Adam.

        * Scripts/run-webkit-tests: Parse configuration switches using
        passedConfiguration() from webkitdirs.pm like every other script.
        Note that we must still call setConfiguration() afterwards in
        case the --configuration switch was used.  Use $configurationOption
        when running build-dumprendertree instead of recreating the switch.

2008-04-29  Adam Roben  <aroben@apple.com>

        Restore the beloved COMPtr::operator&

2008-04-29  Adam Roben  <aroben@apple.com>

        Windows build fixes

        Replace COMPtr::operator& with COMPtr::adoptionPointer.

2008-04-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Fix run-webkit-tests --threading
        and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
        Proxy server issue in Sunday's Nightly

        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp:
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        Spawned threads were immediately detached, unlike the original ones, so joining them
        made no sense. Now, all threads are created detached, and stopJavaScriptThreads() just
        waits for them all to exit.

2008-04-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Reset dumping resource load callbacks to false for the next test


        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Adapt to the latest API changes in WebKit/qt/Api.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/jsobjects.cpp:

2008-04-26  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Delete the DerivedSources after make clean has been done so that the DerivedSources
        don't get re-created. Also, use the proper extension for the Win wxPython extension.

        https://bugs.webkit.org/show_bug.cgi?id=18756

        * wx/build-wxwebkit:

2008-04-26  Adam Barth <hk9565@gmail.com>

        Reviewed by Adam Roben and Sam Weinig.

        Updates LayoutTestController to use host instead of domain.

        Collin Jackson <collinj-webkit@collinjackson.com> also contributed to this patch.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setDatabaseQuota):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]):

2008-04-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Need the latest libpng. (Somehow my initial test passed without it.)

        * wx/install-unix-extras:

2008-04-26  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Allow the user to set the path to SWIG using an environment variable.

        https://bugs.webkit.org/show_bug.cgi?id=18660

        * wx/build-wxwebkit:

2008-04-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Download the latest libpng version for building the
        dependencies.

        * wx/install-unix-extras:

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Implement dumping of resource load callbacks to pass http/tests/xmlhttprequest/abort-should-cancel-load.html

        Similar to Editing and Frameloading we do the dumping within WebCore


        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::dumpResourceLoadCallbacks):
        * DumpRenderTree/qt/jsobjects.h:

2008-04-24  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Maciej Stachowiak.

        http://bugs.webkit.org/show_bug.cgi?id=18485
        Typo and documentation fix for build-webkit

        * Scripts/build-webkit:

2008-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Don't call fprintf from the signal handler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (crashHandler):

2008-04-23  Adam Roben  <aroben@apple.com>

        Make crashes be reported as crashes, not hangs

        Reviewed by David Kilzer.

        * Scripts/run-webkit-tests:
        (top level): Use the new status field of the output from
        readFromDumpToolWithTimer to determine if the test crashed or hung.
        (sub readFromDumpToolWithTimer):
          - If we fail to read a line and $! is not EAGAIN, then we've crashed
            and should not try to read any more.
          - Changed the timedout field to a more general status field.

2008-04-22  David Kilzer  <ddkilzer@apple.com>

        Bug 18683: update-webkit returns 0 even if it fails

        <https://bugs.webkit.org/show_bug.cgi?id=18683>

        Reviewed by Mitz Pettel.

        * Scripts/update-webkit:
        (runSvnUpdate): Die if close() fails.

2008-04-21  Adam Roben  <aroben@apple.com>

        Flush stdout/stderr after printing every #EOF separator

        This fixes a hang when running the pixel tests on Windows

        Reviewed by Mitz Pettel.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (main): We don't have to flush stdout/stderr in the arguments loop
        anymore, as runTest flushes for us.

2008-04-21  Adam Roben  <aroben@apple.com>

        Fix pixel tests

        * Scripts/run-webkit-tests:
        (sub readFromDumpToolWithTimer): Use readline instead of read to
        ensure that we don't read past the #EOF marker.

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Build fix for Qt 4.3

        * When building WebCore/internal make sure the QT_[BEGIN,END]_NAMESPACE is
        always defined. Do this by adding defines to the compiler line

        * DumpRenderTree/qt/DumpRenderTree.pro:

2008-04-19  Mike Hommey  <glandium@debian.org>

        Reviewed by Alp Toker.

        Don't build GtkLauncher and DumpRenderTree with rpath.

        * GNUmakefile.am:

2008-04-18  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16620
        [GTK] Autotools make dist and make check support

        Cleanups.

        * GNUmakefile.am:

2008-04-18  Adam Roben  <aroben@apple.com>

        Drop the hang timer to 30 seconds

        This matches what DRT/mac was using.

        Reviewed by Mitz Pettel.

        * Scripts/run-webkit-tests:

2008-04-18  Adam Roben  <aroben@apple.com>

        Get rid of DRT's Watchdog

        run-webkit-tests now detects hangs and samples DRT as needed.

        Reviewed by Mitz Pettel.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Removed
        Watchdog* files from the project.
        * DumpRenderTree/Watchdog.cpp: Removed.
        * DumpRenderTree/Watchdog.h: Removed.
        * DumpRenderTree/mac/DumpRenderTree.mm: Removed uses of Watchdog
        (dumpRenderTree):
        (runTest):
        * DumpRenderTree/mac/WatchdogMac.h: Removed.
        * DumpRenderTree/mac/WatchdogMac.mm: Removed.
        * Scripts/run-webkit-tests:
        (sub testCrashedOrTimedOut): Call sampleDumpTool() if we timed out.
        (sub sampleDumpTool): Added. Writes a sample report to
        ~/Library/Logs/DumpRenderTree/HangReport.txt.

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Adapt to the API changes in WebKit/qt

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dumpFramesAsText):
        (WebCore::DumpRenderTree::dump):

2008-04-17  Adam Roben  <aroben@apple.com>

        Fix many tests on Windows

        * Scripts/run-webkit-tests:
        (readFromDumpToolWithTimer):
         - Use read instead of sysread to ensure that we don't interfere with
           other uses of buffered IO in this script.
        (setFileHandleNonBlocking): Actually set the filehandle to blocking
        when specified.

2008-04-17  Adam Roben  <aroben@apple.com>

        Fix ~10 tests

        * Scripts/run-webkit-tests: Only remove the newline after #EOF, not
        whatever newline happens to be at the end of what we've read.

2008-04-17  Adam Roben  <aroben@apple.com>

        Remove DRT/win's hang timer

        run-webkit-tests takes care of this for us now

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DumpRenderTree.cpp:

2008-04-17  Adam Roben  <aroben@apple.com>

        Don't wait for the hang timer twice in the case of a hang

        Previously we'd wait for a hang while reading both stdout and stderr
        from DRT. Now we'll only wait for one or the other.

        Reviewed by Anders Carlsson.

        * Scripts/run-webkit-tests:
        (top level): Don't wait for stderr to time out if stdout already timed
        out.
        (readFromDumpToolWithTimer): If $dontWaitForTimeOut is true, quit
        after the first read that returns no data.

2008-04-17  Adam Roben  <aroben@apple.com>

        Don't throw away the output from timed out tests

        Reviewed by Anders Carlsson.

        * Scripts/run-webkit-tests:
        (top level): Updated for changes to readFromDumpToolWithTimer.
        (readFromDumpToolWithTimer): Return a hash that contains both the
        output and whether or not the test timed out.

2008-04-17  Adam Roben  <aroben@apple.com>

        Make the hang timer 60 seconds

        * Scripts/run-webkit-tests:

2008-04-17  Adam Roben  <aroben@apple.com>

        Get rid of carriage returns in DRT/win's stderr

        Reviewed by Eric Seidel.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): Mark stderr as binary like we already do for stdout.

2008-04-17  Adam Roben  <aroben@apple.com>

        Fix Bug 17678: run-webkit-tests should have a watchdog timer (and
        timeout long tests)

        <https://bugs.webkit.org/show_bug.cgi?id=17678>

        We now abort tests that take longer than 60 seconds to produce output.
        This matches the watchdog timer in DRT/mac and DRT/win (which we can
        now remove).

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (top level): Read DRT's output using the new readFromDumpToolWithTimer
        subroutine. If readFromDumpToolWithTimer returns undefined it means
        the test timed out, so we register the test as a hang and move on.
        (sub testCrashedOrTimedOut): Renamed from testCrashed. Now handles
        both crashed and timed out tests. If the test timed out, we kill DRT
        before returning.
        (sub linksForTimedOutTest): Added. We don't have any output to link to for
        tests that timed out.
        (sub recordActualResultsAndDiff): Don't call length on undefined.
        (sub readFromDumpToolWithTimer): Added. Performs non-blocking reads
        from a filehandle until an #EOF is reached or
        $maximumSecondsWithoutOutput have elapsed.
        (sub setFileHandleNonBlocking): Marks a filehandle as blocking or
        non-blocking.

2008-04-17  Adam Roben  <aroben@apple.com>

        Refactor test results page generation

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (sub htmlForResultsSection): Added. Takes a set of tests, a
        description, and a subroutine to generate the links for each test, and
        creates a HTML string containing a table of the tests and their
        links.
        (sub linksForExpectedAndActualResults): Added. Replaces the
        htmlForExpectedAndActualResults subroutine.
        (sub linksForMismatchTest): Added.
        (sub linksForCrashOrErrorTest): Added.
        (sub linksForNewTest): Added.

2008-04-17  Adam Roben  <aroben@apple.com>

        Print the extension for all tests in the test results page

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:

2008-04-17  Adam Roben  <aroben@apple.com>

        Move code that counts finished tests into a subroutine

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (sub countFinishedTest): Added.

2008-04-17  Adam Roben  <aroben@apple.com>

        Move code that handles a crash into a subroutine

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (sub testCrashed): Added.

2008-04-17  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Rename RenderView to RenderViewport in the next rename patch.

        * Scripts/do-webcore-rename:

2008-04-17  Mario Bensi  <mbensi@pleyo.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18543
        DumpRenderTree gtk freeze

        fix DumpRenderTree gtk freeze

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump):

2008-04-15  Anders Carlsson  <andersca@apple.com>

        Add missing ;

        * Scripts/build-webkit:

2008-04-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES.

        * Scripts/build-webkit:

2008-04-15  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt namespaces

        Qt can be configured to have all of its classes inside a specified namespaces.
        This is for example used in plugin/component environments like Eclipse.

        This change makes it possible to let the Qt port compile against a namespaced
        Qt by the use of macros Qt provides to properly forward declare Qt classes in
        the namespace.

        * DumpRenderTree/qt/DumpRenderTree.h:

2008-04-08  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Add a script that propagates any file changes made to the Bakefiles
        over to GTK and Qt build systems. Still needs to be wired into
        those ports though.

        * Scripts/update-sources-list.py: Added.

2008-04-08  Mark Rowe  <mrowe@apple.com>

        Clean up after Brady.

        * DumpRenderTree/mac/DumpRenderTree.mm: Add an include so that NSInteger can be found.

2008-04-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitzpettel

        Fixed http://bugs.webkit.org/show_bug.cgi?id=18302
        -WebArchive subresources dump in random order, intermittent failures

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (compareResourceURLs): Sorting function based on the resource URLs
        (serializeWebArchiveToXML): Sort the subresource array

2008-04-07  Brady Eidson  <beidson@apple.com>

        OMG, BUILD - please!

        * Scripts/build-webkit:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Enable running http tests for Qt again. Failing tests can be put into the skipped list.
        * Running these tests on windows and other platforms might need some work.

        * Scripts/run-webkit-tests:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * For the http tests we need the output of the FrameLoaderClient. The QtWebKit API
        is not exporting enough to create the output in DRT itself. Settle with the approach
        Lars has taken for the Editing support and add branches to our FrameLoaderClient code.
        * run-webkit-tests http/tests(/loading) can now be executed.
        * For tests in loading/ directories we are going to throw away the dirty
        QWebPage to start with something clean.


        * DumpRenderTree/qt/DumpRenderTree.cpp:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Treat http and https as special URLs as well. Change the main.cpp and
        DumpRenderTree.cpp to handle http and https URIs as input.
        * I'm not doing the clean up and merging of these two checks now.


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):
        * DumpRenderTree/qt/main.cpp:
        (main):

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Remove dumpFrameLoadCallbacks from simple-subframe.html because it is
        located in a directory with the name "loading". And this will autoamtically
        enable dumping.
        * Remove this method from the LayoutTestController as it is unused now and this
        avoids adding it to the DRT of the Qt port.


        * DumpRenderTree/LayoutTestController.cpp:
        (setPrivateBrowsingEnabledCallback):

2008-04-01  Christian Dywan  <christian@imendio.com>

        Build fix for GCC 4.3.

        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: include string.h

2008-04-01  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix Qt DRT run by also printing EOF on stderr, as expected by
        run-webkit-tests.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::dump):

2008-03-31  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Darin Adler.

        Bug 17665: determineSourceDir() dies if $sourceDir has a trailing backslash

        Remove trailing '/' in $sourceDir in determineSourceDir().

        Fix suggested by Dmitriy Kazachkov.

        * Scripts/webkitdirs.pm:

2008-03-29  Adam Roben  <aroben@apple.com>

        Update for rename of an IWebViewPrivate method

        Reviewed by Mitz Pettel.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (createWebViewAndOffscreenWindow):

2008-03-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Anders.

        Enable SVG animation support by default.

        * Scripts/build-webkit:

2008-03-25  Adam Roben  <aroben@apple.com>

        Windows build fix

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        Add $(WebKitLibrariesDir)\include to the include path so we can find
        stdint.h there.

2008-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark.

        Clean up SVG features message to be less confusing.

        * Scripts/build-webkit:

2008-03-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Add EventSender.zoomPageIn/zoomPageOut support to DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (-[EventSendingController zoomPageIn]):
        (-[EventSendingController zoomPageOut]):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/EventSender.cpp:
        (textZoomInCallback):
        (textZoomOutCallback):
        (zoomPageInCallback):
        (zoomPageOutCallback):

2008-03-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - update bisect-builds for Safari 3.1

        * Scripts/bisect-builds: Added Safari 3.1 and the corresponding minimal
        revision, r29711.

2008-03-21  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Holger.

        http://bugs.webkit.org/show_bug.cgi?id=17981

        Add webcore and javascriptcore cppflags to programs' _CPPFLAGS.

        * GNUmakefile.am:

2008-03-21  Adam Roben  <aroben@apple.com>

        Remove a non-working mirror from cygwin-downloader and add the ruby package

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip: Updated.

2008-03-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Ensure that the defines generated for FEATURE_DEFINES are sorted so that they will match the default settings of each project.
        This will prevent the world from being rebuilt if you happen to switch between building in Xcode and with build-webkit on the
        command-line.

        * Scripts/build-webkit:

2008-03-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Dan Bernstein.

        Fix bogus argCount check breaking plugin test.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:

2008-03-17  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Cleanup PluginObject.cpp and add support for testing
        converting from int -> identifier -> string
        and from string -> identifier -> int
        as well as round-tripping ints and stings through identifiers

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginGetProperty):
        (pluginSetProperty):
        (testDOMAccess):
        (stringVariantToIdentifier):
        (int32VariantToIdentifier):
        (doubleVariantToIdentifier):
        (variantToIdentifier):
        (testIdentifierToString):
        (testIdentifierToInt):
        (testCallback):
        (getURL):
        (removeDefaultMethod):
        (getURLNotify):
        (testInvokeDefault):
        (destroyStream):
        (testEnumerate):
        (testGetIntIdentifier):
        (testGetProperty):
        (testEvaluate):
        (testGetPropertyReturnValue):
        (pluginInvoke):
        (pluginInvokeDefault):
        (pluginInvalidate):
        (pluginAllocate):
        (pluginDeallocate):
        (handleCallback):

2008-03-16  Kevin Ollivier  <kevino@theolliviers.com>

        Rubber stamped by Darin Adler.

        Add set-webkit-configuration support for wx port, and centralize
        build dir location setting.

        http://bugs.webkit.org/show_bug.cgi?id=17790

        * wx/browser/browser.bkl:
        * wx/build-wxwebkit:

2008-03-15  Darin Adler  <darin@apple.com>

        * Scripts/commit-log-editor: Include the name line of the change log entry.
        A long time ago I designed this script to not include the name because I
        thought it was redundant (same as the name of the person checking in), but
        nowadays it's more common for someone to check something in done by someone
        else.

        * Scripts/do-webcore-rename: Added some more planned renames and removed
        some that were already done "by hand".

2008-03-13  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin Adler.

        Correct paths to vsprops files so they use the environment
        variable, rather than hard-coded path.
        http://bugs.webkit.org/show_bug.cgi?id=17797.

        * WinLauncher/WinLauncher.vcproj:  Correct paths to vsprops.

2008-03-12  Steve Falkenburg  <sfalken@apple.com>

        VSExpress build fix

        * WinLauncher/WinLauncher.vcproj:

2008-03-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        Run testkjs in the correct productsDir in the GTK+ port.

        * Scripts/run-javascriptcore-tests:

2008-03-11  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Enabled WinLauncher as part of normal Windows build.
        http://bugs.webkit.org/show_bug.cgi?id=17715.

        * WinLauncher/WinLauncher.vcproj: Update to use vsprops so that
          it can find the proper libraries to link against.

2008-03-10  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed and landed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=17581
        Bug 17581: Use of uninitialized value in string ne at WebKitTools/Scripts/run-webkit-tests line 1576.

        Remove the previous warning which occurs when the --random option is used.

        * Scripts/run-webkit-tests: verify that $component[0] is defined before checking for
        its inequality

2008-03-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Darin Adler.

        Done with Lars.

        Ported the netscape test plugin to QWebPluginFactory.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/qt/main.cpp:
        * DumpRenderTree/qt/testplugin.cpp:
        (TestPlugin::plugins):
        (TestPlugin::create):
        * DumpRenderTree/qt/testplugin.h:

2008-03-09  Steve Falkenburg  <sfalken@apple.com>

        Stop Windows build if an error occurs in a prior project.

        Rubber stamped by Darin Adler.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2008-03-08  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Mark Rowe.

        DRT build fix for Tiger.

        * DumpRenderTree/mac/DumpRenderTreeMac.h: Define BUILDING_ON_TIGER.

2008-03-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Fix WebKit build with GCC 4.2.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm: Use correct argument type in method signature.

2008-03-07  Stephanie Lewis <slewis@apple.com>

        Reviewed by Oliver.

        Add Windows part of <rdar://problem/5693690>

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (main):

2008-03-07  Alp Toker  <alp@atoker.com>

        Back out the r30818, r30819 build fix attempts now the GTK+ build
        server has been upgraded.

        * Scripts/webkitdirs.pm:

2008-03-07  Stephanie Lewis <slewis@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5693690> run-webkit-tests swallows STDERR output, including WebCore LEAK messages

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): push EOF to stderr after every test
        * Scripts/run-webkit-tests: collect stderr output and print it

2008-03-07  Steve Falkenburg  <sfalken@apple.com>

        Get pdevenv working with Visual Studio Express.

        Reviewed by Adam.

        * Scripts/pdevenv:

2008-03-06  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Updated for testing <rdar://problem/5785895> Implement hasFocus() for HTMLDocument (HTML5)

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webViewFocus:]): Remove duplicate code that was also in LayoutTestController::setWindowIsKey
        (-[UIDelegate webViewUnfocus:]): Added.  In Safari, the default is to focus another window if there is one.
         To easily test cases where the window is unfocused, I made this just call setWindowIsKey(false).

2008-03-06  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Adam Roben.

        Bug 17691: REGRESSION: FindSafari doesn't work
        http://bugs.webkit.org/show_bug.cgi?id=17691

        Swap my change from r30394 to use the Release libraries instead of Debug
        since some machines don't have the Debug version.

        * FindSafari/FindSafari.vcproj:

2008-03-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam and Tim.

        <rdar://5631450> Drosera: breakpoint indicators disappear after the
        script is finished running.
        - If there is a pre-existing breakpoint on a line when the file is
        updated we need to redraw it.

        * Drosera/debugger.js:

2008-03-06  Brady Eidson  <beidson@apple.com>

        Tiger build fix...?

        * DumpRenderTree/mac/WatchdogMac.mm:

2008-03-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Added a cross-platform Watchdog thread to DRT.

        The current watchdog in both DRTWin and DRTMac is Timer based.  Therefore, deadlocks and long running
        main thread hangs still affect DRT.

        By placing the watchdog on a thread and having DRT "check in" after each test, long-running hangs
        and true deadlocks can be caught.

        There is one hook for platform specific code.  As I did my development and testing on Mac, and Mac has
        `sample` available, the Mac implementation of this hook samples the process before it is killed.

        I arbitrarily chose 30 seconds as the timeout for now - this can be tweaked easily if we find a need.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Added LINKER_DISPLAYS_MANGLED_NAMES

        * DumpRenderTree/ForwardingHeaders/wtf/Locker.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Threading.h: Added.

        * DumpRenderTree/Watchdog.cpp: Added.
        (Watchdog::Watchdog):
        (Watchdog::~Watchdog):
        (Watchdog::start):
        (Watchdog::stop):
        (Watchdog::checkIn):
        (Watchdog::setWatchdogInterval):
        (Watchdog::handleHang):
        (Watchdog::watchdogThreadStart):
        (Watchdog::watchdogThread):
        * DumpRenderTree/Watchdog.h: Added.

        * DumpRenderTree/mac/WatchdogMac.h: Added.
        * DumpRenderTree/mac/WatchdogMac.mm: Added.
        (WatchdogMac::handleHang): Sample the process and write it out to a file

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Setup and start the watchdog before running any tests
        (runTest): Checkin with the watchdog after each test

2008-03-05  Alp Toker  <alp@atoker.com>

        Attempt to get the autotools build working again on the bot with
        build-webkit.

        Force the use of /bin/bash since we seem to have bash-isms in the
        configure script right now.

        * Scripts/webkitdirs.pm:

2008-03-05  Alp Toker  <alp@atoker.com>

        Re-attempt to switch to the autotools build system for GTK+.

        Change scripts to continue when distclean fails.

        * Scripts/webkitdirs.pm:

2008-03-05  Alp Toker  <alp@atoker.com>

        Force qmake for the GTK+ build until we get the build bot to succeed
        with autotools (currently dies at make distclean)

        * Scripts/webkitdirs.pm:

2008-03-04  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Switch the default GTK+ build system from qmake to autotools.

        qmake can still be used by defining WEBKIT_BUILD_SYSTEM=qmake

        * Scripts/build-webkit:
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        * Scripts/do-webcore-rename: Update renaming plan.

2008-03-02  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alp Toker.

        Remove some needless LIBS.

        * GNUmakefile.am:

2008-03-02  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Split the WebKit GTK+ build out of the WebCore build and change the
        shared object name to match the package name.

        * GNUmakefile.am:

2008-03-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Update Xcode configuration to support building debug and release from the mysterious future.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2008-02-29  David Kilzer  <ddkilzer@apple.com>

        Pass the correct configuration switch (--Debug|--Release) to build-testkjs.

        Reviewed by Dan.

        Originally broken in r26838.

        * Scripts/run-javascriptcore-tests: Push configuration switch onto @xcodeArgs
        not local, unused @args variable.

2008-02-29  David Kilzer  <ddkilzer@apple.com>

        Bug 15754: webarchive layout tests fail when WebKit directory path contains symlinks

        <http://bugs.webkit.org/show_bug.cgi?id=15754>

        Reviewed by Geoff and Darin.

        We were using -[NSFileManager currentDirectoryPath] to get the current working directory,
        then removing that path from all file:/// URLs in the WebArchive output so these tests
        would pass no matter where they were run.

        The problem was that -[NSFileManager currentDirectoryPath] resolves symlinks in the
        current working directory, but the WebArchive does not.  This left the current working
        directory in all file:/// URLs in the test output, and thus all tests failed, for any
        developer that used symlinks to get to their WebKit source directory.

        The fix is to look backwards for "/LayoutTests/" in the URL we're passed, and simply
        remove the current working directory path (no matter what it is) after "file://" but
        before "/LayoutTests/".

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (normalizeWebResourceURL): Removed unused oldURLBase argument.  We now replace the
        current working directory as described above.
        (convertWebResourceResponseToDictionary): Remove unused oldURLBase argument.  Update
        calls to normalizeWebResourceURL().
        (serializeWebArchiveToXML): Removed now unused cwdURL variable.  Update calls to
        normalizeWebResourceURL() and convertWebResourceResponseToDictionary().

2008-02-26  Robin Dunn <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Improvements to the wx build script.

        http://bugs.webkit.org/show_bug.cgi?id=17492

        * wx/build-wxwebkit:
        - Update the Windows dll copying logic to copy dlls inside WebKitLibraries/win
        - Allow the build script to properly find wxPython includes under different setups
        - Make sure WX_PREFIX is set to WXWIN (wxWindows dir environment var.) if not defined

2008-02-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        * Scripts/build-webkit: Add --universal and --64-bit flags to make building
        64-bit architectures easy. Combine the two flags to build 4-way universal.
        * Makefile: Add "64" and "64u" make rules. Fix the universal rule to return
        non-zero when the build failes.

2008-02-26  Jessica Kahn  <jess@apple.com>

        Reviewed by Darin Adler.

        * Scripts/gdb-safari: Set WEBKIT_UNSET_DYLD_FRAMEWORK_PATH in gdb's environment,
        so that Safari inherits it when launched. Preexisting code in WebKit checks this
        environment variable, and if set, unsets DYLD_FRAMEWORK_PATH, so that applications
        launched by Safari continue to use the standard system WebKit.

2008-02-25  Adam Roben  <aroben@apple.com>

        Fix run-webkit-tests after r30394

        * Scripts/webkitdirs.pm: Never append _debug to FindSafari's
        executable name.

2008-02-24  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Make some updates based on a trial run of
        the renaming script.

2008-02-24  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming plans.

2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Rubber stamped by Darin Adler.

        Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup
        whitespaces introduced in the previous commit.

        * GNUmakefile.am:

2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Rubber-stamped by Darin Adler.

        * GNUmakefile.am: Add both GLOBALDEPS and WEBKITDEPS instead of DEPENDENCIES.

2008-02-23  David Kilzer  <ddkilzer@apple.com>

        Please clarify licensing for some files
        <http://bugs.webkit.org/show_bug.cgi?id=14970>

        Reviewed by Darin Adler.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Added
        copyright statement.  Replaced license with newer Apple BSD-style license.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Ditto.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp: Ditto.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h: Ditto.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp: Ditto.
        * DumpRenderTree/win/TestNetscapePlugin/main.c: Ditto.
        * mangleme/LICENSE: Added (LGPL).

2008-02-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5748781>
        https://bugs.webkit.org/show_bug.cgi?id=17413
        REGRESSION: Latest Nightly doesn't load Java plugin w/Safari 3.1b

        Copy the Java plug-in over to the new location.

        * FindSafari/FindSafari.cpp:
        (_tmain):

2008-02-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5747325> REGRESSION: HTTP layout tests hang

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        Init the URL request with the correct timeout.

2008-02-21  Mike Auty  <mike.auty@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17445
        [GTK] WebKit doesn't compile with LDFLAGS="-Wl,--as-needed"

        GTK+/autotools build system improvements

        The GNUmakefile.am files make use of the LDFLAGS variable to include library
        additions such as -ljpeg etc.  Unfortunately, if these inclusions aren't made
        in LIBADD/LDADD variables, then they are mis-ordered during the linking.

        The as-needed flag discards libraries whose functions have not been needed by
        earlier libraries, which therefore makes the ordering important.

        This moves all -l library inclusion statements from LDFLAGS variables to
        LIBADD/LDADD variables.

        * GNUmakefile.am:

2008-02-20  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alp.

        - http://bugs.webkit.org/show_bug.cgi?id=17428
          Reenable a Windows-based launcher

        This patch reenables the venerable Spinneret application,
        changing its name to match the other lanch applications.

        * WinLauncher: Added.
        * WinLauncher/WinLauncher.cpp: Added.
        (WinLauncherWebHost::updateAddressBar):
        (WinLauncherWebHost::QueryInterface):
        (WinLauncherWebHost::AddRef):
        (WinLauncherWebHost::Release):
        (resizeSubViews):
        (_tWinMain):
        (MyRegisterClass):
        (InitInstance):
        (WndProc):
        (MyEditProc):
        (About):
        (loadURL):
        * WinLauncher/WinLauncher.h: Added.
        (WinLauncherWebHost::WinLauncherWebHost):
        (WinLauncherWebHost::didStartProvisionalLoadForFrame):
        (WinLauncherWebHost::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WinLauncherWebHost::didFailProvisionalLoadWithError):
        (WinLauncherWebHost::didCommitLoadForFrame):
        (WinLauncherWebHost::didReceiveTitle):
        (WinLauncherWebHost::didReceiveIcon):
        (WinLauncherWebHost::didFinishLoadForFrame):
        (WinLauncherWebHost::didFailLoadWithError):
        (WinLauncherWebHost::didChangeLocationWithinPageForFrame):
        (WinLauncherWebHost::willPerformClientRedirectToURL):
        (WinLauncherWebHost::didCancelClientRedirectForFrame):
        (WinLauncherWebHost::willCloseFrame):
        (WinLauncherWebHost::windowScriptObjectAvailable):
        * WinLauncher/WinLauncher.ico: Added.
        * WinLauncher/WinLauncher.rc: Added.
        * WinLauncher/WinLauncher.vcproj: Added.
        * WinLauncher/resource.h: Added.
        * WinLauncher/small.ico: Added.
        * WinLauncher/stdafx.cpp: Added.
        * WinLauncher/stdafx.h: Added.

2008-02-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff

        Fixed a bug in DRT --threaded mode

        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp:
        (startJavaScriptThreads): Don't detach the newly created thread.  The later call to stopJavaScriptThreads() tries
          to pthread_join() each thread that had been created, but you can't join a detached thread!

2008-02-18  Brady Eidson  <beidson@apple.com>

        Changes by Geoff Garen, Reviewed by Darin

        Fix for <rdar://5747529> - ObjC Exception can cause JSLock to never be released

        DRT changes for test: platform/mac/plugins/webScriptObject-exception-deadlock.html

        [WebScriptObject valueForKey:] might throw an exception, and previously might have "leaked" the global JSLock
        This test calls valueForKey, then runs some arbitrary Javascript on a 2ndary thread.  If the lock has leaked,
        this series of method calls will deadlock.  If things are good, it will complete successfully.

        * DumpRenderTree/mac/ObjCController.m:
        (runJavaScriptThread):
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController testValueForKey]):

2008-02-18  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Adam.

        Remove FindSafari's Release configuration.

        * FindSafari/FindSafari.vcproj:

2008-02-15  Adam Roben  <aroben@apple.com>

        Fix a typo that broke the Mac build

        Reviewed by Mark.

        * Scripts/build-webkit:

2008-02-14  Adam Roben  <aroben@apple.com>

        Turn on cross-document messaging support by default

        Reviewed by Darin Adler.

        * Scripts/build-webkit:

2008-02-14  Adam Roben  <aroben@apple.com>

        Conditionalize cross-document messaging support

        The cross-document messaging parts of HTML 5 are in flux and we want
        ports to be able to turn off the support as needed.

        Note that the support is turned off by default right now. A subsequent
        commit will turn it on by default.

        Reviewed by Darin Adler.

        * Scripts/build-webkit:

2008-02-14  Darin Adler  <darin@apple.com>

       - fix Windows build

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::setStatusText): Update parameter types to match declaration.

2008-02-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff G and Weinig.

        Add ability for DRT to report tests setting the status text.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpStatusCallbacksCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:setStatusText:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:

2008-02-13  Adam Roben  <aroben@apple.com>

        Windows build fix

        * DumpRenderTree/ForwardingHeaders/wtf/MathExtras.h: Added.

2008-02-13  Adam Roben  <aroben@apple.com>

        Windows/GTK+ build fix

        * DumpRenderTree/LayoutTestController.cpp: #include MathExtras.h to
        get isnan.

2008-02-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Add some much needed Database support to DRT

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpDatabaseCallbacksCallback): Flag to control if the UIDelegate methods related to
          databases are called
        (clearAllDatabasesCallback): Allow a test to delete all databases
        (setDatabaseQuotaCallback): Allow a test to set the quota new origins will get
        (LayoutTestController::staticFunctions):

        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpDatabaseCallbacks):
        (LayoutTestController::setDumpDatabaseCallbacks):

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::setDatabaseQuota):

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::clearAllDatabases): Stubbed out
        (LayoutTestController::setDatabaseQuota): Ditto
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::clearAllDatabases): Stubbed out with error message
        (LayoutTestController::setDatabaseQuota): Ditto

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): Print a
          message with details about the event then return a 5mb quota like before


2008-02-12  Steve Falkenburg  <sfalken@apple.com>

        Changes to support merged MIDL output.

        All COM interfaces are now generated to WebKit.h.

        Reviewed by Sam, Ada.

        * Drosera/win/BaseDelegate.h:
        * Drosera/win/DebuggerClient.cpp:
        * Drosera/win/DebuggerDocumentPlatform.cpp:
        * Drosera/win/Drosera.cpp:
        * Drosera/win/ServerConnection.cpp:
        * Drosera/win/ServerConnection.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/GCControllerWin.cpp:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * DumpRenderTree/win/WorkQueueItemWin.cpp:

2008-02-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix a memory leak

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (getDifferenceBitmap): Use a static CFMutableData instead of allocating
        and leaking the buffer each time.

2008-02-07  Adam Roben  <aroben@apple.com>

        Fix error in bisect-builds when responding "broken" for the first
        build

        Reviewed by Dave Kilzer.

        * Scripts/bisect-builds: Only try to test the build if the nightly
        info for the current index has not been deleted.

2008-02-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fixed two minor typos in the --root option, to get it working.

        * Scripts/run-sunspider:
            1. Actually assign the function argument to our local variable.
            2. Actually set the $root variable, so we don't try to build later.

2008-02-05  Oliver Hunt  <oliver@apple.com>

        RS=Eric.

        Re-enable foreignObject by default as it is needed for a number of non-fO
        related SVG tests and none of the old known crashes occur anymore.

        * Scripts/build-webkit:

2008-02-05  Steve Falkenburg  <sfalken@apple.com>

        Build fix.  Don't override intermediate directory.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2008-02-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix for Windows. willCloseFrame is a pure virtual and we are
        forced to have an implementation.

        This partially reverts r30014.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::willCloseFrame):
        * DumpRenderTree/win/FrameLoadDelegate.h:

2008-02-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Holger.

        Don't build wrapper for SVGTestCase.js (special file for svg/dynamic-updates)

        * Scripts/make-js-test-wrappers:

2008-02-05  Holger Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        In http://bugs.webkit.org/show_bug.cgi?id=16853 it was identified that the
        the output of the willCloseFrame and didClearWindowObject FrameLoadDelegate
        depends on the order the tests are executed.

        Propose to remove willCloseFrame and didlCearWindowObject output from the
        FrameLoadDelegate and update the test results. The output of didClearWindowObject
        is not interesting for any of the current tests and we have other ways to find
        out if a frame was closed or not.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didClearWindowObject):
        * DumpRenderTree/win/FrameLoadDelegate.h:

2008-02-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Workaround for http://bugs.webkit.org/show_bug.cgi?id=16842
        Bug 16842: Hang in DRT in leaks mode due to signal handler doing unsafe things

        Don't install the signal handler unless we are running the pixel tests.
        It is currently only used to restore the color profile, but by catching
        signals we can trigger a deadlock in DRT while running leak tests.
        The deadlock is tracked by http://bugs.webkit.org/show_bug.cgi?id=16842,
        and a more complete fix will need to be developed to address this for
        pixel tests as well.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):

2008-02-04  Mark Rowe  <mrowe@apple.com>

       Gtk qmake build fix.

        * Scripts/webkitdirs.pm:  Fix perl's complaint about an odd number of elements in anonymous hash.

2008-02-04  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker and Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16618
        [GTK] build-webkit and run-webkit-tests autootools support

        * Scripts/build-webkit: added --database and --icon-database options
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-02-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve F.

        Partial fix for <rdar://5621244> Drag & Drop doesn't work correctly in DRT

        Implement required DRT functionality to allow majority of Drag and Drop testcases to work.
        Issues include:
          * Uses Sleep() to implement leapForward reliably.
          * 3 DND tests still fail for reasons that i have not yet determined
          * Has to explicitly ignore an extraneous WM_MOUSELEAVE that i am at a loss to explain

        * DumpRenderTree/win/EventSender.cpp:
        (leapForwardCallback):
        (mouseDownCallback):
        (doMouseUp):
        (mouseUpCallback):
        (doMouseMove):
        (mouseMoveToCallback):
          Minor updates to these functions to handle the different message queue structure.

        (replaySavedEvents):
          More complicated now.  Where possible we just use the old while-loop model of execution,
          but when leapForward has been used we have to jump through some hoops and set up an
          inner event loop so that we can ensure messages get the correct time stamp.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::doDragDrop):
          Call replaySavedEvents directly to force synchronous handling of drag and drop.

2008-02-04  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Alp Toker and Mark Rowe.

        Fix http://bugs.webkit.org/show_bug.cgi?id=17175.
        Bug 17175: Use of C++ compiler flags in CFLAGS

        * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS.

2008-02-04  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        * Scripts/make-js-test-wrappers: Look at the whole LayoutTests tree, not just the fast
        and svg subdirectories. Added some more exceptions for the benefit of the fast/dom
        subdirectory.

2008-02-04  Adam Roben  <aroben@apple.com>

        Windows Apple-only build fix

        * DumpRenderTree/win/DumpRenderTree.vcproj: Added a new include
        directory.

2008-02-04  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove all trailing whitespace in the GTK+ port and related
        components.

        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/GCControllerGtk.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * GNUmakefile.am:

2008-02-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Also search LayoutTests/svg for js-based tests.

        * Scripts/make-js-test-wrappers:

2008-01-31  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=17006
        [GTK] Header path should be webkit/webkit.h

        Move the GTK+ API sources as needed and update the build systems.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        * GNUmakefile.am:
        * GtkLauncher/main.c:

2008-01-30  Stephanie  <slewis@apple.com>

        Reviewed by Geoff.

        Add an option to run-webkit-tests to merge leaks results and print the number of unique leaks found under a certain call depth.  This should make it easier for the buildbots to track new leaks.

        * Scripts/run-webkit-tests:

2008-01-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        One more debug (external) fix.

        * DumpRenderTree/win/DumpRenderTree.cpp: TestNetscapePlugin is built with a _debug suffix in both DebugInternal
        and Debug configurations.

2008-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig. Sam Weinig.

        Fixed <rdar://problem/5692566> fast/encoding/mailto-always-utf-8.html
        fails when run after fast/dom/Window/window-property-shadowing.html (16902)

        Modified our policy delegates not to output window.name. Since a
        previous test may have explicitly set window.name, we can't rely on its
        implicit value in test results.

        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):

        * DumpRenderTree/win/PolicyDelegate.cpp:
        (PolicyDelegate::decidePolicyForNavigationAction):

2008-01-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/5600926> WebCore on Tiger must link to its own copy of SQLite 3.4 or newer (so HTML database behavior will be correct).

        * Scripts/build-webkit: Copy SQLite static library and headers into the build directory.

2008-01-29  David Kilzer  <ddkilzer@apple.com>

        Refactor ChangeLog path code

        Reviewed by Adam.

        * Scripts/prepare-ChangeLog: Simplify code in one foreach() loop, and extract
        duplicate code in another foreach() loop.

2008-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5710692> All storage tests fail/crash

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): Set an
        arbitrary quota of 5 megabytes.

        (-[UIDelegate webView:frame:quotaForSecurityOrigin:toCreateDatabase:withEstimatedSize:]):
        (-[UIDelegate webView:frame:quotaForSecurityOrigin:fromProposedQuota:database:]):
        Removed unused (I think) code.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::QueryInterface): IWebUIDelegatePrivate3 is now supported.
        (UIDelegate::webViewPainted): A stub implementation.
        (UIDelegate::exceededDatabaseQuota): Set an arbitrary quota of 5 megabytes.
        * DumpRenderTree/win/UIDelegate.h:

2008-01-27  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        GTK+ DRT build fix for breakage introduced in r29822.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setPersistentUserStyleSheetLocation):
        (LayoutTestController::clearPersistentUserStyleSheet):

2008-01-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - add support for directory prologues and epilogues to run-webkit-tests
        - allow setting a persistent user style sheet in DumpRenderTree
        - activate the WebKit Layout Tests font in Windows DumpRenderTree

        * DumpRenderTree/LayoutTestController.cpp:
        (clearPersistentUserStyleSheetCallback): Added.
        (setPersistentUserStyleSheetLocationCallback): Added.
        (LayoutTestController::staticFunctions): Added.
        clearPersistentUserStyleSheet and setPersistentUserStyleSheet.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setPersistentUserStyleSheetLocation): Added.
        (resetWebViewToConsistentStateBeforeTesting): Added the user style sheet
        to the set of things this function resets. Now it either disables the
        user style sheet or sets it to the persistent user style sheet and
        enables it.
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setPersistentUserStyleSheetLocation): Added.
        (LayoutTestController::clearPersistentUserStyleSheet): Added.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setPersistentUserStyleSheetLocation): Added.
        (initialize): Added the WebKit Layout Tests font to the set of fonts to
        install.
        (resetWebViewToConsistentStateBeforeTesting): See DumpRenderTree.mm.
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPersistentUserStyleSheetLocation): Added.
        (LayoutTestController::clearPersistentUserStyleSheet): Added.
        * Scripts/run-webkit-tests: Changed to look for, and if found process in
        DumpRenderTree, files named run-webkit-tests-prologue.html and
        run-webkit-tests-epilogue.html in the resources subdirectory of any
        test directory and platform test results directory. The prologues are
        processed before the first test from the directory (and its
        subdirectories) is run, and the epilogues are processed after the last
        test from the directory is run. Platform-specific prologues and
        epilogues are processed in order of specificity.

2008-01-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mark Rowe.

        <rdar://problem/5699933> http/tests/security/cross-frame-access-get.html is still failing

        * DumpRenderTree/win/DumpRenderTree.cpp: (main): Clear HTTP cache to ensure consistent test environment
        (matching Mac DRT).
        * DumpRenderTree/win/DumpRenderTree.vcproj: Link to CFNetwork.

2008-01-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Ada Chan.

        Fix for <rdar://5131975> DumpRenderTree doesn't support undo/redo

        - Adds simplified UndoManager to windows DRT to allow testing the
          undo/redo code paths in WebCore and WebKit.  This is a temporary
          solution to an issue that should eventually be solved by having a
          shared UndoManager in WebKit.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoObject::DRTUndoObject):
        (DRTUndoObject::invoke):
        (DRTUndoStack::~DRTUndoStack):
        (DRTUndoStack::isEmpty):
        (DRTUndoStack::clear):
        (DRTUndoStack::push):
        (DRTUndoStack::pop):
        (DRTUndoManager::canRedo):
        (DRTUndoManager::canUndo):
        (DRTUndoManager::DRTUndoManager):
        (DRTUndoManager::removeAllActions):
        (DRTUndoManager::registerUndoWithTarget):
        (DRTUndoManager::redo):
        (DRTUndoManager::undo):
        (UIDelegate::UIDelegate):
        (UIDelegate::resetUndoManager):
        (UIDelegate::registerUndoWithTarget):
        (UIDelegate::removeAllActionsWithTarget):
        (UIDelegate::setActionTitle):
        (UIDelegate::undo):
        (UIDelegate::redo):
        (UIDelegate::canUndo):
        (UIDelegate::canRedo):
        * DumpRenderTree/win/UIDelegate.h:

2008-01-23  Adam Roben  <aroben@apple.com>

        Allow directories containing ChangeLogs to be passed to
        resolve-ChangeLogs

        Reviewed by David Kilzer.

        * Scripts/resolve-ChangeLogs:
        (sub findChangeLog): Return a ChangeLog contained within the specified
        directory if one exists.

2008-01-23  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5698732> Copyright strings should include 2008

        Reviewed by Sam.

        * Drosera/win/Drosera.vcproj/Drosera.rc:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc:

2008-01-23  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove whitespace after -I in automake include lists.

        * GNUmakefile.am:

2008-01-23  Michael Goddard <michael.goddard@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Reworked the JavaScriptCore Qt bindings:

        * Update JS DRT controller for Qt JS binding changes.
        There were two functions that needed some changes
        so that the layout tests would work, so this makes
        a few tests pass again.

        * Bump the timeout for layout tests up to 11s.
        At least some tests have an internal timeout of
        10 seconds, so make the waitUntilDone approach
        wait at least 11s.  fast/dom/open-and-close-by-DOM.html
        is one of these - now the failure message is more
        accurate.


        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::waitUntilDone):
        * DumpRenderTree/qt/jsobjects.h:

2008-01-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Adam.

        <rdar://problem/5688975>
        div element on microsoft site has wrong left offset.

        Add new method for testing the return vale of NPN_GetProperty.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2008-01-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        <rdar://problem/5670257> editing/selection/4895428-3.html makes editing/selection/5131716-2.html fail

        * DumpRenderTree/win/EventSender.cpp: (makeEventSender): Reset static variables for a new test.

2008-01-21  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16955
        Get errors when cross-compile webkit-gtk

        * GNUmakefile.am: Removed ICU_CFLAGS

2008-01-21  Darin Adler  <darin@apple.com>

        Reviewed by Mitz and Adam.

        * Scripts/svn-create-patch: Sort ChangeLog files first. Also slightly improved the
        sorting speed by doing all sort criteria in a single pass instead of three sorts.

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix focus chain handling and cycling through focusable objects (links) using tab/backtab.

        * Fix GraphicsContext::drawFocusRing to also draw single focus rects.
        * Implemented QWebPage::focusNextPrevChild by sending fake tab/shift-tab events
        and make the return value depend on whether we successfully determined a focusable
        node or not.
        * Changed QWebView::focusNextPrevChild() to call the base QWidget implementation correctly
        if we could not handle the focus chain ourselves.
        * Changed the focus policy of QWebView to correctly use WheelFocus instead of ClickFocus.
        * Made ChromeClientQt::canTakeFocus() and takeFocus() dummy method since they are only
        used to control the situation of stepping out of the focus chain inside the page.
        * Made inclusion of links in the focus chain configurable through QWebSettings::LinksIncludedInFocusChain.
        The layout tests expect this to be disabled but for the user it seems sensible to have it
        on by default, hence the default in qwebsettings.cpp


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):

2008-01-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Allow the --http flag to run-webkit-tests to override
        the default behaviour of disabling HTTP tests for Qt,
        Gtk and Wx.

        * Scripts/run-webkit-tests:

2008-01-19  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/5695344> check-for-global-initializers script never checks any object files

        Reviewed by Darin Adler.

        We now touch a check-for-global-initializers.timestamp file in
        the TARGET_TEMP_DIR directory to determine when new object files
        have been compiled and thus need to be checked.  If the timestamp
        file doesn't exist, all object files will be checked.

        Previously the modification time of the "executable" (the
        framework binary, e.g., WebKit.framework/WebKit) was used, but
        since this was the last file modified at the end of the compile
        phase, no object files would ever get checked!

        Also added JSCustomSQLTransactionCallback.o to the list of files
        since it has static initializers in Debug builds of WebCore.

        * Scripts/check-for-global-initializers:

2008-01-18  Adam Roben  <aroben@apple.com>

        Build fix

        * Scripts/build-webkit:

2008-01-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Update build-webkit to account for foreign-object being disabled by
        default.

        * Scripts/build-webkit:

2008-01-18  Adam Roben  <aroben@apple.com>

        Updated for method renames

        Reviewed by Adele.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setWindowIsKey):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webViewFocus:]):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didCommitLoadForFrame):

2008-01-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Fix plugin-related tests in Debug_Internal configuration, which are failing because of CRT version mismatch
        between DRT and TestNetscapePlugin.

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj: Added a Debug_Internal configuration.
        * DumpRenderTree/DumpRenderTree.sln: Use this configuration.

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix fast/dom/Window/window-resize.html

        In DRT connect the page's geometryChangeRequest signal to a slot that
        sets the geometry of the view widget.


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::setViewGeometry):
        (WebCore::WebPage::WebPage):

2008-01-17  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * Drosera/DroseraWin.make:

2008-01-17  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Fixed a bug number.

2008-01-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16908
        run-webkit-tests complains about missing FindSafari.exe

        * Scripts/webkitdirs.pm: Append _debug as appropriate.

2008-01-17  Steve Falkenburg  <sfalken@apple.com>

        Re-add DEBUG_WEBKIT_HAS_SUFFIX.

        Rubber-stamped by Jon Honeycutt.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2008-01-16  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16218
        [GTK] API: Should this entry point be called go_back rather than go_backward?

        Track back/forward API changes in the tools.

        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (BackForwardItem::invoke):
        * GtkLauncher/main.c:
        (go_back_cb):

2008-01-16  Adam Roben  <aroben@apple.com>

        Windows build fix after r29488

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        Build into a subdirectory of $WebKitOutputDir\bin to match where DRT
        expects to find the plugin.

2008-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed the waitUntilDone watchdog timer -- the old code never added the
        timer to the run loop, so it didn't do anything.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setWaitToDump):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWaitToDump):

2008-01-14  Steve Falkenburg  <sfalken@apple.com>

        Use shared vsprops for most vcproj properties.

        Reviewed by Darin Adler.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * FindSafari/FindSafari.vcproj:

2008-01-14  Stephanie  <slewis@apple.com>

       Reviewed by NOBODY.

       revert accidental character.

       * Scripts/run-webkit-tests:

2008-01-14  Stephanie  <slewis@apple.com>

        RS=Oliver

        add Quicktime PPC only leaks to Leopard exclude list. See <rdar://problem/5667132>

        * Scripts/run-webkit-tests:

2008-01-14  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Queue up another rename.

2008-01-14  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Darin Adler.

        * Allow to run the tests in reverse order to spot test cases where the result depends on the order
        the tests were ran.
        * This is from http://bugs.webkit.org/show_bug.cgi?id=16869

        * Scripts/run-webkit-tests:

2008-01-14  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Darin Adler.

        * Randomize tests array to spot test cases where the results depends on the order
        the tests are ran.
        * This is from http://bugs.webkit.org/show_bug.cgi?id=16869

        * Scripts/run-webkit-tests:

2008-01-14  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: More ignore list tweaking.

2008-01-14  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Add another leak to the ignore list.

2008-01-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - try to fix failure in fast/dom/Window/window-onFocus.html seen on the
          build bots

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting): Focus the web view.

2008-01-13  Steve Falkenburg  <sfalken@apple.com>

        Share common files across projects.

        Unify vsprops files
        Debug:          common.vsprops, debug.vsprops
        Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
        Release:        common.vsprops, release.vsprops

        Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
        debug_internal.vsprops will be mostly empty except for file path prefix modifiers.

        Pull auto-version.sh, VERSION, and PRODUCTVERSION from tools.

        Reviewed by Adam Roben.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * Drosera/win/Drosera.vcproj/PRODUCTVERSION: Removed.
        * Drosera/win/Drosera.vcproj/VERSION: Removed.
        * Drosera/win/Drosera.vcproj/auto-version.sh: Removed.
        * Drosera/win/Drosera.vcproj/debug.vsprops: Removed.
        * Drosera/win/Drosera.vcproj/debug_internal.vsprops: Removed.
        * Drosera/win/Drosera.vcproj/release.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/debug.vsprops: Removed.
        * DumpRenderTree/win/debug_internal.vsprops: Removed.
        * DumpRenderTree/win/release.vsprops: Removed.

2008-01-13  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=16314
          Script to launch Drosera

        * Scripts/gdb-drosera: Added.
        * Scripts/run-drosera: Added.
        * Scripts/run-drosera-nightly.cmd: Added.
        * Scripts/webkitdirs.pm: Added runDrosera function.

2008-01-13  Dan Bernstein  <mitz@apple.com>

        - fix breakage due to last-minute change

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Declare the loop variable.

2008-01-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix <rdar://problem/5132009> Windows DRT does not support multiple windows

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (DumpRenderTreeWndProc):
        (initialize):
        (dumpBackForwardList):
        (dumpBackForwardListForAllWindows):
        (dump):
        (resetWebViewToConsistentStateBeforeTesting): Factored out of
        runTest().
        (runTest):
        (allWindows): Added. Returns a vector of all open windows.
        (windowToWebViewMap): Added. Returns a map from open windows to their
        WebViews.
        (createWebViewAndOffscreenWindow): Factored out of main() to be
        reusable for creating extra windows.
        (main):
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::windowCount): Implemented.
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::createWebViewWithRequest): Implemented.
        (UIDelegate::webViewClose): Implemented.
        * DumpRenderTree/win/UIDelegate.h:

2008-01-12  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Hide non-public symbols in GTK+/autotools release builds.

        * GNUmakefile.am:

2008-01-12  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Ap.

        * Make launching of the WebKit httpd work on GNU/Debian/Linux

        The configuration of Apache2 and installation does not depend on
        the kernel but on the distribution policy. Make launching of httpd
        work for Debian derived distributions.

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2008-01-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix crash in http/tests/security/local-JavaScript-from-remote.html under guard malloc.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Retain string before returning it to
        match the callers expectations that it can take ownership of the string.

2008-01-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        <rdar://problem/5667275> fast/dynamic/layer-hit-test-crash.html is failing

        * DumpRenderTree/win/DumpRenderTree.cpp: (runTest): Ignore WM_MOUSELEAVE events,
        as these are only posted because the test window is not a normal visible one, and
        they confuse drag&drop machinery.

2008-01-11  Adam Roben  <aroben@apple.com>

        Fix a crash when pathToLocalResource fails and a leak

        Reviewed by Darin Adler.

        * DumpRenderTree/LayoutTestController.cpp:
        (pathToLocalResourceCallback): Dont leak the JSStringRef, and make
        sure not to pass null to JSValueMakeString.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pathToLocalResource): Print an error message if
        the conversion fails so it's clear what happened.

2008-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John Sullivan.

        * DumpRenderTree/mac/GCControllerMac.mm:
        (GCController::collectOnAlternateThread): Updated for name change.

2008-01-10  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Don't build dftables any longer since it's now a Perl
        script.

        * wx/build-wxwebkit:

2008-01-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Make DRT track open windows instead of allocated windows so that
        we can avoid ASSERTION due to late deallocs out of our control.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpBackForwardListForAllWindows):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (+[DumpRenderTreeWindow openWindows]):
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow close]):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::windowCount):

2008-01-10  Ada Chan  <adachan@apple.com>

        Meta key is not the same as Alt key on windows.

        Reviewed by Darin Adler.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2008-01-09  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin, Sam and Adam.

        -<rdar://problem/5654486> REGRESSION (Safari 3.0.4-TOT): clicking on
        link in gmail message displays JavaScript alert falsely complaining
        about pop-up blocking.
        - Added the ability to enable the pop-up blocker via the
        LayoutTestController.

        * DumpRenderTree/LayoutTestController.cpp:
        (setPopupBlockingEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setPopupBlockingEnabled):

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        rename QWebPageHistory to QWebHistory.


        * DumpRenderTree/qt/jsobjects.cpp:

2008-01-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - add some more renames, adjust some

        * Scripts/do-webcore-rename:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Enable SVG Fonts support by default.

        * Scripts/build-webkit:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Adam.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16244
        DRT doesn't handle platform specific pixel test results correctly.

        <test>-expected.txt files and <test>-expected.png files may now live
        in different directories (ie. a cross-platform <test>-expected.txt file
        and a platform-specific <test>-expected.png file).

        * Scripts/run-webkit-tests:

2008-01-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - <rdar://problem/5666914> fast/regex/test{1,4}.html are failing
        DRT did not correctly handle printing the '\0' char.  Now it does.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dump):

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Ported of the network backend of the Qt platform to Qt 4.4's new networking API.


        * DumpRenderTree/qt/main.cpp:
        * DumpRenderTree/qt/testplugin.cpp:
        * DumpRenderTree/qt/testplugin.h:

2008-01-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Fix hang in fast/frames/frame-display-none-focus.html during Gtk layout tests.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (processWork): Process pending work.
        (webViewLoadFinished): Schedule processing of pending work.
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: Use webkit_web_frame_reload.

2008-01-05  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more renaming plans.

2008-01-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Alexey and Darin.

        Adding "home" and "end" to DRT's keydown since
        DOM key events can't handle keyIdentifiers at this point.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix DRT after the changes to QWebPage.

        The great thing is that we actually don't have
        any regressions from the QWebPage change :)


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make QWebPage a QObject and get things to compile.

        Nothing works currently though.


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        take a QString as identifier in QWebFrame::addToJSWindowObject.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::initJSObjects):

2008-01-04  Alp Toker  <alp@atoker.com>

        GTK+ DRT build fix for breakage introduced in r29149.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::execCommand):

2008-01-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5463489> A number of layout tests should be using execCommand instead of textInputController

        Added layoutTestController.execCommand to access editor commands that are not available
        via document.execCommand.

        * DumpRenderTree/LayoutTestController.cpp:
        (execCommandCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::execCommand):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::queueLoad):
        (LayoutTestController::execCommand):

2008-01-03  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin, Mitz.

        fixed <rdar://5130762> mousedowns in different locations increase the clickcount incorrectly

        the clickcount should not increase if the last click was at a different location.  it's a new click.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):

2008-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * Scripts/update-webkit: Make this work a little better for the people at Apple
        who have a directory named Internal.

2008-01-03  Adam Roben  <aroben@apple.com>

        Use HTTP::Date instead of Date::Parse because it's installed by Cygwin by default

        Rubberstamped by Mark.

        * Scripts/update-webkit-auxiliary-libs:

2008-01-03  Adam Roben  <aroben@apple.com>

        Fix Bug 15663: update-webkit re-downloads WebKitAuxiliaryLibrary unnecessarily

        http://bugs.webkit.org/show_bug.cgi?id=15663

        Added a fuzz factor into the Last-Modified comparison for downloading
        WebKitAuxiliaryLibrary.zip.

        The zip file is served from a set of mirrors who give Last-Modified
        times that are off by 1-3 seconds from each other. This was causing
        the build bots to redownload WebKitAuxiliaryLibrary for every build,
        which would then cause all of WebCore to rebuild each time.

        Reviewed by Mark.

        * Scripts/update-webkit-auxiliary-libs: Check if the new zip file is
        at least 30 seconds newer than the old one -- otherwise we assume that
        the difference in time is due to the mirrors being slightly offset
        from each other.
        (sub lastModifiedToUnixTime): Added.

2008-01-03  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * DumpRenderTree/ForwardingHeaders/wtf/HashTraits.h: Added (needed by COMPtr.h).

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Moved QWebPage::open to QWebFrame::load and added setHtml.


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added the first revision of QWebView and started moving functionality from QWebPave over to QWebView and QWebFrame.


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2008-01-02  Sam Weinig  <sam@webkit.org>

        * Scripts/do-webcore-rename: Yet more renaming ideas.

2008-01-02  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming ideas. (Maciej, please merge yours with mine.)

2008-01-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        fixing assertion hit with editing/selection/move-begin-end.html

        * DumpRenderTree/ForwardingHeaders/wtf/ASCIICType.h: Added.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        using isupper will cause an assertion for inputs outside of ascii range. use isASCIIUpper instead.

2008-01-02  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more name change plans.

2008-01-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Added handling for page up and page down in EventSender

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2008-01-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Fix fast/events/arrow-keys-on-body.html for real.

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Pass proper keyData for WM_KEYUP, too.

2008-01-02  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=16674
        [GTK] run-launcher sets wrong LD_LIBRARY_PATH

        * Scripts/run-launcher:

2007-12-31  Darin Adler  <darin@apple.com>

        Suggested by Antti.

        * Scripts/webkitdirs.pm: Turned off the QuickTime requirement for Windows until
        we get it installed on the build bots.

2007-12-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * Scripts/do-webcore-rename: Add a few more planned renames s/(\w+)Imp/\1/

2007-12-29  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16663
          leak bot shows createCStringFromNPVariant result leaking

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke): Added a missing free.

2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16390
        Use autotools or GNU make as the build system for the GTK port

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: include glib.h
        * GNUmakefile.am: Added.

2007-12-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver.

        Fix fast/events/arrow-keys-on-body.html, failing on Windows.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Add KF_EXTENDED flag to arrow keys. Also add a count
        of 1, even though WebKit currently ignores it.

2007-12-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx buildbot fix. Update libpng dl script to the latest version.

        * wx/install-unix-extras:

2007-12-22  Antti Koivisto  <antti@apple.com>

        Fix a typo.

        * Scripts/webkitdirs.pm:

2007-12-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        - Disable the back/forward cache using the new WebPreferences API
          instead of through the BackForwardList.  This makes us match what
          we do on Windows.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (setDefaultsToConsistentValuesForTesting):

2007-12-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - disable the back/forward cache in Windows DumpRenderTree. It is
          already disabled in Mac DumpRenderTree.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initializePreferences):

2007-12-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin and Steve.

        - check for QuickTime SDK on Windows.
        - build media support on Windows by default

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2007-12-21  Kevin Ollivier  <kevino@theolliviers.com>

        Build script fix for buildbot.

        * wx/build-wxwebkit:

2007-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        * Scripts/run-sunspider: change --runs default to 10 for better accuracy

2007-12-20  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Steve.

        - <rdar://5656485> Drosera: Win: Nightly does not reliably connect to
        WebKit.

        - Drosera and Safari need to use the same ProgIDs in order for
        CoCreateInstance to work properly.  The most robust way to do this is
        for WebKit to dynamically publish those ProgIDs.

        * Drosera/win/DebuggerClient.cpp: Use the published ProgIDs
        (DebuggerClient::createWebViewWithRequest):
        * Drosera/win/Drosera.cpp: Use the published ProgIDs and rename some
        statics.
        (Drosera::initUI):
        (Drosera::attach):
        (Drosera::attemptToCreateServerConnection):
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Fix a runtime failure.
        * Drosera/win/ServerConnection.cpp: Reformat the connection function and
        make use of the published ProgIDs.
        (ServerConnection::attemptToCreateServerConnection):

2007-12-20  Kevin McCullough  <kmccullough@apple.com>

        - <rdar://problem/5658317> REGRESSION: 20+ leaks seen on buildbots.
        - Build bot and leak fix.

        * DumpRenderTree/LayoutTestController.cpp:
        (pathToLocalResourceCallback):

2007-12-19  David Kilzer  <ddkilzer@apple.com>

        Make svn-apply/svn-unapply work with patches from git-format-patch.

        Reviewed by Darin Adler.

        * Scripts/svn-apply:
        (patch): If 'Index:' can't be found in the text passed in, print it
        out with a warning and return early.
        * Scripts/svn-unapply:
        (patch): Ditto.

2007-12-18  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Alp Toker.

        Build related fixes.

        * wx/build-wxwebkit:
        - Check to make sure the user is running a supported wx port
        - More robust checks for Cygwin
        - Only run install-unix-extras on Mac, it's not the right solution
          for Linux distros.
        - Remove outdated Linux instructions after successful build
        - Clean Bakefile-generated files during a clean operation

2007-12-18  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Don't generate a wrapper for select-options-remove.js.

2007-12-18  Steve Falkenburg  <sfalken@apple.com>

        Add script to run Drosera as part of the nightly.

        Reviewed by Kevin M.

        * Scripts/run-drosera.cmd: Added.

2007-12-18  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Remove a stray K.

2007-12-18  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Plan more renaming.

2007-12-14  Juan A. Suarez Romero  <jasuarez@igalia.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16042
        [GTK] Eliminate webkit_init()

        Moving webkit initialization to WebView class init.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main):
        * GtkLauncher/main.c:
        (main):

2007-12-17  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=13542
        gdklauncher doesnt change URL in adress GTKEntry.

        * GtkLauncher/main.c:
        (load_commit_cb): added
        (title_change_cb):
        (create_browser):

2007-12-16  Dimitri Glazkov  <dimitri@glazkov.com>

        Reviewed by Adam Roben.

        Remove the double-quotes around the PATH variable value, in order to make it work in Windows shell.

        * FindSafari/FindSafari.cpp:
        (_tmain):

2007-12-16  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16315
        FindSafari needs a path-only option.

        * FindSafari/FindSafari.cpp:
        (_tmain):

2007-12-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=16462
        REGRESSION: access keys broken on Windows

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Send system key events
        if Alt is pressed.

2007-12-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix urlSuitableForTestResult to correctly identify wstring::npos as
        the case when wstring.find doesn't find anything.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult):

2007-12-15  Alp Toker  <alp@atoker.com>

        GTK+ DRT build fix for GLib < 2.14.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setWaitToDump):

2007-12-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Add a watchdog timer to Gtk DumpRenderTree, and implement alert/prompt/confirm.  This prevents
        many layout tests from hanging while waiting on user responses to dialogs.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (webViewScriptAlert):
        (webViewScriptPrompt):
        (webViewScriptConfirm):
        (main):
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (waitToDumpWatchdogFired):
        (LayoutTestController::setWaitToDump):

2007-12-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Flesh out DumpRenderTree for Gtk.  After these changes, the majority of the tests in fast/js pass.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpFramesAsText): Don't print the frame name when dumping the main frame as text.
        (dump):
        (runTest):
        (webViewLoadStarted): Store the top frame when it starts loading so we can use it to determine when to dump.
        (webViewLoadFinished): Dump when the top frame load completes if we're not waiting for a JS callback and the
        work queue is empty.
        (webViewWindowObjectCleared): Set up window.layoutTestController.
        (webViewConsoleMessage): Match the console message format expected by the layout test results.
        (main): Hook up the new signals.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Only notify done if the top frame has completed loading to avoid
        dumping multiple times.
        * Scripts/build-dumprendertree: Ensure build-dumprendertree is a no-op for Gtk too.
        * Scripts/run-webkit-tests: Teach run-webkit-tests that Gtk is like Qt in many ways.  Use run-launcher to open test results.

2007-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Assert that a web frame that's loading a resource always has either a data source or
        a provisional data source.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):

2007-12-14  Darin Adler  <darin@apple.com>

        - fix mistake causing nearly all tests to fail on Windows

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole): Need to compare the result of find with
        npos, not 0. Also pass URL in to URL function rather than passing the entire message.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:]): Pass path only to path function rather
        than passing the entire message.

2007-12-14  Darin Adler  <darin@apple.com>

        - fix Tiger build

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:]): Re-implement this without using any
        new-to-Leopard methods.

2007-12-14  Darin Adler  <darin@apple.com>

        * DumpRenderTree/mac/FrameLoadDelegate.mm: Don't implement didReceiveIcon delegate method
        since it now triggers unwanted icon loading. We only had it because we implemented "all"
        delegate methods here.

2007-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Geoff.

        <rdar://problem/5619295>
        REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)

        Add property getting methods to the plug-in.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2007-12-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Layout test fix for mac. When dumped to the console local file paths
        now only show the name of the resource not the whole path.  This is to
        make the results machine and OS independent.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:]):

2007-12-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Layout tests fix.  We need a way to remove machine-dependent
        information from paths in layout test results. The UIDelegate now does
        this.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult):
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole):

2007-12-13  Alp Toker  <alp@atoker.com>

        Build fix for DRT breakage introduced in r28690.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pathToLocalResource):

2007-12-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Alice and Sam.

        - <rdar://5621435> Need a way to specify local resources (being loaded
        from HTTP tests) on Windows.
        - Implemented pathToLocalResource which exposes the functionality of
        converting a given unix path to the correct location on Windows.

        * DumpRenderTree/LayoutTestController.cpp:
        (pathToLocalResourceCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pathToLocalResource):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pathToLocalResource):

2007-12-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        <rdar://problem/5132003>
        dumpResourceLoadCallbacks is not implemented in DRT on Windows.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        Set the resource load delegate.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

        * DumpRenderTree/win/ResourceLoadDelegate.cpp: Added.
        * DumpRenderTree/win/ResourceLoadDelegate.h: Added.

2007-12-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Fix conversion from double to LPARAM in dispatchMessage().

        * DumpRenderTree/win/EventSender.cpp:
        (dispatchMessageCallback):

2007-12-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe and Sam Weinig too!

        - added Helvetica Oblique and Helvetica Bold Oblique to the list of
          fonts DumpRenderTree registers.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize):

2007-12-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Make DumpRenderTree on mac use its own path for Databases testing

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Keep a string to ~/Library/Application Support/DumpRenderTree
          for future DRT-only use, then use it to construct the Databases path and set that default

2007-12-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5535636>
        Have to press 4 times instead of 2 times to get the expected result of ^^ with german keyboard.

        http://bugs.webkit.org/show_bug.cgi?id=13916
        JavaScript detects Tab as a character input on a textfield validation

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]): Added a few more named keys.
        Dispatch a keyup to better match what happens when a key is physically pressed.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Ditto. Also make sure that WM_CHAR is consistently dispatched before
        returning from keyDown().
        (getConstantCallback): Fixed a couple copy/paste mistakes.

2007-12-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver.

        - <rdar://5599845> Drosera: Does not show loal files in the file list
        on the left side.

        * Drosera/debugger.js: - Updated url dividing regex to handle %s and :s.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: - Updated Debug settings
        so the open source community can build.

2007-12-10  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig

        Update DRT Mac to reflect the new UI Delegate methods I just checked into WebKit/mac

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:quotaForSecurityOrigin:toCreateDatabase:withEstimatedSize:]):
        (-[UIDelegate webView:frame:quotaForSecurityOrigin:fromProposedQuota:database:]):

2007-12-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam W.

        Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.

        Fixes <rdar://problem/5620249> Must disable SVG animation
        <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior

        In order to allow finer grained control over the set of SVG features
        this patch splits ENABLE_SVG_EXPERIMENTAL_FEATURES into the following
        distinct flags:
        ENABLE_SVG_ANIMATION
        ENABLE_SVG_FILTERS
        ENABLE_SVG_FONTS
        ENABLE_SVG_AS_IMAGE
        ENABLE_SVG_USE

        by default only ENABLE_SVG_AS_IMAGE and ENABLE_SVG_USE are set.

        Script handles all the new build flags, and allows --svg-experimental
        to automatically enable all features.

        * Scripts/build-webkit:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Fix version parsing.

        Rubber-stamped by Oliver.

        * Drosera/win/Drosera.vcproj/auto-version.sh:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Build modifications for Drosera.

        Reviewed by Adam.

        * Drosera/DroseraWin.make: Added.
        * Drosera/win/Drosera.vcproj/Drosera.rc:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * Drosera/win/Drosera.vcproj/PRODUCTVERSION: Added.
        * Drosera/win/Drosera.vcproj/VERSION: Added.
        * Drosera/win/Drosera.vcproj/auto-version.sh: Added.

2007-12-06  Adam Roben  <aroben@apple.com>

        Explicitly turn on the Mac font ascent hack on Windows

        This keeps our font metrics matching those from Mac.

        Reviewed by Hyatt.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2007-12-06  Anders Carlsson  <andersca@apple.com>

        Rename main.c to main.cpp here too.

        * DumpRenderTree/win/TestNetscapePlugin/main.cpp: Copied from DumpRenderTree/win/TestNetscapePlugin/main.c.

2007-12-06  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Geoff.

        * Scripts/do-webcore-rename: Don't rename kjs_css twice.

2007-12-06  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more renaming plans.

2007-12-06  Anders Carlsson  <andersca@apple.com>

        Restore implementation of testGetIntIdentifier that was accidentally
        removed somehow (possibly when I made PluginObject be a cpp file).

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2007-12-05  Anders Carlsson  <andersca@apple.com>

        Make the entry points extern "C".
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:

2007-12-05  Anders Carlsson  <andersca@apple.com>

        C++ warning fixes.

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_Destroy):
        (NPP_SetWindow):
        (NPP_NewStream):
        (NPP_HandleEvent):
        (NPP_URLNotify):
        (NPP_GetValue):

2007-12-05  Anders Carlsson  <andersca@apple.com>

        Add the .cpp files to the TestNetscapePlugIn target.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-12-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Rename the TestNetscapePlugIn .c files to be .cpp.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: Removed.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Copied from DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c: Removed.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp: Copied from DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c: Removed.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp: Copied from DumpRenderTree/TestNetscapePlugIn.subproj/main.c.
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2007-12-05  Adam Roben  <aroben@apple.com>

        Fix case of keypresses from the Windows implementation of eventSender.keyDown

        This fixes several regression tests.

        Reviewed by Alice.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Virtual keycodes for ASCII characters are always
        uppercase, so we need to check the case of the original character
        passed in to eventSender.keyDown.

2007-12-05  Adam Roben  <aroben@apple.com>

        Learn from Tim's mistakes

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Reset the authorAndUserStylesEnabled preference for each
        test.

2007-12-05  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Initialize GTK+ and WebKit so the tests can run.

        Reorganize the headers a little.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main):

2007-12-04  Anders Carlsson  <andersca@apple.com>

        Remove IWebScriptScope include.

        * Drosera/win/DebuggerDocumentPlatform.cpp:

2007-12-04  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Mark Rowe.

        Define CF as platform for mac and revert r28409

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/mac/DumpRenderTreeMac.h:

2007-12-04  Sam Weinig  <sam@webkit.org>

        Define CF as platform for windows.

        Reviewed by Adam Roben.

        * DumpRenderTree/win/DumpRenderTreeWin.h:

2007-12-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam and Darin.

        - Removed a needless BSTR cleanup.

        * Drosera/win/DebuggerDocumentPlatform.cpp:
        (DebuggerDocument::getPlatformCurrentFunctionStack):

2007-11-27  Adam Roben  <aroben@apple.com>

        Fix <rdar://5614497> setAuthorAndUserStylesEnabled is not implemented in DRT

        Reviewed by Maciej.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAuthorAndUserStylesEnabled): Implemented.

2007-12-04  Alp Toker  <alp@atoker.com>

        Prospective Win DRT build fix.

        * DumpRenderTree/DumpRenderTree.h:

2007-12-04  Alp Toker  <alp@atoker.com>

        Fix a clobbered copyright header.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:

2007-12-04  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15561
        GTK port needs DumpRenderTree implementation

        Start work on the GTK+ DRT.

        This does not work yet, and there are a few lingering style issues
        (nothing major) but this patch has been stuck in the bug tracker for
        too long already.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/gtk: Added.
        * DumpRenderTree/gtk/DumpRenderTree.cpp: Added.
        (autocorrectURL):
        (shouldLogFrameLoadDelegates):
        (dumpFrameScrollPosition):
        (displayWebView):
        (appendString):
        (dumpFramesAsText):
        (dumpRenderTreeAsText):
        (dump):
        (runTest):
        (main):
        * DumpRenderTree/gtk/DumpRenderTree.pro: Added.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h: Added.
        * DumpRenderTree/gtk/GCControllerGtk.cpp: Added.
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Added.
        (LayoutTestController::~LayoutTestController):
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::copyDecodedHostName):
        (LayoutTestController::copyEncodedHostName):
        (LayoutTestController::display):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::notifyDone):
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):
        (LayoutTestController::queueLoad):
        (LayoutTestController::queueReload):
        (LayoutTestController::queueScript):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setWindowIsKey):
        (LayoutTestController::setWaitToDump):
        (LayoutTestController::windowCount):
        (LayoutTestController::setPrivateBrowsingEnabled):
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: Added.
        (JSStringCopyUTF8CString):
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):

2007-12-03  Sam Weinig  <sam@webkit.org>

        Move JavaScriptCore thread testing code to pthread specific directory
        and remove the dependance on CoreFoundation by using WTF::HashSet.

        Reviewed by Geoff and Oliver.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ForwardingHeaders/wtf/HashMap.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/HashSet.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Vector.h: Added.
        * DumpRenderTree/JavaScriptThreading.h: Copied from DumpRenderTree/mac/JavaScriptThreading.h.
        * DumpRenderTree/mac/JavaScriptThreading.cpp: Removed.
        * DumpRenderTree/mac/JavaScriptThreading.h: Removed.
        * DumpRenderTree/pthreads: Added.
        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp: Copied from DumpRenderTree/mac/JavaScriptThreading.cpp.
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):

2007-12-03  Andrew Bonventre  <andybons@google.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16267
        Symbol lookup menu broken in debugger view

        * Drosera/debugger.js: Fixed javascript error where document property
        should have been used instead of contentDocument in switchFunction that
        was breaking the select symbol dropdown menu.  This is because
        window.frames will return a Window object and not a frame object like
        the author was originally expecting.

2007-12-03  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - <rdar://5618942> Drosera: Console window does not process everything
        correctly.
        - <rdar://5619005> Drosera: could be sped up by moving the
        WebScriptScope stuff into the WebScriptCallFrame.
        - Now the console can correctly process objects and does not receive
        notifications from JavaScriptCore about the JavaScript in Drosera's
        own process.

        * Drosera/win/DebuggerDocumentPlatform.cpp:
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):

2007-12-03  Stephanie  <slewis@apple.com>

        Reviewed by Darin Adler.

        Check to see if we are building a debug root

        * Scripts/check-for-global-initializers:

2007-12-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - added a testGetIntIdentifier() method to TestNetscapePlugIn

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):

2007-12-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver.

        Added eventSender.dispatchMessage() - will be used to test Windows keyboard input
        in a more fine-grained manner than eventSender.keyDown().

        * DumpRenderTree/win/EventSender.cpp:
        (getConstantCallback):
        (dispatchMessageCallback):

2007-12-02  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More planned renaming.

2007-12-02  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Anders.

        Use [NSURL absoluteString] instead of [NSURL description] in order to get
        more uniform results cross platform.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSURL _drt_descriptionSuitableForTestResult]):

2007-12-02  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Niko.

        Rename FrameLoaderDelegate.h/cpp to FrameLoadDelegate.h/cpp.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/FrameLoadDelegate.cpp: Copied from DumpRenderTree/win/FrameLoaderDelegate.cpp.
        * DumpRenderTree/win/FrameLoadDelegate.h: Copied from DumpRenderTree/win/FrameLoaderDelegate.h.
        * DumpRenderTree/win/FrameLoaderDelegate.cpp: Removed.
        * DumpRenderTree/win/FrameLoaderDelegate.h: Removed.

2007-12-01  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        Make use of the newly introduced webkit.h convenience header.

        * GtkLauncher/main.c:

2007-12-01  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        * Check to see if the directory exists and exit if not.

        * DumpRenderTree/qt/main.cpp:
        (main):

2007-12-01  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        * Don't hide symbols when in Debug mode
        * On Linux (glibc) provide a backtrace in the test output for debugging purposes


        * DumpRenderTree/qt/main.cpp:
        (messageHandler):

2007-11-30  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15691
        [GTK] Public API does not follow GTK+ conventions

        Refactor the WebKit/GTK+ public API. Changes:
          WebKitPage -> WebKitWebView
          WebKitFrame -> WebKitWebFrame

        Public API source and header names have been updated to mirror the API
        changes.

        The API is now kept in WebKit/gtk/WebView to match other ports in the
        same class such as Mac and Win.

        * GtkLauncher/main.c:
        (activate_uri_entry_cb):
        (link_hover_cb):
        (title_change_cb):
        (progress_change_cb):
        (go_back_cb):
        (go_forward_cb):
        (create_browser):
        (main):

2007-11-30  Adam Roben  <aroben@apple.com>

        Hopefully the final build fix

        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Link against WTF.lib to
        pull in WTF's assertion/logging functions.

2007-11-30  Adam Roben  <aroben@apple.com>

        Another build fix

        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Use the right suffix for
        WebKit.lib.

2007-11-30  Adam Roben  <aroben@apple.com>

        Debug build fix

        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Added a Debug_Internal
        configuration.
        * Drosera/win/Drosera.vcproj/debug.vsprops: Updated to match other
        projects.
        * Drosera/win/Drosera.vcproj/release.vsprops: Ditto.
        * Drosera/win/Drosera.vcproj/debug_internal.vsprops: Copied from
        WebKitTools/DumpRenderTree/win/debug_internal.vsprops.

2007-11-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix drawSelectionRect to actually draw the selection rect.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (drawSelectionRect):

2007-11-30  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: WildFox already did the TextStyle -> FontStyle one.

2007-11-30  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Get ready for some future renaming.

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Removed some unnecessary functions and changed an unused return type.

        * Drosera/win/DebuggerClient.cpp:
        (registerConsoleClass):
        * Drosera/win/DebuggerClient.h:
        * Drosera/win/Drosera.cpp:
        (registerDroseraClass):

2007-11-28  Alp Toker  <alp@atoker.com>

        Reviewed by Timothy Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=16174
        [GTK] Use "URI" not "URL" in public API

        Replace use of the term "URL" with "URI" in public headers,
        documentation and some internal code to match GLib/GTK+ convention.

        This is now mentioned in the API guidelines:
          http://trac.webkit.org/projects/webkit/wiki/HackingGtk

        * GtkLauncher/main.c:
        (activate_uri_entry_cb):
        (title_change_cb):
        (create_toolbar):
        (main):

2007-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        <rdar://problem/5230478>
        FrameLoadDelegate callbacks are not dumped in DRT.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldLogFrameLoadDelegates):
        (runTest):
        (main):
        * DumpRenderTree/win/FrameLoaderDelegate.cpp:
        (BSTRtoString):
        (descriptionSuitableForTestResult):
        (FrameLoadDelegate::QueryInterface):
        (FrameLoadDelegate::didStartProvisionalLoadForFrame):
        (FrameLoadDelegate::didFailProvisionalLoadWithError):
        (FrameLoadDelegate::didCommitLoadForFrame):
        (FrameLoadDelegate::didFinishLoadForFrame):
        (FrameLoadDelegate::willCloseFrame):
        (FrameLoadDelegate::didClearWindowObject):
        (FrameLoadDelegate::didFinishDocumentLoadForFrame):
        (FrameLoadDelegate::didHandleOnloadEventsForFrame):
        * DumpRenderTree/win/FrameLoaderDelegate.h:
        (FrameLoadDelegate::windowScriptObjectAvailable):
        (FrameLoadDelegate::didFirstLayoutInFrame):

2007-11-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Add database quota UIDelegates methods to DRT UIDelegate.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:quotaForSecurityOrigin:toCreateDatabase:withEstimatedSize:]):
        (-[UIDelegate webView:quotaForSecurityOrigin:fromProposedQuota:database:]):

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - <rdar://5618976> Drosera: should listen for the WebScriptDebugServer
        dying and vice versa.
        - This fix will allow Drosera and Safari to reconnect if either of them
        closes correctly, but does not fix the case where one of them dies
        silently.

        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::attemptToCreateServerConnection): Added a safety
        check, because it's possilbe to try to connect to a server that's dying.
        (ServerConnection::serverDidDie): Implemented. This resets Drosera when
        the server has died.
        * Drosera/win/ServerConnection.h: Added the new function and removed
        an unnecessary member.

2007-11-29  Anders Carlsson  <andersca@apple.com>

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        Add shlwapi.lib to all configurations.

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        - Build fix.  Added additional includes for VS Express to the Release
        project.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5132005>
        setUserStyleSheetEnabled is not fully implemented in Windows DRT.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        Add shlwapi.lib

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setUserStyleSheetEnabled):
        Implement this.

        (appendComponentToPath):
        New method which wraps the Win32 API PathAppend.

        (followShortcuts):
        New method which checks if a file points to a shortcut and
        follows the shortcut.

        (resolveCygwinPath):
        New method that takes a cygwin unix-style path and returns the Win32 path.

        (cfStringRefToWString):

        (LayoutTestController::setUserStyleSheetLocation):
        Implement this.

2007-11-29  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://5133828> fast/frames/iframe-window-focus.html output is lowercase

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        uppercase letters were being sent as lowercase letters without the shift key down.

2007-11-29  Kevin McCullough  <kmccullough@apple.com>

        - Windows build fix. VS express needs some love.

        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-11-28  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        Send capital letters through as lowercase letters with the shift key down
        rather than sending them as if they were highly unusual "capital letter keys".

        * Scripts/update-javascriptcore-test-results: Add a "--force" option for cases
        where you need to update results and more tests are failing than before.

2007-11-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5132001>
        contextClick is not implemented in DRT on Windows.

        * DumpRenderTree/win/EventSender.cpp:
        (contextClickCallback):
        Add a callback for contextClick, which sends a WM_RBUTTONDOWN message followed
        by a WM_RBUTTONUP message.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::hasCustomMenuImplementation):
        (UIDelegate::trackCustomPopupMenu):
        * DumpRenderTree/win/UIDelegate.h:
        Add a no-op implementation of trackCustomPopupMenu, to prevent the default popup
        menu from being shown (and causing the DRT to hang).

2007-11-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Fix DumpRenderTree ObjC bug comparing strings.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController identityIsEqual::]): Compare strings with string
        equality instead of identiy equality.

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam.

        Reset the authorAndUserStylesEnabled preference
        back to YES for each test. Fixes the broken tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

2007-11-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Drosera now displays the console window, although it cannot currently
        process JavaScript.

        * Drosera/win/DebuggerClient.cpp: Shows the console window.
        (registerConsoleClass): Implemented.
        (consoleWndProc): Implemented.
        (DebuggerClient::onSize): Implemented.
        (DebuggerClient::createWebViewWithRequest): Implemented, now creates a
        new window.
        * Drosera/win/DebuggerClient.h: Added needed method and members for
        creating and maintaining a new window.
        * Drosera/win/Drosera.cpp: Fixed some minor bugs, and moved a couple of
        lines of code to more appropriate places.
        (Drosera::handleCommand):
        (Drosera::initUI):
        (Drosera::onSize):
        (Drosera::attach):

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5569233> Add the ability to disable author and user CSS styles

        Add support for disabling author and user styles for testing.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/LayoutTestController.cpp:
        (setAuthorAndUserStylesEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAuthorAndUserStylesEnabled):

2007-11-26  Dan Bernstein  <mitz@apple.com>

        - Tiger build fix.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2007-11-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - Implemented displaying variables for Drosera on Win.

        * Drosera/win/DebuggerDocumentPlatform.cpp: Changed Drosera functions
        that retrieve variables to not hold onto the return value since it's
        not returned.  Also changed to use the new signatures of the retrieval
        functions.
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        * Drosera/win/Drosera.cpp: Removed a needless TODO.
        (droseraWndProc):

2007-11-26  Sam Weinig  <sam@webkit.org>

        Cleanup names of painting and repainting functions.

        Reviewed by Adam Roben.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (drawSelectionRect): was drawSelectionRectIntoContext.
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (paintWebView): was drawWebViewIntoContext.
        (repaintWebView): was repaintWithVerticalSweep and repaintWithHorizontalSweep.

2007-11-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        - Leopard build fix

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2007-11-26  Sam Weinig  <sam@webkit.org>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16136
        Use shared PixelDumpSupport for Mac DRT

        Reviewed by Adam Roben.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/PixelDumpSupport.h: Copied from DumpRenderTree/win/PixelDumpSupport.h.
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (drawSelectionRectIntoContext):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/mac/ImageDiff.m: Removed.
        * DumpRenderTree/mac/PixelDumpSupport.h: Removed.
        * DumpRenderTree/mac/PixelDumpSupport.mm: Removed.
        * DumpRenderTree/mac/PixelDumpSupportMac.mm: Copied from DumpRenderTree/mac/PixelDumpSupport.mm.
        (setDefaultColorProfileToRGB):
        (getBitmapContextFromWebView):
        (drawWebViewIntoContext):
        (repaintWithVerticalSweep):
        (repaintWithHorizontalSweep):
        (getSelectionRect):
        * DumpRenderTree/win/PixelDumpSupport.h: Removed.

2007-11-25  David D. Kilzer  <ddkilzer@webkit.org>

        Bug 16052: prepare-ChangeLog doesn't report deleted files
        <http://bugs.webkit.org/show_bug.cgi?id=16052>

        Reviewed by Sam.

        * Scripts/prepare-ChangeLog: Fixed logic that checks for removed files.

2007-11-25  David Kilzer  <ddkilzer@webkit.org>

        Bug 15864: Replace merge-changelog with resolve-ChangeLogs
        <http://bugs.webkit.org/show_bug.cgi?id=15864>

        Reviewed by Adam.

        Roll functionality of merge-changelog into resolve-ChangeLogs
        script.  The script now checks for ChangeLog.rej and
        ChangeLog.orig files first.  If it finds them, it uses the
        ChangeLog.rej file as a patch (in old contextual diff format) to
        apply with --fuzz=3.

        * Scripts/merge-changelog: Removed.
        * Scripts/resolve-ChangeLogs: Handle traditional rejected patches.

2007-11-25  Sam Weinig  <sam@webkit.org>

        Add .xcconfig files for the ImageDiff and TestNetscapePlugIn targets of the DumpRenderTree.

        Reviewed by Mark Rowe.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig: Added.

2007-11-25  Sam Weinig  <sam@webkit.org>

        Convert DumpRenderTree to ues .xcconfig files.

        Reviewed by Mark Rowe.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: Added.

2007-11-25  Sam Weinig  <sam@webkit.org>

        Add ForwardingHeaders to wtf for DumpRenderTree.

        Reviewed by Mark Rowe.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ForwardingHeaders: Added.
        * DumpRenderTree/ForwardingHeaders/wtf: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Assertions.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/Platform.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/RetainPtr.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/StringExtras.h: Added.
        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/WorkQueue.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/JavaScriptThreading.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/mac/ObjCController.m:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/mac/WorkQueueItemMac.mm:

2007-11-25  Adam Roben  <aroben@apple.com>

        Fix some test failures caused by r28019

        Now that stdout is in binary mode, we need to always use printf
        instead of wprintf. Otherwise we'll end up with UTF-16 characters in
        the output.

        Reviewed by Sam.

        * DumpRenderTree/win/UIDelegate.cpp: Replaced uses of wprintf with
        printf.
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::webViewAddMessageToConsole):

2007-11-25  Adam Roben  <aroben@apple.com>

        Set the font smoothing preference in DRT

        This makes the pixel results on Windows closer to the Mac results.

        Reviewed by Mitz.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initializePreferences):

2007-11-25  Adam Roben  <aroben@apple.com>

        Port ImageDiff to CG and C++

        Final part of http://bugs.webkit.org/show_bug.cgi?id=16133
        <rdar://5071708>

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.sln: Added ImageDiff.vcproj.
        * DumpRenderTree/cg/ImageDiffCG.cpp: Added.
        (main):
        (createImageFromStdin):
        (compareImages):
        (getDifferenceBitmap):
        (computePercentageDifferent):
        * DumpRenderTree/win/ImageDiff.vcproj: Added.

2007-11-25  Adam Roben  <aroben@apple.com>

        Fix image diff link generation on Windows

        Reviewed by Sam.

        * Scripts/run-webkit-tests: Removed unnecessary and incorrect calls
        to toURL.

2007-11-25  Adam Roben  <aroben@apple.com>

        Implement pixel dumping in Windows DRT

        Part of http://bugs.webkit.org/show_bug.cgi?id=16133
        <rdar://5071708>

        Reviewed by Sam.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Added.
        (printPNG): Dumps a CGImageRef as a PNG to stdout, along with a
        Content-Length header.
        (getMD5HashStringForBitmap):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/PixelDumpSupportCG.h: Copied from WebKitTools/DumpRenderTree/mac/DumpRenderTreePasteboard.h.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump): Do a pixel dump if requested.
        (main): Parse pixel test options.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Added new files and added
        the cg/ subdirectory to the include path.
        * DumpRenderTree/win/MD5.cpp: Added. Windows MD5 functions aren't
        available in a header or import library, so we have to go through this
        LoadLibrary/GetProcAddress dance to use them.
        (cryptDLL):
        (init):
        (update):
        (final):
        (MD5_Init):
        (MD5_Update):
        (MD5_Final):
        * DumpRenderTree/win/MD5.h: Added.
        * DumpRenderTree/win/PixelDumpSupport.h: Added. This file should be
        moved up to the top level to share it with Mac eventually.
        * DumpRenderTree/win/PixelDumpSupportWin.cpp: Added.
        (getBitmapContextFromWebView): Forces the WebView to paint using a
        WM_PRINTCLIENT message, and puts the result in a CGBitmapContext.

2007-11-25  Adam Roben  <aroben@apple.com>

        Clean up Windows DRT's option parsing a little bit

        Reviewed by Sam.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): Put non-option arguments into a Vector.

2007-11-25  Adam Roben  <aroben@apple.com>

        Make Windows DRT stop changing LF into CRLF

        Reviewed by Sam.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): Put stdout in binary mode.
        * Scripts/run-webkit-tests: Remove the CRLF hack.

2007-11-24  David Kilzer  <ddkilzer@webkit.org>

        Removed empty directory.

        * Scripts/resources: Removed.

2007-11-23  David D. Kilzer  <ddkilzer@webkit.org>

        Fix bisect-builds to work with recent WebKit nightly builds.

        Reviewed by Dan.

        * Scripts/bisect-builds: Check for the
        WebKit.app/Contents/Frameworks/10.[45] directory. If it exists, use
        it for the DYLD_FRAMEWORK_PATH environment variable, else fallback
        to WebKit.app/Contents/Resources.

2007-11-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        <rdar://problem/5539306> REGRESSION: redirect fails when subframe's document is opened but
        not closed (affects digg.com)

        * DumpRenderTree/mac/DumpRenderTree.mm: (runTest): Replace the current document with a blank
        one after finishing with a test to avoid having its delayed onload handler firing when
        replaced with the next one. This is ugly and still unreliable (see LayoutTests ChangeLog),
        but it helps somewhat.

2007-11-22  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Fix build-webkit to propagate make's exit status if it fails.

        * Scripts/webkitdirs.pm:

2007-11-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix crash when running pixel tests

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Parse the command line options before setting up the
        environment so that we know if we need to set up the pixel dump
        machinery.

2007-11-21  Eric Seidel  <eric@webkit.org>

        Speculative build fix for Tiger.

        * DumpRenderTree/mac/PixelDumpSupport.mm: include unistd.h

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Break out more of DumpRenderTree.mm into individual files

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/CheckedMalloc.cpp: Added.
        (checkedMalloc):
        (checkedRealloc):
        (makeLargeMallocFailSilently):
        * DumpRenderTree/mac/CheckedMalloc.h: Added.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (crashHandler):
        (dump):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/JavaScriptThreading.cpp: Added.
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * DumpRenderTree/mac/JavaScriptThreading.h: Added.
        * DumpRenderTree/mac/PixelDumpSupport.h: Added.
        * DumpRenderTree/mac/PixelDumpSupport.mm: Added.
        (restoreColorSpace):
        (setDefaultColorProfileToRGB):
        (initializeColorSpaceAndScreeBufferForPixelTests):
        (md5HashStringForBitmap):
        (dumpWebViewAsPixelsAndCompareWithExpected):

2007-11-21  Kevin Ollivier  <kevino@theolliviers.com>

        Move install-unix-extras to wx directory as it seems only to be used by that
        port now. It now supports universal binaries on Mac and adds libpng and libjpeg.
        Also, have build-wxwebkit run it in order to fix the Mac buildbot, and
        have install-unix-extras install into WebKitLibraries as per
        convention.

        Reviewed by Mark Rowe.

        * Scripts/install-unix-extras: Removed.
        * wx/build-wxwebkit:
        * wx/install-unix-extras: Copied from WebKitTools/Scripts/install-unix-extras.

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam.

        More refactoring for greater code readability

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (initializeColorSpaceAndScreeBufferForPixelTests):
        (addTestPluginsToPluginSearchPath):
        (useLongRunningServerMode):
        (runTestingServerLoop):
        (prepareConsistentTestingEnvironment):
        (dumpRenderTree):
        (main):
        (dumpFramesAsText):
        (dumpBackForwardListForWebView):
        (sizeWebViewForCurrentTest):
        (methodNameStringForFailedTest):
        (dumpBackForwardListForAllWindows):
        (dumpWebViewAsPixelsAndCompareWithExpected):
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (dump):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:createWebViewWithRequest:]):

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Abstract more of DRT into static methods

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (setupSignalHandlers):
        (allocateGlobalControllers):
        (releaseAndZero):
        (releaseGlobalControllers):
        (dumpRenderTree):
        (shouldLogFrameLoadDelegates):
        (createCFURLFromPathOrURL):
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):

2007-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Pull DumpRenderTreeWindow and DumpRenderTreePasteboard out into their own files

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        (dump):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h: Added.
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m: Added.
        (+[DumpRenderTreePasteboard _pasteboardWithName:]):
        (+[DumpRenderTreePasteboard releaseLocalPasteboards]):
        (-[DumpRenderTreePasteboard declareType:owner:]):
        (+[LocalPasteboard alloc]):
        (-[LocalPasteboard init]):
        (-[LocalPasteboard dealloc]):
        (-[LocalPasteboard name]):
        (-[LocalPasteboard releaseGlobally]):
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard changeCount]):
        (-[LocalPasteboard types]):
        (-[LocalPasteboard availableTypeFromArray:]):
        (-[LocalPasteboard setData:forType:]):
        (-[LocalPasteboard dataForType:]):
        (-[LocalPasteboard setPropertyList:forType:]):
        (-[LocalPasteboard setString:forType:]):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h: Added.
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm: Added.
        (+[DumpRenderTreeWindow allWindows]):
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow dealloc]):
        (-[DumpRenderTreeWindow isKeyWindow]):
        (-[DumpRenderTreeWindow keyDown:]):

2007-11-20  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for Windows. Don't use WebCore/move-js-headers.sh as
        it indiscriminately copies any headers inside JavaScriptCore,
        which includes Tiger ICU headers.

        * wx/build-wxwebkit:
        Don't run WebCore/move-js-headers.sh any longer.

2007-11-20  Adam Treat  <treat@kde.org>

        Reviewed by David Kilzer.

        * Prepend git branch name to $baseProductDir

        * Scripts/VCSUtils.pm:
        * Scripts/webkitdirs.pm:

2007-11-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:  Pass "clean" flag down into buildQMakeProject.
        * Scripts/webkitdirs.pm: Respect the "clean" flag passed down from build-webkit.
        Have it trigger a "make distclean" rather than "make clean" to ensure that the
        built product and generated Makefile's are removed.

2007-11-19  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16040
        [GTK] GtkLauncher should be written in C

        Port GtkLauncher to plain C.

        Use a more conventional GTK+ coding style.

        Use a toolbar instead of menus.

        Various signature fixes and cleanups.

        Add a license header. Assume all previous modifications were copyright
        assigned to Apple Inc. by default.

        * GtkLauncher/GtkLauncher.pro:
        * GtkLauncher/main.c: Added.
        (activate_url_entry_cb):
        (update_title):
        (link_hover_cb):
        (title_change_cb):
        (progress_change_cb):
        (destroy_cb):
        (go_back_cb):
        (go_forward_cb):
        (create_browser):
        (create_statusbar):
        (create_toolbar):
        (create_window):
        (main):
        * GtkLauncher/main.cpp: Removed.

2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>

        Build script fixes to ensure they do the right thing for the
        wx port, and update build-wxwebkit to reflect the way the
        build scripts now work.

        Reviewed by Adam.

        * Scripts/build-testkjs:
        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitdirs.pm:
        * wx/build-wxwebkit:

2007-11-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Anders.

        Make run-javascriptcore-tests report failures on exit (to support git bisect)

        * Scripts/run-javascriptcore-tests:

2007-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Make run-webkit-tests work with Windows debug build.

        * DumpRenderTree/win/DumpRenderTree.cpp: (main): Only use memory checks with debug CRT.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Switched Debug configuration to release CRT,
        as it is supposed to run with release Apple libraries. Removed _DEBUG preprocessor
        symbol, as it goes with debug CRT (AFAIK, it is supposed to be added automatically,
        and shouldn't be needed in Debug_internal configuration, but I didn't dare to change that).

2007-11-18  Kevin Ollivier  <kevino@theolliviers.com>

        Add wxWebKit sample and build script, and integrate it with
        build-webkit. Also make build-webkit --clean work for all
        ports.

        Reviewed by Darin Adler.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        * wx: Added.
        * wx/browser: Added.
        * wx/browser/browser.bkl: Added.
        * wx/browser/browser.cpp: Added.
        * wx/build-wxwebkit: Added.

2007-11-17  Adam Roben  <aroben@apple.com>

        Make it easy to run Safari in the debugger on Windows

        I've added a new script, debug-safari, which launches Safari in the
        debugger. On OS X it just calls gdb-safari.

        Reviewed by Mark Rowe.

        * FindSafari/FindSafari.cpp:
        (_tmain): Added a /debugger flag, which in combination with
        /printSafariLauncher will print a script that launches Safari in the
        debugger.
        * Scripts/debug-safari: Added.
        * Scripts/run-safari: Changed to call runSafari().
        * Scripts/run-webkit-nightly.cmd: Prepends the launcher script with
        vsvars32.bat, which will let us find VS/VC++ Express, and passes the
        first argument along to FindSafari.
        * Scripts/webkitdirs.pm:
        (sub runSafari): Added.

2007-11-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        * Scripts/run-webkit-tests: Avoid an uninitialized warning if WEBKIT_TESTFONTS is not defined.

2007-11-16  Ryan Leavengood  <leavengood@gmail.com>

        Reviewed by David Kilzer.

        The git config command was renamed to repo-config at some point. This
        change tries git config and then git repo-config if the first fails.

        * Scripts/prepare-ChangeLog:
        (gitConfig):

2007-11-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        - fix <rdar://problem/5134075> fast/forms/select-type-ahead-non-latin.html fails on Windows

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): For characters that cannot be entered on the active
        keyboard layout, send a WM_CHAR message with the character along with
        a WM_KEYDOWN message with a virtual key code of 255.

2007-11-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Don't weak link against WebCore now that it is a sub-framework of WebKit in all configurations.

        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-11-15  Adam Roben  <aroben@apple.com>

        Make run-safari actually work on Windows

        * Scripts/run-safari: Fixed the order of arguments to cp, and added a
        chdir call.

2007-11-14  Adam Roben  <aroben@apple.com>

        Updates to Safari launching now that 3.0.4 is released

        Reviewed by Sam.

        * FindSafari/FindSafari.cpp:
        (getWebViewCLSID): Use version-independent ProgID.
        * Scripts/run-safari: Use run-webkit-nightly.cmd.

2007-11-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5309081>
        In DRT, "plugin.logDestroy = true" not working on Windows.

        * DumpRenderTree/win/TestNetscapePlugin/main.c:
        (NPP_Destroy):

2007-11-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * Scripts/run-sunspider: add --shark-cache for L2 Cache Miss profiling

2007-11-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5141186>
        window.layoutTestController.setWindowIsKey is not implemented in DRT.

        Implement setWindowIsKey.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWindowIsKey):

2007-11-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix for <rdar://problem/5382579>
        http/tests/security/cross-frame-access-put.html reports large
        negative numbers for screenLeft and screenTop (Mac reports "0")

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::UIDelegate): Initialize the RECT.
        (UIDelegate::setFrame): copy the contents of the rect, not the pointer.
        (UIDelegate::webViewFrame): ditto.
        * DumpRenderTree/win/UIDelegate.h: Use a RECT not a RECT*

2007-11-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Make Drosera show source, source URLs, and function stack on Windows,
        and some minor fixes.

        * Drosera/DebuggerDocument.cpp: Force source to always update display.
        (DebuggerDocument::updateFileSource):
        * Drosera/debugger.js: Force source to always update display.
        * Drosera/win/DebuggerClient.cpp: Create the needed functions for the
        menu controls.
        (DebuggerClient::resume):
        (DebuggerClient::pause):
        (DebuggerClient::stepInto):
        (DebuggerClient::stepOver):
        (DebuggerClient::stepOut):
        (DebuggerClient::showConsole):
        (DebuggerClient::closeCurrentFile):
        * Drosera/win/DebuggerClient.h: Ditto.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Changed
        getPlatformCurrentFunctionStack to not use an unecessary HRESULT and
        removed two bugs.  1) caller could be in a bad state when asked to
        assign into it. 2) BSTRs were not created correctly.
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        * Drosera/win/Drosera.cpp: Hook up the menu controls.
        (droseraWndProc):
        (handleCommand):
        (Drosera::resume):
        (Drosera::pause):
        (Drosera::stepInto):
        (Drosera::stepOver):
        (Drosera::stepOut):
        (Drosera::showConsole):
        (Drosera::closeCurrentFile):
        * Drosera/win/Drosera.h: Hook up the menu controls.
        * Drosera/win/ServerConnection.cpp: Removed unncessary server connection
        functions, added a null check, and fixed another bug where caller could
        be in a bad state when asked to assign into it.
        (ServerConnection::didLoadMainResourceForDataSource):
        (ServerConnection::getCallerFrame):
        * Drosera/win/ServerConnection.h: Safety first.

2007-11-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <http://bugs.webkit.org/show_bug.cgi?id=13371>
          DumpRenderTree --pixel-tests renders each test twice

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Removed the --paint option because the painting code
        is always exercised as a result of
        -[FrameLoadDelegate webView:didFinishLoadFromFrame:]
        calling -displayIfNeeded.
        (dump): Changed to always grab the image from the window since the view
        is always displayed.
        (runTest):
        (displayWebView):
        * Scripts/run-webkit-tests: No need to pass --paint to DumpRenderTree
        because it always paints.

2007-11-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Add support for http media tests

        * Scripts/run-webkit-tests:

2007-11-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Implement LayoutTestController.setPrivateBrowsingEnabled(bool) for windows.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPrivateBrowsingEnabled):

2007-11-12  Adam Roben  <aroben@apple.com>

        * Scripts/update-webkit-localizable-strings: Changed to only scan the
        mac and win subdirectories.

2007-11-11  Adam Roben  <aroben@apple.com>

        Fix <rdar://5133816> keepWebHistory is not implemented

        Fixes fast/history/clicked-link-is-visited.html.

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Clear the optionalSharedHistory.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::keepWebHistory): Set the optionalSharedHistory.

2007-11-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Follow up to <rdar://problem/5394877> Safari should not log unsafe JavaScript
        attempts when in private browsing mode (only an issue if Log JavaScript Exceptions
        is turned on)

        - Add LayoutTestController.setPrivateBrowsingEnabled(bool) (stub out implementation for windows)

        Added test: http/tests/security/cross-frame-access-private-browsing.html

        * DumpRenderTree/LayoutTestController.cpp:
        (setPrivateBrowsingEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest): Default to private browsing disabled.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setPrivateBrowsingEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPrivateBrowsingEnabled):

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Changed the vcproj file to use Drosera's ForwardingHeaders and not
        WebCore's!

        * Drosera/ForwardingHeaders/wtf/Assertions.h: Added.
        * Drosera/ForwardingHeaders/wtf/HashTraits.h: Added.
        * Drosera/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * Drosera/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * Drosera/ForwardingHeaders/wtf/RetainPtr.h: Added.
        * Drosera/win/Drosera.cpp:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Use the new IWebFrame [local] function signature and get the shared
        server correctly.

        * Drosera/win/DebuggerClient.cpp:
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::attemptToCreateServerConnection):

2007-11-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - add an option to run-webkit-tests to ignore pixel test failures where
          all pixels differ by no more than a specified threshold

        * DumpRenderTree/mac/ImageDiff.m:
        (main):
        (compareImages):
        (computePercentageDifferent):
        * Scripts/run-webkit-tests:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make the setting of letting Javascript access the clipboard configurable through QWebSettings, turn it off by default and turn it on in DumpRenderTree.

        * DumpRenderTree/qt/DumpRenderTree.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Reworked the QWebSettings API.
        QWebPage now returns a pointer to its mutable QWebSettings object and the settings of newly created QWebPageObjects are initialized from QWebSettings::defaultSettings().

        * DumpRenderTree/qt/DumpRenderTree.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make QWebHistory an explicitly shared object, returned as a pointer by QWebPage::history().

        * DumpRenderTree/qt/jsobjects.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Add a QWebPage::frameCreated() signal and fix DRT

        The removal of createFrame in QWebPage broke the re-implementation
        in DumpRenderTree. Instead emit a frameCreated() signal and
        connect to it in DumpRenderTree.


        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::dump):
        (WebCore::DumpRenderTree::connectFrame):
        * DumpRenderTree/qt/DumpRenderTree.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Moved all the event handlers from QWebFrame into QWebPage.

        This cleans up the public API and allows us to remove the
        HackWebFrame hack in DumpRenderTree.


        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Mark.

        Implemented the two Javascript prompt callbacks in qt/DumpRenderTree
        to prevent the default implementation from popping up messageboxes.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::javaScriptConfirm):
        (WebCore::WebPage::javaScriptPrompt):

2007-11-06  Eric Seidel  <eric@webkit.org>

        * Scripts/build-testkjs: build fix... too many $$

2007-11-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        * Scripts/build-testkjs: return xcodebuild's exit status, instead of grep's

2007-11-05  Adam Roben  <aroben@apple.com>

        Add support on Windows for WEBKIT_TESTFONTS

        This environment variable lets you specify where the fonts to be used
        by DumpRenderTree reside. The Qt port is already using this, so I'm
        just following their lead.

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (exePath): Refactored code out of initialize().
        (fontsPath): Returns either $WEBKIT_TESTFONTS or
        DumpRenderTree.resources.
        (initialize): Use the new fontsPath function.
        (main): Use the new exePath function.
        * Scripts/run-webkit-tests: Propagate the WEBKIT_TESTFONTS environment
        variable to DRT, like Qt does.

2007-11-05  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Alp Toker.

        Remove buggy "autocomplete" from GtkLauncher as it causes more problems than it solves.

        * GtkLauncher/main.cpp:
        (goToURLBarText):
        (main):

2007-11-04  David D. Kilzer  <ddkilzer@webkit.org>

        bisect-builds doesn't work with nightly build r19992 or newer on Leopard
        <http://bugs.webkit.org/show_bug.cgi?id=15830>

        Reviewed by Timothy.

        Restrict the range of nightly builds used by the bisect-builds script
        based on the version of Safari and the version of Mac OS X being used.

        Mac OS X 10.4: Safari 2.0: r11976 or newer
        Mac OS X 10.4: Safari 3.0: r19992 or newer

        Mac OS X 10.5: Safari 2.0: r19594 or newer
        Mac OS X 10.5: Safari 3.0: r25124 or newer

        * Scripts/bisect-builds:
        (findMacOSXVersion): Added.
        (makeNightlyList): Added argument to provide version of Mac OS X.
        Restrict range of nightly builds based on Safari and Mac OS X versions.

2007-11-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - This patch involves several changes, all of them were noticed that
        they were needed by the work being done in WebKit to get Drosera and
        WebKit working together on Windows.
        - The changes are:
        1) Added a debugger console for output messages.
        2) Drosera now listens for the WebKit server (before, the server would
        have to be running before Drosera was started.)
        3) Fixed a bug where the WebView started out as 0x0 pixels.
        4) Fixed a bug when there is no scope.
        5) Added the HTML, JS, and CSS to the project file to make them easy to
        find.
        6) Made the ServerConnection functions virtual.

        * Drosera/win/DebuggerClient.cpp: This is part of how Drosera listens
        for the WebKit server.
        (DebuggerClient::DebuggerClient):
        (DebuggerClient::~DebuggerClient):
        (DebuggerClient::didFinishLoadForFrame):
        (DebuggerClient::serverConnected):
        (DebuggerClient::attemptToCreateServerConnection):
        * Drosera/win/DebuggerClient.h: Ditto.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Fixed a bug when there is no
        scope.
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        * Drosera/win/Drosera.cpp:
        (_tWinMain): Added a console in debug for output messages.
        (Drosera::Drosera): Listen for server.
        (Drosera::initUI): The server now Initializes COM.
        (Drosera::serverConnected): Part of the listening for the server.
        (Drosera::attemptToCreateServerConnection): Ditto.
        * Drosera/win/Drosera.h: New interface for listening for the server.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Added HTML, JS, and CSS
        files to the VS project.
        * Drosera/win/ServerConnection.cpp: Part of listening for the server
        connection.
        (ServerConnection::ServerConnection):
        (ServerConnection::attemptToCreateServerConnection):
        * Drosera/win/ServerConnection.h: Ditto and virtualized the Interface
        methods.
        (ServerConnection::serverConnected):

2007-11-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15832
        fast/dom/gc-10.html crashes when run alone

        Check for !done before using objects that can be already deallocated.

        * DumpRenderTree/mac/EditingDelegate.mm:
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        (-[EditingDelegate webViewDidChangeSelection:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didReceiveIcon:forFrame:]):
        (-[FrameLoadDelegate webView:didChangeLocationWithinPageForFrame:]):
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):
        (-[FrameLoadDelegate webView:didCancelClientRedirectForFrame:]):
        (-[FrameLoadDelegate webView:willCloseFrame:]):
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):
        (-[FrameLoadDelegate webView:didHandleOnloadEventsForFrame:]):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willCacheResponse:fromDataSource:]):

2007-11-04  Mark Rowe  <mrowe@apple.com>

        Build fix.  Don't use Carbon.h as the prefix header as it triggers
        warnings that would otherwise be suppressed due to it being a system header.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-11-03  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Adam.

        - Turn off deprecated function warnings for TestNetscapePlugin because Carbon.h triggers them

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        Sort files(...); sections of Xcode project files.

        Rubber-stamped by Darin Adler.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        Script to sort "files(...);" sections in Xcode project.pbxproj files.

        Reviewed by Darin Adler.

        * Scripts/sort-Xcode-project-file: Added.

2007-11-02  Darin Adler  <darin@apple.com>

        * Scripts/run-sunspider: Changed "--base" to "--set-baseline".

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Scripts/run-sunspider: Pass the "--base" option through.

        * Scripts/sunspider-compare-results: Don't check the number of parameters; let
        the real script do that. Default configuration to Release to match run-sunspider
        so we don't end up building Debug just to compare results.

2007-11-01  Adam Roben  <aroben@apple.com>

        Make changes in WebKit/win show up under "WebKit/win:" instead of just "win:"

        Reviewed by Sam.

        * Scripts/commit-log-editor: Show all the directories beneath the
        source root, instead of just the last one.

2007-11-01  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Adam Roben.

        Print out an error message when the Windows build fails
        and provide guidance on how to find out what went wrong.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2007-11-01  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Adam Roben.

        Rolled out r27326 - debug CRT seems to cause no problems after all.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2007-10-31  Adam Roben  <aroben@apple.com>

        Switch the Debug configuration to using the non-debug CRT

        This matches WebKit.

        Reviewed by Steve.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2007-10-31  Antti Koivisto  <antti@apple.com>

        Reviewed by bdash.

        Disable media tests when doing leak checking on Tiger.
        They crash in QuickTime (rdar://problem/5537157).

        * Scripts/run-webkit-tests:

2007-10-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        Build media support by default on OSX only.

        * Scripts/build-webkit:

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        - Made Adam the reviewer for a previous checkin. Not sure how it didn't
        get caught by the pre-commit hooks.

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - This is a collection of relatively unrelated changes and cleanups
        to Drosera to prepare it for interacting with WebKit.  A lot of these
        changes are just correcting mistakes, for example removing included
        headers that are no longer needed.

        * Drosera/DebuggerDocument.h: Added accessor for the ServerConnection
        this will be needed by the DebuggerClient.
        (DebuggerDocument::server):
        * Drosera/win/BaseDelegate.h: Removed unnecessary include.
        * Drosera/win/DebuggerClient.cpp:
        (DebuggerClient::didFinishLoadForFrame): Finished implementing.
        (DebuggerClient::didReceiveTitle): Added comment about its purpose.
        (DebuggerClient::createWebViewWithRequest): Added comment about its
        purpose.
        * Drosera/win/DebuggerClient.h: Removed unnecessary include, and forward
        declarations.
        (DebuggerClient::webViewLoaded): Moved.
        * Drosera/win/Drosera.cpp: Moved a function from the HelperFunctions
        file, since this was the only place it was used.
        (cfStringToBSTR):
        * Drosera/win/Drosera.h: Cleaned up the includes.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Removed HelperFunctions.h
        * Drosera/win/HelperFunctions.h: Removed.

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Small cleanup in the ServerConnection class.

        * Drosera/win/ServerConnection.cpp: Added comments, moved some functions
        and added an include.
        (ServerConnection::currentFrame):
        (ServerConnection::getCallerFrame):
        * Drosera/win/ServerConnection.h: Added comments, moved some functions,
        made a pointer into a COMPtr, and cleaned up the includes.

2007-10-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John Sullivan.

        - Place the Localizable.strings file in mac or win directories
          if that location exists.
        - Also look for UI_STRING in .c files.

        * Scripts/extract-localizable-strings:

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Set the eol-style to native and made all the line endings the same
        so that I avoid messy diffs that show eol changes.

        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::didParseSource):
        (ServerConnection::didEnterCallFrame):
        (ServerConnection::willExecuteStatement):
        (ServerConnection::willLeaveCallFrame):
        (ServerConnection::exceptionWasRaised):

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        * Drosera/win/DebuggerDocumentPlatform.cpp:Implemented much of the
        functionality that could not have existed previously without the new
        interfaces.
        (JSValueRefCreateWithBSTR): Added a helper function to easily convert
        from a BSTR to a JSValueRef.
        (DebuggerDocument::platformEvaluateScript): Implemented.
        (DebuggerDocument::getPlatformCurrentFunctionStack): Implemented.
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        Implemented.
        (DebuggerDocument::platformValueForScopeVariableNamed): Implemented.
        * Drosera/win/HelperFunctions.h: Cleaned up some comments.
        * Drosera/win/ServerConnection.cpp: Added a helper function.
        (ServerConnection::getCallerFrame):
        * Drosera/win/ServerConnection.h: Added a helper function.

2007-10-29  Kevin McCullough  <kmccullough@apple.com>

        updated reviewers for my previous changelog.

2007-10-29  Kevin McCullough  <kmccullough@apple.com>
        Reviewed by Maciej and Adam and Geoff.

        - Minor mac-side improvements including moving a function to a more
        appropriate location, fixing a warning, and correctly checking
        exceptions.

        * Drosera/DebuggerDocument.cpp: Corrected the exception checking.
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::callFunctionOnObject):
        * Drosera/mac/DebuggerClient.mm: Fixes a warning.
        * Drosera/mac/DebuggerDocumentPlatform.mm: Moved
        webScriptAttributeKeysForScriptObject to DebuggerDocumentPlatform
        because it doesn't require the ServerConnection at all.
        (NSStringCreateWithJSStringRef): Made an argument const.
        (JSValueRefCreateWithNSString): Made an argument const.
        (+[WebScriptObject webScriptAttributeKeysForScriptObject:]):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        * Drosera/mac/ServerConnection.h: Moved aforementioned function.
        * Drosera/mac/ServerConnection.mm: Ditto.
        (-[ServerConnection webView:didLoadMainResourceForDataSource:]):

2007-10-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add a globalFlag property to the LayoutTestController to allow cross-domain indications.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (getGlobalFlagCallback):
        (setGlobalFlagCallback):
        (LayoutTestController::getJSClass):
        (LayoutTestController::staticValues):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::globalFlag):
        (LayoutTestController::setGlobalFlag):

2007-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Scripts/run-sunspider: Added --shark20 option, to run Shark at its highest sample
        resolution instead of its default.

2007-10-29  David Kilzer  <ddkilzer@webkit.org>

        Fixed showStatus() to print status for successfully resolved conflicts when using git.

        Reviewed by Mark Rowe.

        Previously showStatus() would run "git diff --name-status" after a ChangeLog conflict
        was successfully resolved, but this would not show any status because the change had
        already been cached in the index using "git add".  The solution is to add an optional
        second argument to showStatus() which adds the "--cached" switch to the command.

        * Scripts/resolve-ChangeLogs:
        (showStatus):

2007-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej and Geoff, in unison.

        * Scripts/run-webkit-tests: remove broken --svg option

2007-10-28  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * Scripts/run-sunspider: Default to "Release" configuration rather than
        defaulting to the last configuration used as other scripts do. This can
        still be overriden on the command line with "--debug" if there's some
        reason to do so. Also fix a typo.

        * Scripts/sunspider-compare-results: Fix a typo.

2007-10-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Implemented the WebScriptDebugListener functions now that the
        WebScriptDebugServer exists

        * Drosera/win/ServerConnection.cpp: Implemented WebScriptDebugListener
        functions.
        (ServerConnection::currentFrame):
        (ServerConnection::didLoadMainResourceForDataSource):
        (ServerConnection::didParseSource):
        (ServerConnection::failedToParseSource):
        (ServerConnection::didEnterCallFrame):
        (ServerConnection::willExecuteStatement):
        (ServerConnection::willLeaveCallFrame):
        (ServerConnection::exceptionWasRaised):
        * Drosera/win/ServerConnection.h: Removed unused arguments from the
        members arguments list.

2007-10-26  David Kilzer  <ddkilzer@webkit.org>

        prepare-ChangeLog and update-webkit create needless ChangeLog conflicts
        <http://bugs.webkit.org/show_bug.cgi?id=15600>

        Reviewed by Darin Adler.

        The resolve-ChangeLog script merges conflicted ChangeLogs in svn or git by creating
        a patch of the local changes and applying it with a fuzz level of 3 to the new file.
        If the patch is successful, it runs 'svn resolved' or 'git add' on the new ChangeLog
        file.  Note that it may also be used as a stand-alone script.

        * Scripts/prepare-ChangeLog: Call resolve-ChangeLogs for conflicted ChangeLog files.
        * Scripts/resolve-ChangeLogs: Added.
        * Scripts/update-webkit: Call resolve-ChangeLogs for conflicted ChangeLog files.

2007-10-26  Mark Rowe  <mrowe@apple.com>

        Qt build fix.  r27084 added a destructor implementation for LayoutTestController
        to the Qt port on the assumption that it was an implementation of the cross-platform
        LayoutTestController class.  It is not, so it did not need to be changed.

        * DumpRenderTree/qt/jsobjects.cpp: Remove empty destructor.

2007-10-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Fix builds with code coverage enabled.

        * Scripts/build-webkit: Don't overwrite the existing value of OTHER_LDFLAGS.

2007-10-25  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        * Scripts/make-js-test-wrappers: Don't generate a wrapper for intersectsNode.js.
        * Scripts/prepare-ChangeLog: Add a special case for prefix of empty string.

2007-10-25  Stephanie  <slewis@apple.com>

        build Fix

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-10-25  Stephanie  <slewis@apple.com>

        Reviewed by Mark Rowe, Adam Roben.

        Weak link against WebCore so DumpRenderTree can be bundled with production roots.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-10-25  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://5549689> 2 tests in fast/forms fail when run with other tests on Windows

        Moving destructor into platform-specific files
        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::~LayoutTestController):
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::~LayoutTestController):

        LayoutTestController wasn't being destroyed
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

        Added declspec
        * DumpRenderTree/win/EditingDelegate.h:

        Reset certain values on the webview (or related delegate) that might
        have changed while running a test
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::~LayoutTestController):

2007-10-25  Adam Roben  <aroben@apple.com>

        Make sunspider-compare-results work with relative paths

        Reviewed by Sam.

        * Scripts/sunspider-compare-results: Convert arguments to absolute
        paths before we chdir.

2007-10-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Implemented server calls now the WebScriptDebugServer exists.
        - Also removed no longer needed call to initialize CG.

        * Drosera/win/Drosera.cpp: No longer initializes CG because this happens
        automatically now.
        (_tWinMain):
        * Drosera/win/ServerConnection.cpp: Now uses the COM class.
        (ServerConnection::ServerConnection):
        (ServerConnection::~ServerConnection):
        (ServerConnection::pause):
        (ServerConnection::resume):
        (ServerConnection::stepInto):
        (ServerConnection::applicationTerminating):
        (ServerConnection::serverConnectionDidDie):
        * Drosera/win/ServerConnection.h: Now uses the COM class.

2007-10-24  George Staikos  <staikos@kde.org>

        Unbreak Qt build.

        * Scripts/build-webkit:

2007-10-24  Adam Roben  <aroben@apple.com>

        Remove now-unnecessary call to InitializeCoreGraphics

        WebKit takes care of this now.

        Reviewed by Ada.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize):

2007-10-24  Adam Roben  <aroben@apple.com>

        Use WebTextRenderer in DRT

        Reviewed by Ada.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Use WebTextRenderer instead of using AddFontResourceEx.

2007-10-24  Sven Herzberg  <sven@imendio.com>

        Reviewed by Mark Rowe.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=15614
        Bug 15614: [GTK] qmake based backends don't build on OS X

        * Scripts/build-webkit: set QMAKESPEC correctly if building the QT or
        GTK backend on a Mac
        * Scripts/webkitdirs.pm: extracted the darwin-test from isOSX() into
        isDarwin() to make it reusable in other places (like the workaround-
        for-prebuilt-qmake in build-webkit)

2007-10-24  David Kilzer  <ddkilzer@webkit.org>

        Refurbish update-webkit script.

        Reviewed by Adam.

        * Scripts/update-webkit: Add -h|--help switch and usage statement.  Check result of
        GetOptions() call.  Fix -q|--quiet switch to be passed to svn command properly.  Use
        multi-argument version of system() for flexibility and security.  Check for existence
        of Internal directory using -d test instead of -x.

2007-10-24  David Kilzer  <ddkilzer@webkit.org>

        Minor clean-up of prepare-ChangeLog script.

        Reviewed by Adam.

        * Scripts/prepare-ChangeLog: Keep list of updated ChangeLog files in an array instead
        of a string.  Use multi-argument versions of open() and system() for flexibility and
        security.

2007-10-24  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Fix <rdar://5410959>  editing/selection/drag-to-contenteditable-iframe.html fails on Windows

        Move the call to replaySavedEvents from doDragDrop to doMouseMove because we don't want to
        replay the saved events when we're still processing the mousedown that starts the drag
        * DumpRenderTree/win/EventSender.cpp:
        (doMouseMove):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::doDragDrop):

2007-10-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam, Steve and Darin.

        - Stubbed out the WebScriptDebugListener functionality in the Server
        Connection class to prepare it for receiving those callbacks.
        - Also I changed the instantiation of DebuggerClient, DebuggerDocument
        and the ServerConnection to not need to be initialized with a server
        name, since that is not the way we connect to the WebKit server.

        * Drosera/DebuggerDocument.cpp: Fixed a bug where I was always logging
        no exception.  Now it only loggs when there is an exception
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::callFunctionOnObject):
        * Drosera/win/DebuggerClient.cpp: No longer needs the ServerConnection
        to be instantiated with a server's name.
        (DebuggerClient::DebuggerClient):
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/DebuggerClient.h: Removed unsued variable.
        * Drosera/win/Drosera.cpp: Client no longer needs to be initialized with
        a server name.
        (Drosera::init):
        (Drosera::initServer):
        * Drosera/win/Drosera.h: No longer need the ServerConnection to be
        instantiated with a server's name.
        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::ServerConnection): No longer needs a server name
        (ServerConnection::~ServerConnection): Only release the global context
        if there is one.
        (ServerConnection::serverConnectionDidDie): Stub for
        IWebScriptDebugListener
        (ServerConnection::QueryInterface): ditto
        (ServerConnection::AddRef): ditto
        (ServerConnection::Release): ditto
        (ServerConnection::didLoadMainResourceForDataSource): ditto
        (ServerConnection::didParseSource): ditto
        (ServerConnection::failedToParseSource): ditto
        (ServerConnection::didEnterCallFrame): ditto
        (ServerConnection::willExecuteStatement): ditto
        (ServerConnection::willLeaveCallFrame): ditto
        (ServerConnection::exceptionWasRaised): ditto
        * Drosera/win/ServerConnection.h: Stubbed out the
        IWebScriptDebugListener functions, and this class no longer needs to be
        instantiated with a server name.

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add a layoutTestController.dumpSelectionRect() dummy. It only has an effect on mac pixel tests anyway. Makes us pass another 5 test cases.

        * DumpRenderTree/qt/jsobjects.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add another command.

        * DumpRenderTree/qt/jsobjects.cpp:
        (TextInputController::doCommand):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add empty eventSender.clearKillRing(), and map some of the special keys used in eventSender.keyDown() to things that work on Qt/X11.

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement eventSender.keyDown().

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        some smaller fixes to the editing support in DRT. Makes another few tests pass.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/jsobjects.cpp:
        (TextInputController::doCommand):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        first bit of implementation for the textinputcontroller.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (TextInputController::TextInputController):
        (TextInputController::doCommand):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make the man webpage believe it has focus, so the editing tests work correctly.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement layoutTestController.dumpEditingCallbacks() correctly.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpEditingCallbacks):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Implement support for testing editing.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-10-23  Sam Weinig  <sam@webkit.org>

        Check for null BSTR that can be passed to the UIDelegate methods
        from javascript null and undefined.  Fixes a failing test case on
        Windows (fast/dom/Window/alert-undefined.html)

        Reviewed by Eric Seidel.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::webViewAddMessageToConsole):

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Don't print a massive pile of setenvs from tools that automatically build testkjs.

        * Scripts/build-testkjs:

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - add wrapper that finds the right copy of testkjs

        * Scripts/sunspider-compare-results: Added.

2007-10-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - After talking with Steve I now see that the WebKit server must be
        running for DCOM to create the distributed objects, which makes sense
        and currently WebKit only allows one instance to be running at a time
        which avoids accidentally connecting to the wrong server
        - In light of this I have removed the code for the attach box and
        NotificationServer and known server names, since they are all extranious
        now.

        * Drosera/win/Drosera.cpp: Removed notification classes and known server
        names.
        (_tWinMain): Uses init instead of initUI.
        (droseraWndProc): No longer creats an attach dialog box.
        (Drosera::Drosera): Does the OleInitialize so COM is ready to go and
        it's not manditory to call init before doing COM stuff.
        (Drosera::init): calls initUI and will call attach when the
        functionality exists.
        (Drosera::initUI): Has changed very little.
        (Drosera::attach): Changed the signature to reflect that we no longer
        need the dictionary of known server names.
        * Drosera/win/Drosera.h: Removed notification classes and known server
        names.  Also renamed and moved some functions.
        * Drosera/win/Drosera.vcproj/Drosera.rc: Removed the Attach box.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Moved resource.h from the
        headers to the resources folder.
        * Drosera/win/resource.h: Removed the Attach box.

2007-10-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        * Scripts/build-dumprendertree: Fix path to DumpRenderTree.sln.

2007-10-22  Kevin McCullough  <kmccullough@apple.com>

        - Removed a leak that was fixed.

        * Scripts/run-webkit-tests:

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Changed the Client so that the DebuggerDocument now own the
        ServerConnection.  This simplifies ownership and cleanup.

        * Drosera/win/DebuggerClient.cpp: The DebuggerDocument now owns the
        ServerConnection.
        (DebuggerClient::initWithServerName):
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/DebuggerClient.h: DebuggerDocument now owns the
        ServerConnection.
        * Drosera/win/Drosera.cpp: Moved some WebFrame initialization logic to
        until after we have a server which we are attached to.
        (Drosera::initUI):
        (Drosera::attach):
        * Drosera/win/Drosera.h: Removed two needless pointers I forgot to take
        out previously.

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        When running build-testkjs make sure it's called through the perl interpreter, to fix the build for Qt/Windows.

        * Scripts/run-javascriptcore-tests:

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Wrap WEXITSTATUS with a little exitStatus() helper function that falls back to the use of $returnvalue >> 8 on Windows to determine the exit status on platforms without WEXITSTATUS.

        * Scripts/build-drosera:
        * Scripts/build-dumprendertree:
        * Scripts/build-testkjs:
        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-sunspider:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2007-10-22  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe.

        Fix for local database support after r26879
        Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set

        * Scripts/build-webkit:

2007-10-22  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        - Do not build testkjs as an application bundle. This is
        needed for run-javascriptcore-tests on OSX.
        - Also, based on r26633, allow to test the WebKit/Qt port on OSX.
        - Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set
        as we do not have -rpath on OSX.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * Scripts/run-webkit-tests:

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by aroben.

        Fix support for Signed-off-by detection in prepare-ChangeLog
        --git-commit. The Signed-off-by tag does not appear in the header
        but usually at the end.

        * Scripts/prepare-ChangeLog:

2007-10-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric.

        Fix run-javascriptcore-tests for Gtk.

        * Scripts/build-testkjs: testkjs is built by build-webkit for Gtk.

2007-10-20  Eric Seidel  <eric@webkit.org>

        Reviewed by aroben.

        * Scripts/find-extra-includes: fix path matching regex to not match ".patch"

2007-10-20  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Add improved argument handling to run-sunspider, including
        --runs=<number>, --shell=<path>, --tests=<pattern>, --shark, and --help
        Also re-factor code into subroutines

        * Scripts/build-dumprendertree: removed bogus comments
        * Scripts/build-testkjs: Added.
        * Scripts/run-javascriptcore-tests: use build-testkjs
        * Scripts/run-sunspider: improved argument handling, abstraction
        * Scripts/run-webkit-tests: improved abstraction

2007-10-20  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, Windows build fix.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2007-10-20  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - http://bugs.webkit.org/show_bug.cgi?id=15544
          <rdar://problem/5076426> fast/events/arrow-navigation.html needs to
          not rely on Apple-specific key codes

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):
        Added named key "rightArrow". Later we could have a whole table of these.
        Also tweaked modifiers code a little.

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Ditto.

2007-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=15566
          possible fix for leak seen in DumpRenderTree

        * DumpRenderTree/WorkQueue.cpp: (WorkQueue::queue):
        Delete the item if it's not put on the queue, since the caller has
        no way of knowing that. Would be better to have the parameter type
        be auto_ptr to express the fact that we take ownership.

        - unrelated change

        * Drosera/mac/main.m: Add missing include.

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - This change should be identical but for some reason was not working
        on my machine.

        * Scripts/prepare-ChangeLog:

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver and Tim.

        - Made use of RetainPtr to avoid retain and release issues and moved the
        log function to DebuggerDocumentPlatform, which seems to be a more
        logical place for it to live.
        - Also moved knownServers from the ServerConnection to
        DebuggerApplication to match the Windows code and because it makes sense
        that a connection knows its own server but not all of them.

        * Drosera/mac/DebuggerClient.h: Moved the log function to
          DebuggerDocumentPlatform.
        * Drosera/mac/DebuggerClient.mm: Ditto. Also do not release the server
          Because it's owned by an own Ptr in DebuggerDocument.  Also moved the
          call for the server name up from the ServerConnection class.
        (-[DebuggerClient dealloc]):
        (-[DebuggerClient webView:didReceiveTitle:forFrame:]): Moved the call
          for the server name up from the ServerConnection.
        * Drosera/mac/DebuggerDocumentPlatform.mm: Made the server an OwnPtr.
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog): Log directly from here. No need to call
          DebuggerClient.
        * Drosera/mac/ServerConnection.h: Removed the knownServers function. The
          way I see it, a ServerConnection should only know about its connection
          and the group of all possible servers should be kept by the
          application.
        * Drosera/mac/ServerConnection.mm: Removed knownServer but added
          currentServerName, it makes sense that the connection should know that
          name.
        (-[ServerConnection currentServerName]):

2007-10-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Integrated changes from mac drosera.  Recently I've encapsulated
        out the server connection object from the rest of Drosera because
        it is very platform dependent right now and RPC is not implemented on
        windows.  This functionality, of communicating with the WebKit server
        is the next area I will be focusing on in Windows.

        - Other changes and cleanup were made to organize the code and add notes
        on which parts still need work.  Also some mac code is added and
        commented out, to act as pseudocode for the logic of those parts.

        * Drosera/DebuggerDocument.h: Make the ServerConnection live in a smart
          pointer.
        * Drosera/config.h: Added whitespace.
        * Drosera/win/DebuggerApplication.cpp: Removed. The functionality of
          these files got moved into Drosera.h/cpp
        * Drosera/win/DebuggerApplication.h: Removed.
        * Drosera/win/DebuggerClient.cpp: Lots of cleanup and restructuring
          happened here to better match the logic flow of the same code on the
          mac side and to use the new ServerConnection class.
        (DebuggerClient::DebuggerClient): Constructor that takes a server name.
        (DebuggerClient::initWithServerName): Initializer that will set up the
          class to use a ServerConnection object.  This was necessary so I could
          create a DebuggerClient without having to initilaize it at
          construction.
        (DebuggerClient::QueryInterface): Moved from Drosera.cpp, the Client
          will be the UIDelegate and FrameLoadDelegate.
        (DebuggerClient::AddRef): For IUnknown.
        (DebuggerClient::Release): For IUnknown.
        (DebuggerClient::didFinishLoadForFrame): Part of the FrameLoadDelegate
          this still needs to set the global context of the server, but
          IWebFrame does not have an accessor for the global context yet.
        (DebuggerClient::windowScriptObjectAvailable): Part of FrameLoadDelegate
          this is a pass through for the same function in the document.
        (DebuggerClient::didReceiveTitle): Unimplemented part of
          FrameLoadDelegate this would change the title of the window.
        (DebuggerClient::createWebViewWithRequest): Part of the
          FrameLoadDelegate.  This is about new windows via Window.open() and
          how their delegates are set.
        (DebuggerClient::runJavaScriptAlertPanelWithMessage): Part of the
          UIDelegate.  Just a debug function for printing messages.
        * Drosera/win/DebuggerClient.h: Moved functionality from Drosera.h
          because the Client should be the UIDelegate and FrameLoadDelegate
          to match the delegates on mac.
        (DebuggerClient::webViewLoaded): Added accessor method.
        * Drosera/win/DebuggerDocumentPlatform.cpp: Added. I had apperently
          forgotten to add this file before.  This is where the platform
          dependent versions of the Documents functions live. Most of these are
          unimplemented because some piece of functionality does not exist on
          Windows yet.
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/win/Drosera.cpp: Removed UIDelegate and FrameLoadDelegate
          responsibilities becaue they belong in the Client. Also I laid the
          groundwork for attaching Drosera to a WebKit process
        (attachWndProc): Now if a server is selected the Client becomes it's
          delegate.
        (Drosera::Drosera): Added the construction of the Client and dictionary
          of server names.
        (Drosera::initUI): This is no longer the delegates, the Client is.
        (Drosera::webViewLoaded): Now asks the Client instead of holding local
          state.
        (Drosera::applicationDidFinishLaunching): Placeholder for needed
          notification registration when it's possible to implement.
        (Drosera::serverLoaded): Ditto
        (Drosera::serverUnloaded): Ditto
        (Drosera::attach): Attach Drosera to the WebKit server.
        * Drosera/win/Drosera.h: Ditto for Drosera.cpp comment.
        (Drosera::getInst):
        (Drosera::setInst):
        (Drosera::knownServers):
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Removed DebuggerApplication
          and added the ServerConnection.
        * Drosera/win/DroseraPrefix.h: Added an ifndef check.
        * Drosera/win/ServerConnection.cpp: Added. This is the interesting part
          Most of the functions are completely unimlemented because they cannot
          connect with the WebKit server, because one does not exist on Windows
          yet.
        (ServerConnection::initWithServerName):
        (ServerConnection::~ServerConnection):
        (ServerConnection::setGlobalContext):
        (ServerConnection::pause):
        (ServerConnection::resume):
        (ServerConnection::stepInto):
        (ServerConnection::switchToServerNamed):
        (ServerConnection::applicationTerminating):
        (ServerConnection::serverConnectionDidDie):
        (ServerConnection::currentFrame):
        * Drosera/win/ServerConnection.h: Added. Ditto.
        (ServerConnection::ServerConnection):

2007-10-19  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin Adler.

        Fix for these broken layout tests on Windows:

        fast/forms/focus-selection-input.html
        fast/forms/focus-selection-textarea.html
        fast/forms/select-accesskey.html

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        correct the VK code for alt key.

2007-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Make the GtkLauncher code slightly more readable.

        * GtkLauncher/main.cpp:
        (setupMainMenu): Added.
        (setupMainWindowUI): Added.
        (main):

2007-10-19  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Adam.

        - don't delay-load WebKit in DumpRenderTree.

        * DumpRenderTree/win/DumpRenderTree.vcproj:

2007-10-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix <rdar://problem/5313523>
        REGRESSION(Leopard): http/tests/incremental/slow-utf8-text.pl fails on Leopard

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Changed to use _responseMIMEType.

2007-10-17  Adam Roben  <aroben@apple.com>

        Make it possible to have Windows-specific tests and results

        When searching for tests to run and the Skipped file, we will only
        look in platform/win and the cross-platform directory. When looking
        for expected results, we will look in platform/win, then
        platform/mac-leopard, then platform/mac, then finally the
        cross-platform directory.

        Reviewed by Sam.

        * Scripts/run-webkit-tests:
        (sub expectedDirectoryForTest): Search in mac-leopard and mac before
        searching in the cross-platform directory.
        (sub buildPlatformHierarchy): Removed some unneeded calls to
        dirname/basename.

2007-10-17  Adam Roben  <aroben@apple.com>

        Add back the call to register WebKit that we had before WebKitInitializer existed

        This is needed to ensure that the right WebKit is used when
        instantiating COM objects.

        Reviewed by Oliver.

        * DumpRenderTree/win/debug_internal.vsprops: Define
        DEBUG_WEBKIT_HAS_SUFFIX.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize):

2007-10-17  Adam Roben  <aroben@apple.com>

        Import File::Basename in webkitdirs since we use it

        * Scripts/webkitdirs.pm:

2007-10-17  Kevin McCullough  <kmccullough@apple.com>

        - Updated the tiger leaks list to make the internal bots green.

        * Scripts/run-webkit-tests:

2007-10-17  Adam Roben  <aroben@apple.com>

        Build fix for VC++ Express

        * FindSafari/FindSafari.vcproj: Explicitly link against advapi32.lib
        and ole32.lib.

2007-10-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Minor mac improvements based on observations I made while implementing the
        Windows code.

        * Drosera/mac/DebuggerApplication.mm: Attach does not need to create the server
        then hand it to the Client who will retain it, it should just be the client who
        creates and owns the server.
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerClient.h: Can now be created with just a server name.
        * Drosera/mac/DebuggerClient.mm: Creates the server.
        (-[DebuggerClient initWithServerName:]):
        * Drosera/mac/ServerConnection.mm: Does not need to include 2 header files, but
        can instead forward declare what it needs.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        * Scripts/run-webkit-tests: Added --add-platform-exceptions; useful when you
        want to turn failing tests into platform-specific test results. Also did a
        number of tweaks, including fixing a potential bug where expectedDirectoryForTest
        would take the type of results into account only some of the time.

2007-10-16  Adam Roben  <aroben@apple.com>

        Add a new nightly launcher script for Windows

        This new script is for versions of Safari that don't delay-load
        WebKit. I had to make FindSafari be able to print out the nightly
        launcher script on stdout because Windows shell scripts can't capture
        the output from a command into an environment variable.

        Reviewed by Steve.

        * FindSafari/FindSafari.cpp:
        (_tmain): Added /printSafariLauncher option.
        * Scripts/run-webkit-nightly.cmd: Added.

2007-10-16  Adam Roben  <aroben@apple.com>

        Replace WebKitInitializer with FindSafari

        We now rely on setting the PATH environment variable to tell Windows
        where to find WebKit and its dependencies (similar to
        DYLD_FRAMEWORK_PATH on Mac).

        This change also make DumpRenderTree no longer delay-load WebKit.

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.sln: Removed WebKitInitializer, added
        FindSafari.
        * DumpRenderTree/win/DumpRenderTree.cpp: Don't use WebKitInitializer.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Don't link against
        WebKitInitializer, don't delay-load WebKit.
        * Scripts/run-javascriptcore-tests: Call setPathForRunningWebKitApp.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/webkitdirs.pm:
        (sub setPathForRunningWebKitApp): Added.
        * WebKitInitializer/WebKitInitializer.cpp: Removed.
        * WebKitInitializer/WebKitInitializer.h: Removed.
        * WebKitInitializer/WebKitInitializer.vcproj: Removed.
        * WebKitInitializer/debug.vsprops: Removed.
        * WebKitInitializer/debug_internal.vsprops: Removed.
        * WebKitInitializer/release.vsprops: Removed.

2007-10-16  Adam Roben  <aroben@apple.com>

        Fix Bug 15532: run-safari fails if Safari is installed in a non-default location

        http://bugs.webkit.org/show_bug.cgi?id=15532

        FindSafari simply prints the location of an installed Safari.exe on
        stdout.

        Reviewed by Darin Adler.

        * FindSafari/FindSafari.cpp: Copied from WebKitTools/WebKitInitializer/WebKitInitializer.cpp.
        (getStringValue):
        (getWebViewCLSID):
        (getInstalledWebKitDirectory):
        (_tmain):
        * FindSafari/FindSafari.vcproj: Added.
        * Scripts/webkitdirs.pm:
        (sub installedSafariPath): Added. Calls FindSafari on Windows.

2007-10-16  Adam Roben  <aroben@apple.com>

        Updated for rename of WebKit_debug.dll to WebKit.dll for the Debug configuration

        Reviewed by Kevin McCullough.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Use WebKitDLLConfigSuffix
        when referring to WebKit.dll.
        * DumpRenderTree/win/debug.vsprops: Added WebKitDLLConfigSuffix.
        * DumpRenderTree/win/debug_internal.vsprops: Ditto.
        * DumpRenderTree/win/release.vsprops: Ditto.
        * Scripts/run-safari: Don't pass /debug to Safari anymore because we
        never have a _debug suffix on WebKit.dll.
        * WebKitInitializer/WebKitInitializer.cpp:
        (initializeWebKit): Only use the _debug suffix for WebKit.dll when
        specified.
        * WebKitInitializer/debug_internal.vsprops: Added
        DEBUG_WEBKIT_HAS_SUFFIX preprocessor definition.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback):
        Remove now-unneeded control/alt key hack; the tests have been updated.

2007-10-16  Kevin McCullough  <kmccullough@apple.com>

        - Updated leaks list because our internal bot upgraded it's version of leopard and
        one of the leaks was fixed between that revision and the bot's previous version of
        leopard.

        * Scripts/run-webkit-tests:

2007-10-15  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - I encapsulated out the server connecton functionality because it is a specific part
        of Drosera that will be platform dependant until the WebScriptDebugServer can be moved
        into WebCore and C++.  But if it is encapsulated out it can be easily replaced on
        Windows.  So the majority of this patch is moving preexisting functionality.

        - Also I removed the prefix header and changed to use config.h because it is more
        standard on how we use config.h in windows and it didn't make much sense to keep
        the prefix header and the config.h

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::DebuggerDocument):
        * Drosera/DebuggerDocument.h:
        * Drosera/config.h:
        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerClient.h:
        * Drosera/mac/DebuggerClient.mm:
        (-[DebuggerClient initWithServerConnection:]):
        (-[DebuggerClient dealloc]):
        (-[DebuggerClient windowDidLoad]):
        (-[DebuggerClient windowWillClose:]):
        (-[DebuggerClient webView:didFinishLoadForFrame:]):
        (-[DebuggerClient webView:didReceiveTitle:forFrame:]):
        * Drosera/mac/DebuggerDocumentPlatform.mm:
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/mac/Drosera.pch: Removed.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * Drosera/mac/ServerConnection.h: Added.
        * Drosera/mac/ServerConnection.mm: Added.
        (-[ServerConnection initWithServerName:]):
        (-[ServerConnection dealloc]):
        (-[ServerConnection setGlobalContext:]):
        (-[ServerConnection pause]):
        (-[ServerConnection resume]):
        (-[ServerConnection stepInto]):
        (-[ServerConnection switchToServerNamed:]):
        (-[ServerConnection applicationTerminating:]):
        (-[ServerConnection serverConnectionDidDie:]):
        (-[ServerConnection webView:didLoadMainResourceForDataSource:]):
        (-[ServerConnection webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[ServerConnection webView:failedToParseSource:baseLineNumber:fromURL:withError:forWebFrame:]):
        (-[ServerConnection webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[ServerConnection webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[ServerConnection webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        (-[ServerConnection webView:exceptionWasRaised:sourceId:line:forWebFrame:]):
        (-[ServerConnection currentFrame]):
        (-[ServerConnection webScriptAttributeKeysForScriptObject:]):
        (-[ServerConnection knownServers]):

2007-10-15  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15002
          Script to automatically search nightly builds for regressions (bisect-builds)

        * Scripts/bisect-builds: Added.

2007-10-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - New JavaScript benchmark
        http://bugs.webkit.org/show_bug.cgi?id=15515

        * Scripts/run-sunspider: Added. Wrapper to run sunspider on the
        current development or release build of JavaScriptCore.

2007-10-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam.

        Fix 'run-webkit-tests --qt' complaining about the --qt argument.

        * Scripts/webkitdirs.pm:
        - Change checkArgv to remove the options from @ARGV to prevent
        them from interfering with further option processing.
        - Fix logic error in determineIsQt that would prevent it from bailing out early.
        - Change isOSX to mean OS X and not Qt or Gtk.  Most of our uses of isOSX assume that this is the meaning
        already, so this change fixes several broken areas of the scripts including 'run-webkit-tests --qt' on a Mac
        incorrectly using the Mac results, and 'run-webkit-tests --gtk' attempting to build the Mac DumpRenderTree.

2007-10-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - added logging of window.prompt and window.confirm

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        Implement the recommended delegate rather than the deprecated one.
        (-[UIDelegate webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:]):
        Added.
        (-[UIDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:]):
        Added.

        * DumpRenderTree/win/UIDelegate.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runJavaScriptAlertPanelWithMessage): Got rid of unnecessary check for null string.
        (UIDelegate::runJavaScriptConfirmPanelWithMessage): Added.
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt): Added.
        (UIDelegate::webViewAddMessageToConsole): Got rid of unnecessary check for null string.

2007-10-15  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Fixed <rdar://5382546> layoutTestController.setCustomPolicyDelegate is unimplemented causing tests to fail

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Like on mac, before running each test, set the webview's policy delegate to null
        (main): allocate the global policy delegate for DRT's custom use
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        Adding files to project
        * DumpRenderTree/win/DumpRenderTreeWin.h: declaring global DRT policy delegate
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        set the webview's policy delegate to DRT's custom one if the test requests it.
        * DumpRenderTree/win/PolicyDelegate.cpp: Added.
        Implementation is a direct port of DumpRenderTree/mac/PolicyDelegate.mm
        (PolicyDelegate::PolicyDelegate):
        (PolicyDelegate::QueryInterface):
        (PolicyDelegate::AddRef):
        (PolicyDelegate::Release):
        (PolicyDelegate::decidePolicyForNavigationAction):
        * DumpRenderTree/win/PolicyDelegate.h: Added.
        (PolicyDelegate::decidePolicyForNewWindowAction):
        (PolicyDelegate::decidePolicyForMIMEType):
        (PolicyDelegate::unableToImplementPolicyWithError):

2007-10-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        * Scripts/webkitdirs.pm: Use qmake binary specified via --qmake on command-line
        when querying for QMAKE_MKSPECS.

2007-10-14  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Adam Roben.

        Fix run-webkit-tests is too greedy calculating platform hierarchy
        http://bugs.webkit.org/show_bug.cgi?id=15465

        Fix run-webkit-tests being too greedy in trying to split the platform name up
        causing it to try and find tests in every directory above the first "-" in the
        path to the LayoutTests

        * Scripts/run-webkit-tests:

2007-10-14  Oleg Sukhodolsky <son.two@gmail.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=15006
        Refactoring of buildQMakeGdkProject()/buildQMakeQtProject() and isGdk()/isQt()
        to reduce code duplication.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        buildQMakeProject() renamed to buildQMakeQtProject().
        buildQMakeGdkProject()/buildQMakeQtProject() now take just one parameter (directory),
        unused $colorize has been removed.

=== Start merge of feature-branch 2007-10-12 ===

2007-10-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        * Scripts/build-webkit: add --help, remove unused --color

2007-10-07  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        * Drosera/mac/DebuggerDocumentPlatform.mm:
        (DebuggerDocument::platformEvaluateScript): null check before trying to make a JSString

2007-10-03  Rob Buis  <buis@kde.org>

        Reviewed by Olliej.

        Adapt to changed location of Ahem font.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-10-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Make pixel tests more useful!
        Finally fix the image diff 0.00% mystery problem
        Highlight any image differences in the image diff.
        Add a link from image diffs back to original test file.

        * DumpRenderTree/mac/ImageDiff.m:
        (compareImages): highlight any differences
        (computePercentageDifferent): round to two decimal places
        * Scripts/run-webkit-tests: add a few more toURL calls for the windows folks

2007-10-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-webkit-tests: print the % image difference on main results page

2007-10-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Update WebKitLauncher to notify you of new builds from the correct branch, rather than always checking trunk.

        * BuildSlaveSupport/build-launcher-app: Generate a file named BRANCH into WebKit.app so that it knows which branch it was built from.
        * WebKitLauncher/start.html: Use the new URL format that includes the branch we were built from.

2007-10-01  Mark Rowe  <mrowe@apple.com>

        * BuildSlaveSupport/build-launcher-dmg: Tweak once more to handle nightly builds for branches.

2007-09-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        DerivedSources.make was finding "ENABLE_SVG" in the string
        "ENABLE_SVG_EXPERIMENTAL_FEATURES" thus --no-svg wasn't functioning
        quite correctly.

        * Scripts/build-webkit: make --no-svg imply --no-svg-experimental

2007-09-25  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Eric.

        * BuildSlaveSupport/build-launcher-dmg: Allow the platform tag to be specified on the command line.
        This makes it possible to automate nightly builds for the feature-branch.

2007-07-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Mark.

        Enable svg experimental features as default here in feature-branch.

        * Scripts/build-webkit:

2007-06-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Weinig.

        Add VIDEO flag for timed media features

        * Scripts/build-webkit

=== End merge of feature-branch 2007-10-12 ===

2007-10-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Updated rational for the leaks list to be more clear.

        * Scripts/run-webkit-tests:

2007-10-11  Kevin McCullough  <kmccullough@apple.com>

        Rubber Stamp by Sam.

        Adding a known Leopard leak that is already fixed but the bot is on an old version of Leopard.
        I believe there was a radar on this leak, it looks familiar to me, but I could not find it.

        * Scripts/run-webkit-tests:

2007-10-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fix compilation using gcc 4.3. Header files have been reorganized and as a result some extra
        includes are needed for INT_MAX, std::auto_ptr and the like.

        * DumpRenderTree/qt/main.cpp:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement layoutTestController.encode/decodeHostName. We still don't pass fast/encoding/idn-security.html, since our QUrl::from/toACE is somewhat stricter than ICU.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::encodeHostName):
        (LayoutTestController::decodeHostName):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Don't set up connections inside QWebPage::createFrame, as users might be reimplementing that method. Make sure we get only one titleChanged() signal per title change, and implement the support for testing this in DRT.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::createFrame):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::titleChanged):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add a dummy implementation for layoutTestController.display() and implement layoutTestController.clearBackForwardList().

        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::clearBackForwardList):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make --git-reviewer work again.

        * Scripts/prepare-ChangeLog:

2007-10-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Eric.

        Connect to the "hovering-over-link" signal emitted by WebKitPage and
        show the current link inside the statusbar.
        This shows how to make use of this signal and allows to easily test
        http://bugs.webkit.org/show_bug.cgi?id=15299.

        * GtkLauncher/main.cpp:
        (hoveringOverLink):
        (main):

2007-10-05  Lars Knoll  <lars@trolltech.com>

        add proper error messages to the FrameLoaderClient.
        Implement ChromeClientQt::closeWindowSoon and
        FrameLoaderClientQt::dispatchCreatePage (which should go away IMO).
        Some fixes in DRT to make it work correctly with multiple windows.

        Reviewed by Maciej.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::createWindow):
        (WebCore::DumpRenderTree::windowCount):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::maybeDump):
        (LayoutTestController::windowCount):
        * DumpRenderTree/qt/jsobjects.h:

2007-10-05  Lars Knoll  <lars@trolltech.com>

        Add a dummy plugin to DRT  to fix fast/dom/Window/Plug-Ins.html.
        Add support for layoutTextController.setCanOpenWindows() to DRT
        fixing another 2 test cases in fast/dom/Window.

        Reviewed by Maciej.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::createWindow):
        (WebCore::DumpRenderTree::resetJSObjects):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/qt/jsobjects.h:
        * DumpRenderTree/qt/main.cpp:
        * DumpRenderTree/qt/testplugin.cpp: Added.
        * DumpRenderTree/qt/testplugin.h: Added.

2007-10-04  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam.

        Remove empty directories.

        * DumpRenderTree/DumpRenderTree.qtproj: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts: Removed.

2007-10-03  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * Scripts/webkitdirs.pm: Automatically use "Debug_Internal" if
        we find the internal libraries in the libraries directory. This
        is helpful for Safari team engineers at Apple.

2007-10-03  Adam Roben  <aroben@apple.com>

        Update the location of AHEM___.TTF after r25968

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-10-03  Alp Toker  <alp@atoker.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=14726
        [gtk] API design. Mapping the WebView delegates to signals.

        Change the API namespace of the Gtk+ port from 'WebKitGtk' to 'WebKit'.

        * GtkLauncher/main.cpp:
        (goToURLBarText):
        (titleChanged):
        (progressChanged):
        (menuMainBackCallback):
        (menuMainForwardCallback):
        (main):

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Reviewed by Rob.

        This fixes --strict mode in run-webkit-tests again after
        the platform dependent test results have been moved.

        * Scripts/run-webkit-tests:

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        remove the hack in run-webkit-tests that forced text only test
        to be taken from the platform independent dir. It was only left
        there from early days.

        Remove platform dependent results for tests that are text only nowadays,
        and add one platform dependent result for a text only test that requires it.

        * Scripts/run-webkit-tests:

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Reviewed by olliej.

        Move the Qt version of DRT into the correct place and put the binary into BUILDDIR/bin.

        * DumpRenderTree/qt/DumpRenderTree.cpp: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp.
        (WebCore::WebFrame::WebFrame):
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::createFrame):
        (WebCore::WebPage::javaScriptAlert):
        (WebCore::WebPage::javaScriptConsoleMessage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::resetJSObjects):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dumpFramesAsText):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTree.h: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h.
        (WebCore::DumpRenderTree::layoutTestController):
        (WebCore::DumpRenderTree::eventSender):
        * DumpRenderTree/qt/DumpRenderTree.pro: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro.
        * DumpRenderTree/qt/fonts.conf: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/fonts.conf.
        * DumpRenderTree/qt/fonts/AHEM____.TTF: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/fonts/AHEM____.TTF.
        * DumpRenderTree/qt/jsobjects.cpp: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp.
        (HackWebFrame::mousePressEvent):
        (HackWebFrame::mouseReleaseEvent):
        (HackWebFrame::mouseMoveEvent):
        (HackWebFrame::HackWebFrame):
        (HackWebFrame::~HackWebFrame):
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::maybeDump):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::queueReload):
        (LayoutTestController::provisionalLoad):
        (LayoutTestController::timerEvent):
        (EventSender::EventSender):
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::leapForward):
        (EventSender::keyDown):
        (EventSender::frameUnderMouse):
        * DumpRenderTree/qt/jsobjects.h: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h.
        (LayoutTestController::isLoading):
        (LayoutTestController::setLoading):
        (LayoutTestController::shouldDumpAsText):
        (LayoutTestController::shouldDumpChildrenAsText):
        (LayoutTestController::shouldWaitUntilDone):
        (LayoutTestController::dumpAsText):
        (LayoutTestController::dumpChildFramesAsText):
        * DumpRenderTree/qt/main.cpp: Renamed from WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/main.cpp.
        (messageHandler):
        (crashHandler):
        (main):
        * Scripts/run-webkit-tests:

2007-10-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Fix build-webkit when both QTDIR and --gtk are set.  The presence of --gtk
        should take precedence over QTDIR when determining which port we are working with.

        * Scripts/webkitdirs.pm:

2007-10-02  Adam Roben  <aroben@apple.com>

        Add keychain to the list of default packages to install

        Rubberstamped by Sam.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip: Regenerated.

2007-10-02  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        Make "--git-commit trunk..HEAD" work with prepare-ChangeLog.
        Also makes WebCore regression test case logic work when using git.

        * Scripts/prepare-ChangeLog:
        (reviewerAndDescriptionForGitCommit): Added.

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        Add API to retrieve the frame name from QWebFrame.
        Implement support for DRT::dumpChildrenAsText.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::dumpFramesAsText):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        Fix the handling of the response header for data urls. Make sure we always pass absolute URLs to WebKit from both DRT and QtLauncher.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):

2007-10-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Update WebKitLauncher to notify you of new builds from the correct branch, rather than always checking trunk.

        * BuildSlaveSupport/build-launcher-app: Generate a file named BRANCH into WebKit.app so that it knows which branch it was built from.
        * WebKitLauncher/start.html: Use the new URL format that includes the branch we were built from.

2007-10-02  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Maciej.

        Configuration changes from build.webkit.org.  The major change is refactoring to work
        with Buildbot 0.7.6, but it does include other smaller changes that have been made in the
        last few weeks.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/build.webkit.org-config/webkit/auth.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/basesteps.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/schedulers.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py:

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by Maciej.

        Add support for eventSender.mouseMove to DRT.
        Fixes fast/css/hover-affects-child.html

        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (EventSender::mouseMoveTo):

2007-10-01  Mark Rowe  <mrowe@apple.com>

        * BuildSlaveSupport/build-launcher-dmg: Tweak once more to handle nightly builds for branches.

2007-10-01  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Hyatt.

        Make svn-apply and svn-unapply work with added files in git-diff formatted patches.

        * Scripts/svn-apply:
        (gitdiff2svndiff): Ignore lines beginning with "new file".
        * Scripts/svn-unapply:
        (gitdiff2svndiff): Ditto.

2007-09-30  George Staikos  <staikos@kde.org>

        Qt build fix (Mac OS X specific)

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-09-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        -Fix http://bugs.webkit.org/show_bug.cgi?id=13226.
        Remove Bakefiles from svn.

        * GtkLauncher/Bakefiles.bkgen: Removed.
        * GtkLauncher/ENV: Removed.
        * GtkLauncher/gdklauncher.bkl: Removed.
        * GtkLauncher/mk: Removed.
        * Scripts/regenerate-makefiles: Removed.

2007-09-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by John.

        - Updating leopard leak list to refelct bugs that have been fixed and no longer leak.

        * Scripts/run-webkit-tests:

2007-09-26  Adam Roben  <aroben@apple.com>

        Make not finding an installed WebKit non-fatal

        What really matters is that we are able to load WebKit and its
        dependencies, not whether we think we've found an installed WebKit.

        Reviewed by Sam.

        * WebKitInitializer/WebKitInitializer.cpp:
        (getWebViewCLSID): Use new LOG_WARNING macro.
        (getInstalledWebKitDirectory): Ditto.
        (initializeWebKit): Don't die if we didn't find an installed WebKit,
        and use new macros.
        * WebKitInitializer/WebKitInitializer.vcproj: Disabled a warning.

2007-09-26  Adam Roben  <aroben@apple.com>

        Committed this file before saving it

        * WebKitInitializer/debug_internal.vsprops:

2007-09-26  Adam Roben  <aroben@apple.com>

        Load WebKit and its dependencies manually so they come from DllDirectory

        I had to change WebKitInitializer to use malloc/free instead of
        new/delete to avoid pulling in WebKit (and its dependencies) early
        through use of fastMalloc.

        Reviewed by Oliver.

        * WebKitInitializer/WebKitInitializer.cpp:
        (getStringValue): Changed to use malloc/free.
        (getInstalledWebKitDirectory): Ditto.
        (initializeWebKit): Call SetDllDirectory first, then load all of
        WebKit's dependencies manually, finally followed by WebKit itself.
        * WebKitInitializer/WebKitInitializer.vcproj: Added a new
        configuration to match our other projects.
        * WebKitInitializer/debug_internal.vsprops: Added.

2007-09-25  Adam Roben  <aroben@apple.com>

        Actually define DEBUG/NDEBUG so that we load WebKit correctly

        Rubberstamped by Sam.

        * WebKitInitializer/WebKitInitializer.vcproj:

2007-09-25  Adam Roben  <aroben@apple.com>

        Make DumpRenderTree delay-load its dependencies

        This lets WebKitInitializer re-route the dependencies to be loaded out
        of the Safari installation directory.

        Also replaced all uses of kCFAllocatorDefault with 0 (which means the
        same thing), since we can't import the kCFAllocatorDefault symbol when
        delay-loading CoreFoundation.dll.

        Rubberstamped by Sam.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        (javaScriptThreads):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWaitToDump):

2007-09-25  Adam Roben  <aroben@apple.com>

        Pull ole32.lib into WebKitInitializer

        Rubberstamped by Sam.

        * WebKitInitializer/WebKitInitializer.vcproj:

2007-09-25  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=14885
          LGPL'ed files contain incorrect FSF address

        * Drosera/config.h:

2007-09-25  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        Make svn-apply and svn-unapply work with git-diff formatted patches.

        * Scripts/svn-apply: Apply a filter to the input if we find a git-diff marker before a patch.
        (gitdiff2svndiff): Added.
        * Scripts/svn-unapply: Ditto.
        (gitdiff2svndiff): Added.

2007-09-25  Adam Roben  <aroben@apple.com>

        Pull advapi32.lib into WebKitInitializer

        This is needed to get the registry functions we use.

        Rubberstamped by Sam.

        * WebKitInitializer/WebKitInitializer.vcproj:

2007-09-25  Adam Roben  <aroben@apple.com>

        Add python and rsync to cygwin-downloader

        Our build slaves need this, and it can't hurt for everyone else to
        have it, too.

        Reviewed by Sam.

        * CygwinDownloader/cygwin-downloader.py: Added python and rsync.
        * CygwinDownloader/cygwin-downloader.zip: Regenerated.

2007-09-25  Adam Roben  <aroben@apple.com>

        Add WebKitInitializer and use it in DumpRenderTree

        WebKitInitializer is a static library that has one function,
        initializeWebKit(). This registers WebKit and sets up the DLL search
        path so that WebKit's dependencies that are installed with Safari can
        be found.

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.sln: Added WebKitInitializer and made
        DumpRenderTree depend on it.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Call initializeWebKit.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Link against
        WebKitInitializer.lib.
        * WebKitInitializer/WebKitInitializer.cpp: Added.
        (getStringValue):
        (getWebViewCLSID):
        (getInstalledWebKitDirectory):
        (initializeWebKit):
        * WebKitInitializer/WebKitInitializer.h: Added.
        * WebKitInitializer/WebKitInitializer.vcproj: Added.
        * WebKitInitializer/debug.vsprops: Added.
        * WebKitInitializer/release.vsprops: Added.

2007-09-25  Adam Roben  <aroben@apple.com>

        Make run-webkit-tests respect set-webkit-configuration

        Reviewed by Sam.

        * Scripts/run-webkit-tests: Initialize $configuration to whatever
        set-webkit-configuration was last set to.

2007-09-25  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Eric.

        * BuildSlaveSupport/build-launcher-dmg: Allow the platform tag to be specified on the command line.
        This makes it possible to automate nightly builds for the feature-branch.

2007-09-25  Adam Roben  <aroben@apple.com>

        A couple of fixes/enhancements to update-webkit-*-libs

        You can now specify WEBKITSUPPORTLIBRARIESZIPDIR=C:\my\special\place
        to tell update-webkit-support-libraries where it should find the
        WebKitSupportLibrary.zip file you downloaded.

        These scripts also now correctly interpret WEBKITLIBRARIESDIR as a
        Windows-style path.

        Reviewed by Sam.

        * Scripts/update-webkit-auxiliary-libs: Also renamed $supportLibsURL
        to $auxiliaryLibsURL and removed an irrelevant comment.
        * Scripts/update-webkit-support-libs:

2007-09-25  Adam Treat  <treat@kde.org>

        Reviewed by Simon and Lars.

        Refactors and cleans up Qt DRT member variable names, member variable
        initialization, style fixes and general code cleanup.

        Adds queueReload slot to LayoutTestController that some tests require.

        Subclasses QWebFrame to make sure that all frames have an associated
        LayoutTestController JS window object.

        Takes advantage of new QWebFrame provisionalLoad signal to ensure frames
        aren't dumped twice.

        EOF fixes.

        Together, this patch fixes some 20+ layout tests in QtWebKit.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::WebFrame::WebFrame):
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::createFrame):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        (WebCore::DumpRenderTree::layoutTestController):
        (WebCore::DumpRenderTree::eventSender):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::maybeDump):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::queueReload):
        (LayoutTestController::provisionalLoad):
        (EventSender::EventSender):
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::frameUnderMouse):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:
        (LayoutTestController::isLoading):
        (LayoutTestController::setLoading):
        (LayoutTestController::dumpAsText):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2007-09-24  Kevin McCullough  <kmccullough@apple.com>


        - Reverted an accidentally checked in file.

        * Drosera/win/DebuggerDocumentPlatform.cpp: Removed.

2007-09-24  Kevin McCullough  <kmccullough@apple.com>
        Reviewed by Sam.

        - Updated project files to not use Edit and Continue for Debug Information since it doesn't work and breaks some functionality.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2007-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Adam.

        * GdkLauncher: Removed.
        * GdkLauncher/Bakefiles.bkgen: Removed.
        * GdkLauncher/ENV: Removed.
        * GdkLauncher/GdkLauncher.pro: Removed.
        * GdkLauncher/gdklauncher.bkl: Removed.
        * GdkLauncher/main.cpp: Removed.
        * GdkLauncher/mk: Removed.
        * GdkLauncher/simple.svg: Removed.
        * GdkLauncher/text.html: Removed.
        * GtkLauncher: Added.
        * GtkLauncher/GdkLauncher.pro: Removed.
        * GtkLauncher/GtkLauncher.pro: Added.
        * GtkLauncher/main.cpp:
        (updateWindowTitle):
        (main):
        * Scripts/build-webkit:
        * Scripts/regenerate-makefiles:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-launcher:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2007-09-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5491013> REGRESSION: -[WebView windowScriptObject] returns a dummy object or nil if a page hasn't loaded (breaks EA Sports Online)

        Assert that the -[WebScriptObject JSObject] return value is only NULL for non-window objects.
        This is tested by plugins/root-object-premature-delete-crash.html.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController accessStoredWebScriptObject]):

2007-09-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver.

        - We need to initialize the ref count to 1 at initialization so that objects are not garbage collected. (actual patch written by Oliver)

        * DumpRenderTree/win/FrameLoaderDelegate.cpp:
        (FrameLoadDelegate::FrameLoadDelegate):

2007-09-20  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Adam.

        Fix: http://bugs.webkit.org/show_bug.cgi?id=15223
        webkitdir.pm::isQt() is not working properly in run-webkit-tests under Linux/Qt

        Added determineIsQt() and determineIsGdk() to webkitdirs.pm.
        Now isQt() and isGdk() use global variables that are only set once.

        An array of all the parameters is now given to build-dumprender which includes
        the platform on linux.

        * Scripts/build-dumprendertree:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2007-09-19  Adam Roben  <aroben@apple.com>

        Rubberstamped by Hyatt.

        * Spinneret: Removed.

2007-09-19  Tuukka Hastrup  <Tuukka.Hastrup@iki.fi>

        Reviewed by David Kilzer.

        * Scripts/webkitdirs.pm: On Gdk and Qt, check that flex, bison, gperf are available.

2007-09-18  Sam Weinig  <sam@webkit.org>

        Add JSRetainPtr.h #include to fix some builds.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:

2007-09-18  Mike Hommey  <glandium@debian.org>

        Reviewed by Adam.

        * Scripts/prepare-ChangeLog:
        - Properly parse GECOS field.
        - Use git configuration for user name and email when appropriate.

2007-09-17  Sam Weinig  <sam@webkit.org>

        Build fix.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Share more code between mac and windows DRT.
            - GCController is now shared.
            - Rename WaitUntilDoneDelegate to FrameLoadDelegate for consistency.

        * DumpRenderTree/GCController.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/FrameLoaderDelegate.cpp: Copied from DumpRenderTree/win/WaitUntilDoneDelegate.cpp.
        (FrameLoadDelegate::FrameLoadDelegate):
        (FrameLoadDelegate::~FrameLoadDelegate):
        (FrameLoadDelegate::windowScriptObjectAvailable):
        * DumpRenderTree/win/FrameLoaderDelegate.h: Copied from DumpRenderTree/win/WaitUntilDoneDelegate.h.
        * DumpRenderTree/win/GCController.cpp: Removed.
        * DumpRenderTree/win/GCController.h: Removed.
        * DumpRenderTree/win/GCControllerWin.cpp: Copied from DumpRenderTree/win/GCController.cpp.
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/win/WaitUntilDoneDelegate.cpp: Removed.
        * DumpRenderTree/win/WaitUntilDoneDelegate.h: Removed.

2007-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Begin sharing code between mac and windows DRT.
            - both now share LayoutTestController.h/cpp and implement platform dependant
              operations in LayoutTestControllerMac/Win.
            - DumpRenderTree.h is now shared.
            - WorkQueue and WorkQueueItem are also shared.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (displayWebView):
        (dumpFrameScrollPosition):
        (dumpFramesAsText):
        (dump):
        (runTest):
        * DumpRenderTree/win/DumpRenderTree.h: Removed.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeWin.h: Copied from DumpRenderTree/win/DumpRenderTree.h.
        * DumpRenderTree/win/EditingDelegate.cpp:
        (EditingDelegate::shouldBeginEditingInDOMRange):
        (EditingDelegate::shouldEndEditingInDOMRange):
        (EditingDelegate::shouldInsertNode):
        (EditingDelegate::shouldInsertText):
        (EditingDelegate::shouldDeleteDOMRange):
        (EditingDelegate::shouldChangeSelectedDOMRange):
        (EditingDelegate::shouldApplyStyle):
        (EditingDelegate::shouldChangeTypingStyle):
        (EditingDelegate::doPlatformCommand):
        (EditingDelegate::webViewDidBeginEditing):
        (EditingDelegate::webViewDidChange):
        (EditingDelegate::webViewDidEndEditing):
        (EditingDelegate::webViewDidChangeTypingStyle):
        (EditingDelegate::webViewDidChangeSelection):
        * DumpRenderTree/win/LayoutTestController.cpp: Removed.
        * DumpRenderTree/win/LayoutTestController.h: Removed.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Copied from DumpRenderTree/win/LayoutTestController.cpp.
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::copyDecodedHostName):
        (LayoutTestController::copyEncodedHostName):
        (LayoutTestController::display):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::notifyDone):
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):
        (jsStringRefToWString):
        (LayoutTestController::queueLoad):
        (LayoutTestController::queueReload):
        (LayoutTestController::queueScript):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setWindowIsKey):
        (waitUntilDoneWatchdogFired):
        (LayoutTestController::setWaitToDump):
        (LayoutTestController::windowCount):
        * DumpRenderTree/win/WaitUntilDoneDelegate.cpp:
        (FrameLoadDelegate::didReceiveTitle):
        (FrameLoadDelegate::processWork):
        (FrameLoadDelegate::locationChangeDone):
        (FrameLoadDelegate::windowScriptObjectAvailable):
        * DumpRenderTree/win/WorkQueue.cpp: Removed.
        * DumpRenderTree/win/WorkQueue.h: Removed.
        * DumpRenderTree/win/WorkQueueItem.cpp: Removed.
        * DumpRenderTree/win/WorkQueueItem.h: Removed.
        * DumpRenderTree/win/WorkQueueItemWin.cpp: Copied from DumpRenderTree/win/WorkQueueItem.cpp.
        (jsStringRefToWString):
        (LoadItem::invoke):
        (ScriptItem::invoke):

2007-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        - Move Windows DumpRenderTree and TestNetscapePlugin to WebCoreTools/DumpRenderTree/win

        * DumpRenderTree/DumpRenderTree.sln: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.sln.
        * DumpRenderTree/DumpRenderTree.vcproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.sln: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DraggingInfo.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/GCController.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/GCController.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.h: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/debug.vsprops: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/debug_internal.vsprops: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/release.vsprops: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/TestNetscapePlugin.def: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/TestNetscapePlugin.rc: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/TestNetscapePlugin.vcproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/main.c: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin/resource.h: Removed.
        * DumpRenderTree/win: Added.
        * DumpRenderTree/win/DraggingInfo.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DraggingInfo.h.
        * DumpRenderTree/win/DumpRenderTree.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp.
        * DumpRenderTree/win/DumpRenderTree.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.h.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj.
        * DumpRenderTree/win/EditingDelegate.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.cpp.
        * DumpRenderTree/win/EditingDelegate.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.h.
        * DumpRenderTree/win/EventSender.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.cpp.
        * DumpRenderTree/win/EventSender.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.h.
        * DumpRenderTree/win/GCController.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/GCController.cpp.
        * DumpRenderTree/win/GCController.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/GCController.h.
        * DumpRenderTree/win/LayoutTestController.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.cpp.
        * DumpRenderTree/win/LayoutTestController.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.h.
        * DumpRenderTree/win/TestNetscapePlugin: Copied from DumpRenderTree/DumpRenderTree.vcproj/TestNetscapePlugin.
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/UIDelegate.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.cpp.
        * DumpRenderTree/win/UIDelegate.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.h.
        * DumpRenderTree/win/WaitUntilDoneDelegate.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.cpp.
        * DumpRenderTree/win/WaitUntilDoneDelegate.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.h.
        * DumpRenderTree/win/WorkQueue.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.cpp.
        * DumpRenderTree/win/WorkQueue.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.h.
        * DumpRenderTree/win/WorkQueueItem.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.cpp.
        * DumpRenderTree/win/WorkQueueItem.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.h.
        * DumpRenderTree/win/debug.vsprops: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/debug.vsprops.
        * DumpRenderTree/win/debug_internal.vsprops: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/debug_internal.vsprops.
        * DumpRenderTree/win/release.vsprops: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/release.vsprops.
        * Scripts/run-webkit-tests: Update to point to the new location of the sln.

2007-09-15  Mark Rowe  <mrowe@apple.com>

        Build fix for DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:  Reinstate -Wno-deprecated-declarations on DumpRenderTree.mm.

2007-09-14  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam Roben.

        Split the WaitUntilDoneDelegate into a UIDelegate and a FrameLoadDelegate.
          - The UIDelegate was put into a new file while the FrameLoadDelegate was
            kept in the WaitUntilDoneDelegate file for the time being.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.cpp: Added.
        (UIDelegate::QueryInterface):
        (UIDelegate::AddRef):
        (UIDelegate::Release):
        (UIDelegate::hasCustomMenuImplementation):
        (UIDelegate::setFrame):
        (UIDelegate::webViewFrame):
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::webViewAddMessageToConsole):
        (UIDelegate::doDragDrop):
        (UIDelegate::webViewGetDlgCode):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/UIDelegate.h: Added.
        (UIDelegate::UIDelegate):
        (UIDelegate::createWebViewWithRequest):
        (UIDelegate::webViewShow):
        (UIDelegate::webViewClose):
        (UIDelegate::webViewFocus):
        (UIDelegate::webViewUnfocus):
        (UIDelegate::webViewFirstResponder):
        (UIDelegate::makeFirstResponder):
        (UIDelegate::setStatusText):
        (UIDelegate::webViewStatusText):
        (UIDelegate::webViewAreToolbarsVisible):
        (UIDelegate::setToolbarsVisible):
        (UIDelegate::webViewIsStatusBarVisible):
        (UIDelegate::setStatusBarVisible):
        (UIDelegate::webViewIsResizable):
        (UIDelegate::setResizable):
        (UIDelegate::setContentRect):
        (UIDelegate::webViewContentRect):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage):
        (UIDelegate::runOpenPanelForFileButtonWithResultListener):
        (UIDelegate::mouseDidMoveOverElement):
        (UIDelegate::contextMenuItemsForElement):
        (UIDelegate::validateUserInterfaceItem):
        (UIDelegate::shouldPerformAction):
        (UIDelegate::dragDestinationActionMaskForDraggingInfo):
        (UIDelegate::willPerformDragDestinationAction):
        (UIDelegate::dragSourceActionMaskForPoint):
        (UIDelegate::willPerformDragSourceAction):
        (UIDelegate::contextMenuItemSelected):
        (UIDelegate::trackCustomPopupMenu):
        (UIDelegate::measureCustomMenuItem):
        (UIDelegate::drawCustomMenuItem):
        (UIDelegate::addCustomMenuDrawingData):
        (UIDelegate::cleanUpCustomMenuDrawingData):
        (UIDelegate::canTakeFocus):
        (UIDelegate::takeFocus):
        (UIDelegate::registerUndoWithTarget):
        (UIDelegate::removeAllActionsWithTarget):
        (UIDelegate::setActionTitle):
        (UIDelegate::undo):
        (UIDelegate::redo):
        (UIDelegate::canUndo):
        (UIDelegate::canRedo):
        (UIDelegate::webViewResizerRect):
        (UIDelegate::webViewDrawResizer):
        (UIDelegate::webViewScrolled):
        (UIDelegate::webViewShouldInterruptJavaScript):
        (UIDelegate::webViewReceivedFocus):
        (UIDelegate::webViewLostFocus):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.cpp:
        (FrameLoadDelegate::QueryInterface):
        (FrameLoadDelegate::AddRef):
        (FrameLoadDelegate::Release):
        (FrameLoadDelegate::didStartProvisionalLoadForFrame):
        (FrameLoadDelegate::didCommitLoadForFrame):
        (FrameLoadDelegate::didReceiveTitle):
        (FrameLoadDelegate::processWork):
        (processWorkTimer):
        (FrameLoadDelegate::locationChangeDone):
        (FrameLoadDelegate::didFinishLoadForFrame):
        (FrameLoadDelegate::didFailLoadWithError):
        (FrameLoadDelegate::windowScriptObjectAvailable):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.h:
        (FrameLoadDelegate::FrameLoadDelegate):

2007-09-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Kevin McCullough.

        Move mac specific globals in to mac/DumpRenderTreeMac.h

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.mm: Removed.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm: Copied from DumpRenderTree/DumpRenderTree.mm.
        * DumpRenderTree/mac/DumpRenderTreeMac.h: Added.

2007-09-14  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Weinig

        You know, Sam, some of us use case-sensitve filesystems...

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/mac/UIDelegate.mm:

2007-09-14  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam Roben.

        - Move dump state data to LayoutTestContoller and add getter/setters to accommodate.
        - Move mac specific DumpRenderTree files to DumpRenderTree/mac

        * DumpRenderTree/AppleScriptController.h: Removed.
        * DumpRenderTree/AppleScriptController.m: Removed.
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.mm:
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        (activateAhemFont):
        (setDefaultColorProfileToRGB):
        (makeLargeMallocFailSilently):
        (dumpFrameScrollPosition):
        (dumpFramesAsText):
        (dump):
        (runTest):
        (-[DumpRenderTreeWindow isKeyWindow]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeDraggingInfo.h: Removed.
        * DumpRenderTree/DumpRenderTreeDraggingInfo.m: Removed.
        * DumpRenderTree/EditingDelegate.h: Removed.
        * DumpRenderTree/EditingDelegate.m: Removed.
        * DumpRenderTree/EventSendingController.h: Removed.
        * DumpRenderTree/EventSendingController.m: Removed.
        * DumpRenderTree/FrameLoadDelegate.h: Removed.
        * DumpRenderTree/FrameLoadDelegate.mm: Removed.
        * DumpRenderTree/GCController.mm: Removed.
        * DumpRenderTree/ImageDiff.m: Removed.
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpAsTextCallback):
        (dumpBackForwardListCallback):
        (dumpChildFramesAsTextCallback):
        (dumpChildFrameScrollPositionsCallback):
        (dumpDOMAsWebArchiveCallback):
        (dumpEditingCallbacksCallback):
        (dumpFrameLoadCallbacksCallback):
        (dumpResourceLoadCallbacksCallback):
        (dumpSelectionRectCallback):
        (dumpSourceAsWebArchiveCallback):
        (dumpTitleChangesCallback):
        (repaintSweepHorizontallyCallback):
        (setCallCloseOnWebViewsCallback):
        (setCanOpenWindowsCallback):
        (setCloseRemainingWindowsWhenCompleteCallback):
        (testRepaintCallback):
        (addFileToPasteboardOnDragCallback):
        (waitUntilDoneCallback):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpAsText):
        (LayoutTestController::setDumpAsText):
        (LayoutTestController::dumpBackForwardList):
        (LayoutTestController::setDumpBackForwardList):
        (LayoutTestController::dumpChildFrameScrollPositions):
        (LayoutTestController::setDumpChildFrameScrollPositions):
        (LayoutTestController::dumpChildFramesAsText):
        (LayoutTestController::setDumpChildFramesAsText):
        (LayoutTestController::dumpDOMAsWebArchive):
        (LayoutTestController::setDumpDOMAsWebArchive):
        (LayoutTestController::dumpSelectionRect):
        (LayoutTestController::setDumpSelectionRect):
        (LayoutTestController::dumpSourceAsWebArchive):
        (LayoutTestController::setDumpSourceAsWebArchive):
        (LayoutTestController::dumpTitleChanges):
        (LayoutTestController::setDumpTitleChanges):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::setDumpEditingCallbacks):
        (LayoutTestController::dumpResourceLoadCallbacks):
        (LayoutTestController::setDumpResourceLoadCallbacks):
        (LayoutTestController::dumpFrameLoadCallbacks):
        (LayoutTestController::setDumpFrameLoadCallbacks):
        (LayoutTestController::addFileToPasteboardOnDrag):
        (LayoutTestController::setAddFileToPasteboardOnDrag):
        (LayoutTestController::callCloseOnWebViews):
        (LayoutTestController::setCallCloseOnWebViews):
        (LayoutTestController::canOpenWindows):
        (LayoutTestController::setCanOpenWindows):
        (LayoutTestController::closeRemainingWindowsWhenComplete):
        (LayoutTestController::setCloseRemainingWindowsWhenComplete):
        (LayoutTestController::testRepaint):
        (LayoutTestController::setTestRepaint):
        (LayoutTestController::testRepaintSweepHorizontally):
        (LayoutTestController::setTestRepaintSweepHorizontally):
        (LayoutTestController::waitToDump):
        (LayoutTestController::windowIsKey):
        * DumpRenderTree/LayoutTestControllerMac.mm: Removed.
        * DumpRenderTree/NavigationController.h: Removed.
        * DumpRenderTree/NavigationController.m: Removed.
        * DumpRenderTree/ObjCController.h: Removed.
        * DumpRenderTree/ObjCController.m: Removed.
        * DumpRenderTree/ObjCPlugin.h: Removed.
        * DumpRenderTree/ObjCPlugin.m: Removed.
        * DumpRenderTree/ObjCPluginFunction.h: Removed.
        * DumpRenderTree/ObjCPluginFunction.m: Removed.
        * DumpRenderTree/PolicyDelegate.h: Removed.
        * DumpRenderTree/PolicyDelegate.m: Removed.
        * DumpRenderTree/ResourceLoadDelegate.h: Removed.
        * DumpRenderTree/ResourceLoadDelegate.m: Removed.
        * DumpRenderTree/TextInputController.h: Removed.
        * DumpRenderTree/TextInputController.m: Removed.
        * DumpRenderTree/UIDelegate.h: Removed.
        * DumpRenderTree/UIDelegate.mm: Removed.
        * DumpRenderTree/WorkQueueItemMac.mm: Removed.
        * DumpRenderTree/mac: Added.
        * DumpRenderTree/mac/AppleScriptController.h: Copied from DumpRenderTree/AppleScriptController.h.
        * DumpRenderTree/mac/AppleScriptController.m: Copied from DumpRenderTree/AppleScriptController.m.
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h: Copied from DumpRenderTree/DumpRenderTreeDraggingInfo.h.
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm: Copied from DumpRenderTree/DumpRenderTreeDraggingInfo.m.
        * DumpRenderTree/mac/EditingDelegate.h: Copied from DumpRenderTree/EditingDelegate.h.
        * DumpRenderTree/mac/EditingDelegate.mm: Copied from DumpRenderTree/EditingDelegate.m.
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        (-[EditingDelegate webViewDidChangeSelection:]):
        * DumpRenderTree/mac/EventSendingController.h: Copied from DumpRenderTree/EventSendingController.h.
        * DumpRenderTree/mac/EventSendingController.mm: Copied from DumpRenderTree/EventSendingController.m.
        * DumpRenderTree/mac/FrameLoadDelegate.h: Copied from DumpRenderTree/FrameLoadDelegate.h.
        * DumpRenderTree/mac/FrameLoadDelegate.mm: Copied from DumpRenderTree/FrameLoadDelegate.mm.
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didReceiveIcon:forFrame:]):
        (-[FrameLoadDelegate webView:didChangeLocationWithinPageForFrame:]):
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):
        (-[FrameLoadDelegate webView:didCancelClientRedirectForFrame:]):
        (-[FrameLoadDelegate webView:willCloseFrame:]):
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):
        (-[FrameLoadDelegate webView:didHandleOnloadEventsForFrame:]):
        * DumpRenderTree/mac/GCControllerMac.mm: Copied from DumpRenderTree/GCController.mm.
        * DumpRenderTree/mac/ImageDiff.m: Copied from DumpRenderTree/ImageDiff.m.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Copied from DumpRenderTree/LayoutTestControllerMac.mm.
        (LayoutTestController::notifyDone):
        (LayoutTestController::setWindowIsKey):
        (LayoutTestController::setWaitToDump):
        * DumpRenderTree/mac/NavigationController.h: Copied from DumpRenderTree/NavigationController.h.
        * DumpRenderTree/mac/NavigationController.m: Copied from DumpRenderTree/NavigationController.m.
        * DumpRenderTree/mac/ObjCController.h: Copied from DumpRenderTree/ObjCController.h.
        * DumpRenderTree/mac/ObjCController.m: Copied from DumpRenderTree/ObjCController.m.
        * DumpRenderTree/mac/ObjCPlugin.h: Copied from DumpRenderTree/ObjCPlugin.h.
        * DumpRenderTree/mac/ObjCPlugin.m: Copied from DumpRenderTree/ObjCPlugin.m.
        * DumpRenderTree/mac/ObjCPluginFunction.h: Copied from DumpRenderTree/ObjCPluginFunction.h.
        * DumpRenderTree/mac/ObjCPluginFunction.m: Copied from DumpRenderTree/ObjCPluginFunction.m.
        * DumpRenderTree/mac/PolicyDelegate.h: Copied from DumpRenderTree/PolicyDelegate.h.
        * DumpRenderTree/mac/PolicyDelegate.mm: Copied from DumpRenderTree/PolicyDelegate.m.
        * DumpRenderTree/mac/ResourceLoadDelegate.h: Copied from DumpRenderTree/ResourceLoadDelegate.h.
        * DumpRenderTree/mac/ResourceLoadDelegate.mm: Copied from DumpRenderTree/ResourceLoadDelegate.m.
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        (-[ResourceLoadDelegate webView:resource:willCacheResponse:fromDataSource:]):
        * DumpRenderTree/mac/TextInputController.h: Copied from DumpRenderTree/TextInputController.h.
        * DumpRenderTree/mac/TextInputController.m: Copied from DumpRenderTree/TextInputController.m.
        * DumpRenderTree/mac/UIDelegate.h: Copied from DumpRenderTree/UIDelegate.h.
        * DumpRenderTree/mac/UIDelegate.mm: Copied from DumpRenderTree/UIDelegate.mm.
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):
        (-[UIDelegate webViewFocus:]):
        (-[UIDelegate webView:createWebViewWithRequest:]):
        (-[UIDelegate webViewClose:]):
        * DumpRenderTree/mac/WorkQueueItemMac.mm: Copied from DumpRenderTree/WorkQueueItemMac.mm.

2007-09-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Changing Win version of Drosera work with recent changes.

        * Drosera/DebuggerDocument.cpp:
        * Drosera/DebuggerDocument.h:
        * Drosera/mac/DebuggerDocumentPlatform.mm:
        (NSStringCreateWithJSStringRef):
        (JSValueRefCreateWithNSString):
        * Drosera/win/DebuggerClient.cpp:
        (DebuggerClient::stepInto):
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-09-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - Moved isPaused into the JS for efficiency and simplicity.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::DebuggerDocument):
        (DebuggerDocument::pauseCallback):
        (DebuggerDocument::resumeCallback):
        (DebuggerDocument::isPaused):
        (DebuggerDocument::staticFunctions):
        * Drosera/DebuggerDocument.h:
        * Drosera/console.js:
        * Drosera/debugger.js:
        * Drosera/mac/DebuggerClient.mm:
        (-[DebuggerClient validateUserInterfaceItem:]):

2007-09-13  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Darin Adler.

        Make DumpRenderTree more cross platform ready.
        - Convert GCController to use the JSCore API instead of the WebScriptObject.
        - Use CF types instead of NS objects.
        - General cleanup.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.mm:
        (dumpRenderTree):
        (dump):
        (runTest):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/EditingDelegate.m:
        * DumpRenderTree/FrameLoadDelegate.h:
        * DumpRenderTree/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        * DumpRenderTree/GCController.cpp: Added.
        (GCController::GCController):
        (GCController::~GCController):
        (collectCallback):
        (collectOnAlternateThreadCallback):
        (getJSObjectCountCallback):
        (GCController::makeWindowObject):
        (GCController::getJSClass):
        (GCController::staticFunctions):
        * DumpRenderTree/GCController.h:
        * DumpRenderTree/GCController.mm:
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::makeWindowObject):
        (LayoutTestController::getJSClass):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/LayoutTestControllerMac.mm:
        (LayoutTestController::addDisallowedURL):
        (waitUntilDoneWatchdogFired):
        (LayoutTestController::waitUntilDone):
        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):

2007-09-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Stephanie.

        Fix leaks in mac DumpRenderTree.

        * DumpRenderTree/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]): Initalize in the correct order.
        (-[FrameLoadDelegate processWork:]): Delete WorkQueueItem's after dequeueing them.
        * DumpRenderTree/LayoutTestController.cpp:
        (decodeHostNameCallback): Put return value in a temporary JSRetainPtr to ensure it gets released.
        (encodeHostNameCallback): ditto.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/LayoutTestControllerMac.mm:
        (LayoutTestController::copyDecodedHostName): Rename function to signal that it follows the Create rule.
        (LayoutTestController::copyEncodedHostName): ditto
        (LayoutTestController::queueLoad): Use a JSRetainPtr to ensure the url gets released.

2007-09-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof.

        - Updated Leopard leak list to include a leak which appears to be fixed in 9A549 but not the version the bot is on.  This will allow us to get the bot green, but later we should remove it.

        * Scripts/run-webkit-tests:

2007-09-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Simplified code paths and extracted out functions to increase encapsulation.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::breakpointEditorHTMLCallback):
        (DebuggerDocument::isPausedCallback):
        (DebuggerDocument::pauseCallback):
        (DebuggerDocument::resumeCallback):
        (DebuggerDocument::stepIntoCallback):
        (DebuggerDocument::evaluateScriptCallback):
        (DebuggerDocument::currentFunctionStackCallback):
        (DebuggerDocument::localScopeVariableNamesForCallFrameCallback):
        (DebuggerDocument::valueForScopeVariableNamedCallback):
        (DebuggerDocument::logCallback):
        * Drosera/DebuggerDocument.h:
        (DebuggerDocument::getPaused):
        * Drosera/mac/DebuggerClient.mm:
        (-[DebuggerClient pause:]):
        (-[DebuggerClient resume:]):
        (-[DebuggerClient stepInto:]):
        (-[DebuggerClient stepOver:]):
        (-[DebuggerClient stepOut:]):
        (-[DebuggerClient showConsole:]):
        (-[DebuggerClient closeCurrentFile:]):
        (-[DebuggerClient validateUserInterfaceItem:]):
        * Drosera/mac/DebuggerDocumentPlatform.mm: Added.
        (+[NSString stringOrNilFromWebScriptResult:]):
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:

2007-09-12  Sam Weinig  <sam@webkit.org>

        Build fix for Buildbot.

        * DumpRenderTree/DumpRenderTree.mm:
        (dump):

2007-09-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        - Updated the leaks list for leopard to help identify regressions.

        * Scripts/run-webkit-tests:

2007-09-12  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Darin Adler.

        Convert the LayoutTestController to use the JSCore API instead of WebScriptObject.

        * DumpRenderTree/DumpRenderTree.h: Re-order variables.
        * DumpRenderTree/DumpRenderTree.m: Removed.
        * DumpRenderTree/DumpRenderTree.mm: Copied from DumpRenderTree/DumpRenderTree.m.
        (stopJavaScriptThreads): Fix initialization.
        (setDefaultColorProfileToRGB): Add explicit cast from void*.
        (dumpRenderTree): Ditto.
        (runTest):
        Used the WorkQueue from the windows DRT instead of the old NSMutableArray one.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/FrameLoadDelegate.h: Add LayoutTestController instance variable.
        * DumpRenderTree/FrameLoadDelegate.m: Removed.
        * DumpRenderTree/FrameLoadDelegate.mm: Copied from DumpRenderTree/FrameLoadDelegate.m.
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        Convert to use the new JSCore based LayoutTestController and the new WorkQueue.

        * DumpRenderTree/LayoutTestController.cpp: Added.
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::~LayoutTestController):
        (dumpAsTextCallback):
        (dumpBackForwardListCallback):
        (dumpChildFramesAsTextCallback):
        (dumpChildFrameScrollPositionsCallback):
        (dumpDOMAsWebArchiveCallback):
        (dumpEditingCallbacksCallback):
        (dumpFrameLoadCallbacksCallback):
        (dumpResourceLoadCallbacksCallback):
        (dumpSelectionRectCallback):
        (dumpSourceAsWebArchiveCallback):
        (dumpTitleChangesCallback):
        (repaintSweepHorizontallyCallback):
        (setCallCloseOnWebViewsCallback):
        (setCanOpenWindowsCallback):
        (setCloseRemainingWindowsWhenCompleteCallback):
        (testRepaintCallback):
        (addFileToPasteboardOnDragCallback):
        (addDisallowedURLCallback):
        (clearBackForwardListCallback):
        (decodeHostNameCallback):
        (displayCallback):
        (encodeHostNameCallback):
        (keepWebHistoryCallback):
        (notifyDoneCallback):
        (queueBackNavigationCallback):
        (queueForwardNavigationCallback):
        (queueLoadCallback):
        (queueReloadCallback):
        (queueScriptCallback):
        (setAcceptsEditingCallback):
        (setCustomPolicyDelegateCallback):
        (setMainFrameIsFirstResponderCallback):
        (setTabKeyCyclesThroughElementsCallback):
        (setUseDashboardCompatibilityModeCallback):
        (setUserStyleSheetEnabledCallback):
        (setUserStyleSheetLocationCallback):
        (setWindowIsKeyCallback):
        (waitUntilDoneCallback):
        (windowCountCallback):
        (LayoutTestController::makeWindowObject):
        (LayoutTestController::getLayoutTestControllerJSClass):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h: Replaced.
        * DumpRenderTree/LayoutTestController.m: Removed.
        * DumpRenderTree/LayoutTestControllerMac.mm: Added.
        (LayoutTestController::dumpAsText):
        (LayoutTestController::dumpBackForwardList):
        (LayoutTestController::dumpChildFramesAsText):
        (LayoutTestController::dumpChildFrameScrollPositions):
        (LayoutTestController::dumpDOMAsWebArchive):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::dumpFrameLoadCallbacks):
        (LayoutTestController::dumpResourceLoadCallbacks):
        (LayoutTestController::dumpSelectionRect):
        (LayoutTestController::dumpSourceAsWebArchive):
        (LayoutTestController::dumpTitleChanges):
        (LayoutTestController::repaintSweepHorizontally):
        (LayoutTestController::setCallCloseOnWebViews):
        (LayoutTestController::setCanOpenWindows):
        (LayoutTestController::setCloseRemainingWindowsWhenComplete):
        (LayoutTestController::testRepaint):
        (LayoutTestController::addFileToPasteboardOnDrag):
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::decodeHostName):
        (LayoutTestController::encodeHostName):
        (LayoutTestController::display):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::notifyDone):
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):
        (LayoutTestController::queueLoad):
        (LayoutTestController::queueReload):
        (LayoutTestController::queueScript):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setWindowIsKey):
        (+[WaitToDumpWatchdog waitUntilDoneWatchdogFired]):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::windowCount):
        Use the JSCore API to implement the LayoutTestController.

        * DumpRenderTree/ObjCController.h:
        * DumpRenderTree/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController accessStoredWebScriptObject]):
        (-[ObjCController storeWebScriptObject:]):
        (-[ObjCController dealloc]):
        (-[ObjCController invokeUndefinedMethodFromWebScript:withArguments:]):
        Move WebScriptObject tests to ObjCController.

        * DumpRenderTree/UIDelegate.m: Removed.
        * DumpRenderTree/UIDelegate.mm: Copied from DumpRenderTree/UIDelegate.m.

        * DumpRenderTree/WorkQueue.cpp: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.cpp.
        * DumpRenderTree/WorkQueue.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueue.h.
        * DumpRenderTree/WorkQueueItem.h: Copied from DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WorkQueueItem.h.
        (WorkQueueItem::~WorkQueueItem):
        (LoadItem::LoadItem):
        (LoadItem::url):
        (LoadItem::target):
        (ScriptItem::ScriptItem):
        (ScriptItem::script):
        * DumpRenderTree/WorkQueueItemMac.mm: Added.
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):
        Copy WorkQueue and WorkQueueItem from windows DRT. Changed the WorkQueueItem to use JSStringRefs instead of wstrings
        to avoid conversion until the last possible moment.  These changes will be merged with the windows DRT when we start
        sharing code.

2007-09-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - Updated Win side to take advantage of the platform separating changes.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::localScopeVariableNamesForCallFrame):
        * Drosera/DebuggerDocument.h:
        * Drosera/win/DebuggerClient.cpp:
        (DebuggerClient::pause):
        (DebuggerClient::resume):
        (DebuggerClient::stepInto):
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/win/DebuggerClient.h:
        * Drosera/win/Drosera.cpp:
        (Drosera::Drosera):
        (Drosera::windowScriptObjectAvailable):
        (Drosera::initWithServerName):
        (Drosera::switchToServerNamed):
        * Drosera/win/Drosera.h:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-09-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Just doing the moves in a separate patch so the changes are easier to see.

        * Drosera/win/DebuggerClient.cpp: Copied from Drosera/win/DebuggerDocumentWin.cpp.
        * Drosera/win/DebuggerClient.h: Copied from Drosera/win/DebuggerDocumentWin.h.
        * Drosera/win/DebuggerDocumentWin.cpp: Removed.
        * Drosera/win/DebuggerDocumentWin.h: Removed.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:

2007-09-11  Sven Herzberg  <sven@imendio.com>

        Don't overwrite LD_LIBRARY_PATH, prepend to it. Fixes:
        http://bugs.webkit.org/show_bug.cgi?id=15176

        * Scripts/run-launcher: don't replace LD_LIBRARY_PATH with
        $projectDir, but prepend $projectDir to LD_LIBRARY_PATH (to preserve
        other paths eg. from jhbuild)

2007-09-10  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Made an order-of-deletion mistake.

        * Drosera/DebuggerDocument.h:
        * Drosera/ForwardingHeaders/wtf/Assertions.h: Removed.
        * Drosera/ForwardingHeaders/wtf/Noncopyable.h: Removed.
        * Drosera/ForwardingHeaders/wtf/OwnPtr.h: Removed.
        * Drosera/mac/DebuggerClient.mm:
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:

2007-09-10  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Renaming DebuggerDocument[platform] to DebuggerClient to be more clear.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::DebuggerDocument):
        * Drosera/DebuggerDocument.h:
        * Drosera/ForwardingHeaders/wtf/Assertions.h: Added.
        * Drosera/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * Drosera/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerClient.h: Copied from Drosera/mac/DebuggerDocumentMac.h.
        * Drosera/mac/DebuggerClient.mm: Copied from Drosera/mac/DebuggerDocumentMac.mm.
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/mac/DebuggerDocumentMac.h: Removed.
        * Drosera/mac/DebuggerDocumentMac.mm: Removed.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:

2007-09-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove 'objC' prefix from methods now in the ObjCController.

        * DumpRenderTree/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController classNameOf:]):
        (-[ObjCController objectOfClass:]):
        (-[ObjCController identityIsEqual::]):
        (-[ObjCController longLongRoundTrip:]):
        (-[ObjCController unsignedLongLongRoundTrip:]):

2007-09-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Initial refactor of DumpRenderTree in preparation of making it more platform independent.
        - Move LayoutTestController into its own file.
        - Move Objective-C only functions on LayoutTestController into a new controller called the
          ObjCController.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (displayWebView):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/FrameLoadDelegate.m:
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        * DumpRenderTree/LayoutTestController.h: Added.
        * DumpRenderTree/LayoutTestController.m: Added.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController clearBackForwardList]):
        (-[LayoutTestController setUseDashboardCompatibilityMode:]):
        (-[LayoutTestController setCloseRemainingWindowsWhenComplete:]):
        (-[LayoutTestController setCustomPolicyDelegate:]):
        (-[LayoutTestController keepWebHistory]):
        (-[LayoutTestController setCallCloseOnWebViews:]):
        (-[LayoutTestController setCanOpenWindows]):
        (-[LayoutTestController waitUntilDone]):
        (-[LayoutTestController waitUntilDoneWatchdogFired]):
        (-[LayoutTestController notifyDone]):
        (-[LayoutTestController dumpAsText]):
        (-[LayoutTestController addFileToPasteboardOnDrag]):
        (-[LayoutTestController addDisallowedURL:]):
        (-[LayoutTestController setUserStyleSheetLocation:]):
        (-[LayoutTestController setUserStyleSheetEnabled:]):
        (-[LayoutTestController dumpDOMAsWebArchive]):
        (-[LayoutTestController dumpSourceAsWebArchive]):
        (-[LayoutTestController dumpSelectionRect]):
        (-[LayoutTestController dumpTitleChanges]):
        (-[LayoutTestController dumpBackForwardList]):
        (-[LayoutTestController windowCount]):
        (-[LayoutTestController dumpChildFrameScrollPositions]):
        (-[LayoutTestController dumpChildFramesAsText]):
        (-[LayoutTestController dumpEditingCallbacks]):
        (-[LayoutTestController dumpResourceLoadCallbacks]):
        (-[LayoutTestController dumpFrameLoadCallbacks]):
        (-[LayoutTestController setWindowIsKey:]):
        (-[LayoutTestController setMainFrameIsFirstResponder:]):
        (-[LayoutTestController display]):
        (-[LayoutTestController testRepaint]):
        (-[LayoutTestController repaintSweepHorizontally]):
        (-[LayoutTestController invokeUndefinedMethodFromWebScript:withArguments:]):
        (-[LayoutTestController _addWorkForTarget:selector:arg1:arg2:]):
        (-[LayoutTestController _doLoad:target:]):
        (-[LayoutTestController _doBackOrForwardNavigation:]):
        (-[LayoutTestController queueBackNavigation:]):
        (-[LayoutTestController queueForwardNavigation:]):
        (-[LayoutTestController queueReload]):
        (-[LayoutTestController queueScript:]):
        (-[LayoutTestController queueLoad:target:]):
        (-[LayoutTestController setAcceptsEditing:]):
        (-[LayoutTestController setTabKeyCyclesThroughElements:]):
        (-[LayoutTestController storeWebScriptObject:]):
        (-[LayoutTestController accessStoredWebScriptObject]):
        (-[LayoutTestController dealloc]):
        (-[LayoutTestController decodeHostName:]):
        (-[LayoutTestController encodeHostName:]):
        * DumpRenderTree/ObjCController.h: Added.
        * DumpRenderTree/ObjCController.m: Added.
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController objCClassNameOf:]):
        (-[ObjCController objCObjectOfClass:]):
        (-[ObjCController objCIdentityIsEqual::]):
        (-[ObjCController objCLongLongRoundTrip:]):
        (-[ObjCController objCUnsignedLongLongRoundTrip:]):
        (-[ObjCController testWrapperRoundTripping:]):

2007-09-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Alice.

        Strip trailing and leading space/newline characters from skiplist file names.

        * Scripts/run-webkit-tests:

2007-09-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - Changed Drosera to take advantage of the JSRetainPtr changes.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::breakpointEditorHTML):
        (DebuggerDocument::evaluateScript):
        (DebuggerDocument::valueForScopeVariableNamed):
        (DebuggerDocument::log):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::toJSArray):
        (DebuggerDocument::callFunctionOnObject):
        (DebuggerDocument::logException):
        * Drosera/mac/DebuggerDocumentMac.mm:
        (-[DebuggerClientMac webView:didLoadMainResourceForDataSource:]):
        (-[DebuggerClientMac webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::getPlatformCurrentFunctionStack):
        (DebuggerDocument::getPlatformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):

2007-09-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam, Sam, Darin.

        - Separated what is platform dependant from what is not.  Creating the structure needed for Drosera for Win.

        * Drosera/Debugger.h: Added.
        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::breakpointEditorHTMLCallback):
        (DebuggerDocument::isPausedCallback):
        (DebuggerDocument::pauseCallback):
        (DebuggerDocument::resumeCallback):
        (DebuggerDocument::stepIntoCallback):
        (DebuggerDocument::evaluateScriptCallback):
        (DebuggerDocument::currentFunctionStackCallback):
        (DebuggerDocument::localScopeVariableNamesForCallFrameCallback):
        (DebuggerDocument::valueForScopeVariableNamedCallback):
        (DebuggerDocument::logCallback):
        (DebuggerDocument::breakpointEditorHTML):
        (DebuggerDocument::isPaused):
        (DebuggerDocument::pause):
        (DebuggerDocument::resume):
        (DebuggerDocument::stepInto):
        (DebuggerDocument::evaluateScript):
        (DebuggerDocument::currentFunctionStack):
        (DebuggerDocument::localScopeVariableNamesForCallFrame):
        (DebuggerDocument::valueForScopeVariableNamed):
        (DebuggerDocument::log):
        (DebuggerDocument::toolbarPause):
        (DebuggerDocument::toolbarResume):
        (DebuggerDocument::toolbarStepInto):
        (DebuggerDocument::toolbarStepOver):
        (DebuggerDocument::toolbarStepOut):
        (DebuggerDocument::toolbarShowConsole):
        (DebuggerDocument::toolbarCloseCurrentFile):
        (DebuggerDocument::updateFileSource):
        (DebuggerDocument::didParseScript):
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::exceptionWasRaised):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::toJSArray):
        (DebuggerDocument::callGlobalFunction):
        (DebuggerDocument::callFunctionOnObject):
        (DebuggerDocument::getDroseraJSClass):
        (DebuggerDocument::staticFunctions):
        (DebuggerDocument::logException):
        * Drosera/DebuggerDocument.h:
        (DebuggerDocument::DebuggerDocument):
        * Drosera/ForwardingHeaders: Added.
        * Drosera/ForwardingHeaders/wtf: Added.
        * Drosera/ForwardingHeaders/wtf/Platform.h: Added.
        * Drosera/config.h:
        * Drosera/console.html:
        * Drosera/console.js:
        * Drosera/debugger.js:
        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerDocumentMac.h:
        * Drosera/mac/DebuggerDocumentMac.mm:
        (+[NSString stringOrNilFromWebScriptResult:]):
        (+[DebuggerClientMac log:]):
        (-[DebuggerClientMac initWithServerName:]):
        (-[DebuggerClientMac dealloc]):
        (-[DebuggerClientMac pause]):
        (-[DebuggerClientMac resume]):
        (-[DebuggerClientMac pause:]):
        (-[DebuggerClientMac resume:]):
        (-[DebuggerClientMac stepInto:]):
        (-[DebuggerClientMac stepOver:]):
        (-[DebuggerClientMac stepOut:]):
        (-[DebuggerClientMac showConsole:]):
        (-[DebuggerClientMac closeCurrentFile:]):
        (-[DebuggerClientMac validateUserInterfaceItem:]):
        (-[DebuggerClientMac webView:windowScriptObjectAvailable:]):
        (-[DebuggerClientMac webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerClientMac webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[DebuggerClientMac webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerClientMac webView:exceptionWasRaised:sourceId:line:forWebFrame:]):
        (DebuggerDocument::platformPause):
        (DebuggerDocument::platformResume):
        (DebuggerDocument::platformStepInto):
        (DebuggerDocument::platformEvaluateScript):
        (DebuggerDocument::platformCurrentFunctionStack):
        (DebuggerDocument::platformLocalScopeVariableNamesForCallFrame):
        (DebuggerDocument::platformValueForScopeVariableNamed):
        (DebuggerDocument::platformLog):
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:

2007-09-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Register the WebKit DLL on initialization of the DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (initialize):

2007-09-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Fix many layout test failures caused by r25364.
        Set text size to standand size at the begining of each test matching the mac.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (runTest):

2007-09-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Fix for <rdar://problem/5382277>
        Implement eventSender.textZoomIn and eventSender.textZoomOut for windows DRT.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EventSender.cpp:
        (textZoomInCallback):
        (textZoomOutCallback):

2007-08-29  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Adam.

        Added case-insensitivity to checks for adding regression tests.

        * Scripts/prepare-ChangeLog:
        (generateFileList):

2007-08-28  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Maciej.

        Ignore files in /resources/ subdirectories when creating a list of added tests.

        * Scripts/prepare-ChangeLog:
        (generateFileList):

2007-08-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by John.

        - Removed Leopard leaks list since all of those radars were fixed.

        * Scripts/run-webkit-tests:

2007-08-27  Adam Roben  <aroben@apple.com>

        Rubberstamped by Mark.

        * Scripts/pdevenv: Pass arguments along to devenv.com.

2007-08-26  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Mark Rowe.

        Update prepare-ChangeLog to generate the datestamp in the correct timezone.

        * Scripts/prepare-ChangeLog:
        (changeLogDate): Added.

2007-08-24  Sam Weinig  <sam@webkit.org>

        Revert r25216 which renamed the COM DOM bindings to use Deprecated prefix.

2007-08-24  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        <rdar://problem/5434593> Deprecate current manually written COM DOM bindings in anticipation of autogeneration

        Rename COM DOM bindings to use Deprecated prefix.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dump):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.cpp:
        (dumpPath):
        (dump):
        (EditingDelegate::shouldBeginEditingInDOMRange):
        (EditingDelegate::shouldEndEditingInDOMRange):
        (EditingDelegate::shouldInsertNode):
        (EditingDelegate::shouldInsertText):
        (EditingDelegate::shouldDeleteDOMRange):
        (EditingDelegate::shouldChangeSelectedDOMRange):
        (EditingDelegate::shouldApplyStyle):
        (EditingDelegate::shouldChangeTypingStyle):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/EditingDelegate.h:

2007-08-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by John H.

        WebDataSource::response can legitimately have a null response, so we
        must check that case.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.cpp:
        (queueLoadCallback):

2007-08-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin and Adam.

        - DumpRenderTree changes to allow testing for
          http://bugs.webkit.org/show_bug.cgi?id=11756
          REGRESSION: link targeting a frame in another window does not work
          <rdar://problem/5286420>

        Use a frame group name for all WebViews created by DumpRenderTree to
        allow testing of cross-page frame lookup.

        * DumpRenderTree/DumpRenderTree.m:
        (createWebView): Pass group name to -[WebView initWithFrame:frameName:groupName:].
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main): Pass group name to WebView::initWithFrame(RECT, BSTR, BSTR).

2007-08-23  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        Quote the $sslCertificate path in case it contains a space.

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2007-08-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by John and Adam.

        WebDataSource::response can legitimately have a null response, so we
        must check that case.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (dump):

2007-08-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof.

        - Changing the usage to be more clear.

        * Scripts/run-testkjs:

2007-08-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben

        * DumpRenderTree/DumpRenderTree.m:
        (runTest):
        call new +[WebView _setUsesTestModeFocusRingColor:YES] so we get the same focus ring colors
        in layout tests on Tiger and Leopard

2007-08-20  Adam Roben  <aroben@apple.com>

        Put LayoutTests after all other ChangeLogs in commit logs

        We use "~" to sort LayoutTests after all the other ChangeLogs because
        "~" is the last ASCII character (other than "DEL").

        Reviewed by Sam.

        * Scripts/commit-log-editor:

2007-08-20  Adam Roben  <aroben@apple.com>

        Detect that DRT crashed even if a crash dialog is running

        On Windows, when DRT crashes a crash dialog commonly appears. The DRT
        process is still running at this point, so run-webkit-tests wouldn't
        detect that DRT had crashed. We now record the crash in our SIGPIPE
        handler so that we know if DRT crashed even if the crash dialog is up.

        Reviewed by Sam.

        * Scripts/run-webkit-tests:
        (sub catch_pipe): Set the crashed bit.
        (sub openDumpTool): Reset the crashed bit.
        (sub dumpToolDidCrash): Check the crashed bit.

2007-08-20  Adam Roben  <aroben@apple.com>

        Fix Bug 15026: prepare-ChangeLog should list new tests in WebCore/ChangeLog

        http://bugs.webkit.org/show_bug.cgi?id=15026

        Reviewed by David Kilzer and Darin Adler.

        * Scripts/prepare-ChangeLog:
        (sub isModifiedStatus): Split out from isModifiedOrAddedStatus.
        (sub isAddedStatus): Ditto.
        (sub testListForChangeLog): Added.

2007-08-19  Oleg Sukhodolsky  <son.two@gmail.com>

        Reviewed by Mark.

        -fixes http://bugs.webkit.org/show_bug.cgi?id=14632

        * Scripts/webkitdirs.pm:
        qt and gtk ports now explicitly pass debug (or release) mode to qmake.

2007-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - don't look for Apple-style localizable strings in the GTK version of WebKit

        * Scripts/extract-localizable-strings: Add a feature where you can pass in the
        name of subdirectories to skip.
        * Scripts/update-webkit-localizable-strings: Pass WebKit/gtk as a subdirectory
        to skip.

2007-08-17  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_SetWindow):

2007-08-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5379040>
        REGRESSION (Tiger-Leopard): ADOBE: Safari calls NPP_SetWindow with bad values sometimes

        Add a way for the plug-in to dump the width and height when it gets its  NPP_SetWindow call.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_New):
        (NPP_SetWindow):

2007-08-16  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Fix <rdar://problem/5360135> REGRESSION (Leopard only): editing/selection/5354455-1.html is causing subsequent tests to fail

        * DumpRenderTree/DumpRenderTree.m:
        (createWebView):
        Create a DumpRenderTreeWindow instead of a NSWindow, now that a DumpRenderTreeWindow no longer poses as a NSWindow.
        (dumpRenderTree):
        Don't pose as a NSWindow, since when the spelling panel gets created, it creates an NSWindow which ends up creating a DumpRenderTreeWindow.

2007-08-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Added tests for regressions in other components.  In this case we also need to add a skipped list for Tiger since this functionality didn't exist in 10.4.

        * Scripts/run-webkit-tests:

2007-08-15  Timothy Hatcher  <timothy@apple.com>

        Look for the new Xcode 3 preference key (PBXApplicationwideBuildSettings) for the global build locations.
        The value of PBXApplicationwideBuildSettings is a dictionary, so we have to pull the SYMROOT out of it.

        Also pass xcodebuild OBJROOT with the same value as SYMROOT if we fallback to the default WebKitBuild,
        this prevents making "build" directories in each project folder.

        * Scripts/webkitdirs.pm:

2007-08-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Kevin Mccullough.

        Removed special case that didn't belong. (It would allow a global
        initializer to sneak into production builds, which would cause a
        system-wide performance regression on Mac OS X.)

        * Scripts/check-for-global-initializers:

2007-08-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Tim.

        <rdar://problem/5408255> REGRESSION: In Mail, clicking the containing element's UI closebox doesn't delete element

        * DumpRenderTree/EditingDelegate.m:
        (-[EditingDelegate webView:shouldShowDeleteInterfaceForElement:]): Added, return YES
        only for elements with the class needsDeletionUI.

2007-08-14  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14965
          svn-create-patch uses deprecated tail switch

        * Scripts/svn-create-patch: Use 'tail -n +3' instead of 'tail +3'.

2007-08-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Use the cygwin specific Apache config file under cygwin.

        * Scripts/run-webkit-httpd:

2007-08-12  Adam Roben  <aroben@apple.com>

        Generate results for new tests in a more logical location

        New platform-specific tests always have their results generated right
        next to the test. New cross-platform tests will have their results
        generated a) in the cross-platform directory, if they are text-only,
        or b) in the least-specific platform directory, if they are render
        tree dumps.

        Reviewed by Lars.

        * Scripts/run-webkit-tests:

2007-08-12  Adam Roben  <aroben@apple.com>

        Print the actual directory where new results are generated.

        Before, we were printing an unpredictable, context-specific substring
        of the directory.

        Reviewed by Lars.

        * Scripts/run-webkit-tests:

2007-08-12  Adam Roben  <aroben@apple.com>

        Factor some common code into a stripExtension() subroutine.

        Reviewed by Lars.

        * Scripts/run-webkit-tests: Also removed some debugging output.

2007-08-11  Matt Lilek  <pewtermoose@gmail.com>

        Reviewed over and over and over by Adam Roben.

        Bug 14740: Hierarchical layout tests and platform organization
        http://bugs.webkit.org/show_bug.cgi?id=14740

        Add support for platform-specific layout tests and results.

        * Scripts/run-webkit-tests:

2007-08-11  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        Refactored svn-create-path to use a hash-of-hashes data structure to keep
        track of changed files.  In the top level hash, keys are paths to files and
        values are 'fileData' hashes with the following keys and values:

        - isBinary: boolean value (set to true for non-text files like images, etc.)
        - isTestFile: boolean value (set to true if file exists within a known test
          directory)
        - modificationType: string equal to one of 'addition', 'additionWithHistory',
          'modification' or 'deletion'
        - path: string equal to the path to the file (this may seem redundant, but it
          is required to use the second-level 'fileData' hash independent of the
          top-level hash)
        - sourceFile: [optional] string equal to the path of the original file that was
          copied or moved
        - sourceRevision: [optional] string equal to the revision of the original file
          that was copied or moved

        * Scripts/svn-create-patch: Moved call to GetOptions() to its own statement
        that saves the return value in $result, then checks it before printing help.
        Combined sourceFiles, %testFiles, and %binaryFiles into single %diffFiles hash
        and eliminated two for() loops.
        (binarycmp): Added.  Used with sort() to order non-binary files before binary
        files.
        (findBaseUrl): Added.  Extracted from findSourceFileAndRevision().
        (findMimeType): Added optional second argument that takes a revision number.
        (generateDiff): Updated to take one fileData argument instead of three ($file,
        $modificationType, $isBinary).
        (generateFileList): Updated to take one hash ref argument (%diffFiles)
        instead of three (%sourceFiles, %testFiles, %binaryFiles).  Populates
        %diffFiles using paths for keys and fileData hashes for values.
        (manufacturePatchForAdditionWithHistory): Updated to take one fileData
        argument.
        (pathcmp): Updated to take two fileData arguments instead of two strings.
        (testfilecmp): Added.  Used with sort() to order non-test files before test
        files.

2007-08-11  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Give a different message when only the pixel test failed.

2007-08-06  Nigel Tao  <nigeltao@gnome.org>

        Reviewed by David Kilzer.

        Fix bug 14745: WebKitTools/Scripts/run-launcher doesn't speak --gdk
        http://bugs.webkit.org/show_bug.cgi?id=14745

        * Scripts/run-launcher:
        Scrub the "--gdk" out of the command line args, if given, so that
        GdkLauncher doesn't try to interpret it as a URL.

2007-08-03  Adam Roben  <aroben@apple.com>

        Catch SIGPIPE on Windows so that run-webkit-tests doesn't quit when DRT crashes

        Reviewed by Sam.

        * Scripts/run-webkit-tests: Also close ERROR when we finish running the tests.

2007-08-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Recursively dump all frames as text using new
        layoutTestController.dumpChildFramesAsText() function.

        * DumpRenderTree/DumpRenderTree.m:
        (dumpFramesAsText):
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpChildFramesAsText]):
        (runTest):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dump):
        (runTest):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/LayoutTestController.cpp:
        (dumpChildFramesAsTextCallback):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-08-02  Adam Roben  <aroben@apple.com>

        Fix fast/dom/Window/alert-undefined.html

        Reviewed by Sam.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/WaitUntilDoneDelegate.cpp:
        (WaitUntilDoneDelegate::runJavaScriptAlertPanelWithMessage): Don't let
        Windows translate a null BSTR into "(null)"

2007-08-02  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - It would help if I actually called the right function.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::showConsole):

2007-08-02  Adam Roben  <aroben@apple.com>

        Don't delete the stderr file right after creating it

        * Scripts/run-webkit-tests:

2007-08-01  Adam Roben  <aroben@apple.com>

        When DRT crashes, record stderr and restart DRT

        This prevents a DRT crash from causing the next few hundred tests to
        "fail" because DRT is no longer running.

        I also changed the terminology that run-webkit-tests uses in its
        output a bit, so that crashing tests are referred to as "crashes"
        instead of "failures".

        Reviewed by Mark.

        * Scripts/run-webkit-tests: Detect a crash and record it as a tool
        failure.
        (sub openDumpTool): Use open3 so that we can access stderr.
        (sub dumpToolCrashed): Added.
        (sub printFailureMessageForTest): Added.
        (sub htmlForExpectedAndActualResults): Added.
        (sub deleteExpectedAndActualResults): Added.
        (sub recordActualResultsAndDiff): Added.

2007-07-30  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * DumpRenderTree/DumpRenderTree.m: (dump): Fix dumping for documents that include null
        characters. This turned out not to be needed for the test case that motivated me to
        do it, but it's nice to have this for the future.

2007-07-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Link QtLauncher into $$OUTPUT_DIR/bin

        * Scripts/run-launcher:

2007-07-27  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Geoff and Darin.

        Use a subroutine for validating the --skipped switch.

        * Scripts/run-webkit-tests:

2007-07-27  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * Scripts/run-webkit-tests: Remove exception for leaks bug that has been fixed on Leopard.

2007-07-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Correct the path of GdkLauncher and make checkFrameworks work on OSX
        when building the Qt or Gtk+ port.

        * GdkLauncher/GdkLauncher.pro: Don't create an app bundle on OSX
        * Scripts/run-launcher:
        * Scripts/webkitdirs.pm: Don't add WebKit if we build the Qt or Gtk+ port.

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix build-webkit for the Qt build on Windows with msvc/nmake by trying to detect the Qt mkspec and using "nmake" instead of "make" as build command.

        * Scripts/webkitdirs.pm:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        For detecting the SVG support for the Qt build don't do the nm hack. Just always claim SVG support is enabled because that's what it is. The nm hack doesn't work on Windows anyway.

        * Scripts/webkitdirs.pm:

2007-07-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin, Geoff, Sam.

        - <rdar://problem/5150461> Resizing the window larger than the screen causes no resize.

        - Added delegate methods to intercept and fake the frame location so methods like resizeTo and moveTo can change the window location without actually making the window appear on-screen.

        * DumpRenderTree/UIDelegate.h:
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:setFrame:]):
        (-[UIDelegate webViewFrame:]):

2007-07-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Lars wanted this check for Qt but it breaks platform specific layout tests.

        * Scripts/run-webkit-tests:

2007-07-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim, Darin, Oliver.

        - <rdar://problem/5329440> REGRESSION: Clicking links with the feed:// protocol in Safari 3 does nothing
        - Change DRT to be able to intercept the requst to load so it can check if a scheme was allowed or not.

        * ChangeLog:
        * DumpRenderTree/DumpRenderTree.m:
        (createWebView):
        (dumpRenderTree):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setCustomPolicyDelegate:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/FrameLoadDelegate.h:
        * DumpRenderTree/PolicyDelegate.h: Added.
        * DumpRenderTree/PolicyDelegate.m: Added.
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        * DumpRenderTree/ResourceLoadDelegate.h:

2007-07-25  Adam Treat  <treat@kde.org>

        Reviewed by Niko.

        Fix build for some reported systems.

        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:

2007-07-23  Adam Treat  <treat@kde.org>

        Reviewed by Nikolas.

        Fix qt DRT to suppress js popup alerts and log instead.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::WebPage::javaScriptAlert):

2007-07-22  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Make the GdkLauncher use the new WebKit/Gtk API. Change webkitdirs.pm to
        honor --qmakearg for the Gdk/Gtk build as well.

        * GdkLauncher/main.cpp: Switch to the new API
        * Scripts/webkitdirs.pm: Allow to specify --qmakearg, e.g. to control the WEBKIT_{INC,LIB}_DIR

2007-07-22  Darin Adler  <darin@apple.com>

        * DumpRenderTree/TextInputController.m: (-[TextInputController interpretKeyEvents:withSender:]):
        Fix a leak by releasing the array used here.

2007-07-22  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14713
          Script to update iExploder cssproperties.in file based on CSSPropertyNames.in

        Added script to update WebKitTools/iExploder/htdocs/cssproperties.in based on the contents
        of WebCore/css/CSSPropertyNames.in.  Also updated cssproperties.in.

        * Scripts/update-iexploder-cssproperties: Added.
        * iExploder/htdocs/cssproperties.in: Updated by running update-iexploder-cssproperties script.
        Added new CSS3 property section and Moved box-sizing property to it.

2007-07-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=14710

        Add preliminary support for testing Input Method/WebKit behaviour and interaction
        in DRT.  This provides the NSTextInput API which is most of what should be necessary
        to mimic the event sequences Input Methods trigger.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TextInputController.h:
        * DumpRenderTree/TextInputController.m:
        (-[WebHTMLView interpretKeyEvents:]):
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController initWithWebView:]):
        (-[TextInputController dealloc]):
        (-[TextInputController textInput]):
        (-[TextInputController setInputMethodHandler:]):
        (-[TextInputController interpretKeyEvents:withSender:]):

2007-07-20  Adam Roben  <aroben@apple.com>

        * Scripts/commit-log-editor: Small fix to make an all-whitespace log
        message not count as an existing log.

2007-07-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Updated DumpRenderTree for <rdar://problem/5348384> Restore old return
        value behavior of stringByEvaluatingJavaScriptFromString

        * DumpRenderTree/DumpRenderTree.m:
        (testStringByEvaluatingJavaScriptFromString):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-07-19  Adam Roben  <aroben@apple.com>

        Make commit-log-editor work with git

        Reviewed by Sam.

        * Scripts/commit-log-editor: Use VCSUtils and accept a git-style
        commit message template. Also removed the unused $breakPoint variable.

2007-07-19  Adam Roben  <aroben@apple.com>

        Move generally-useful VCS code into a new VCSUtils.pm module

        This is in preparation for making commit-log-editor git-friendly.

        Reviewed by Sam.

        * Scripts/VCSUtils.pm: Added. Code moved here from prepare-ChangeLog.
        * Scripts/prepare-ChangeLog: Use VCSUtils.

2007-07-19  Lars Knoll <lars@trolltech.com>

        Fix a crash on exit when running DRT against a current
        Qt 4.4 snapshot.

        Reviewed by Zack

        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2007-07-18  Adam Roben  <aroben@apple.com>

        Don't try to use an SSL certificate on Windows until <rdar://problem/5345985> is fixed

        Reviewed by Mark.

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2007-07-18  Adam Roben  <aroben@apple.com>

        More git friendliness for prepare-ChangeLog

        The overall change is to remove the use of git-status and replace it
        with git-diff --name-status (which we were already using in the
        --git-commit case).

        This lets us respect directories specified on the command line when
        using git, just as we do for Subversion. It also speeds things up a
        bit, especially in the subdirectory case, as git-status is pretty slow.

        I also fixed some issues where we wouldn't detect copied files and
        would reverse the new filename and the original filename for renamed files.

        Reviewed by Mark.

        * Scripts/prepare-ChangeLog:
        (sub diffFromToString): Added.
        (sub diffCommand): Don't append the paths in the --git-commit case, as
        we should be operating on the entire commit.
        (sub statusCommand): Always use git-diff --name-status, and added an
        extra -C option to git-diff to make it find a few more copied files.
        (sub createPatchCommand): Collapsed the two git cases a bit, and added
        the extra -C option as above.
        (sub generateFileList): Remove the git-status codepath, and recognize
        file copies in the --name-status output.
        (sub isModifiedOrAddedStatus): Collapsed the status codes into one
        dictionary.
        (sub isConflictStatus): Updated the git dictionary.
        (sub statusDescription): Updated the git dictionary.

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        * Scripts/build-drosera: Update where we look for the Xcode project.

2007-07-18  Adam Treat <treat@kde.org>

        Reviewed by bdash.

        Use the old wording for Safari.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2007-07-18  Adam Treat <treat@kde.org>

        Reviewed by bdash.

        Add convenience script for launching test apps for Qt and Gdk ports.
        Change the build-webkit script accordingly.

        * Scripts/build-webkit:
        * Scripts/run-launcher: Added.
        * Scripts/webkitdirs.pm:

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Make the Page with the now required InspectorClient.

        * GdkLauncher/main.cpp:
        (main):

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Remove the redundant copies of Makefile.shared and the new Makefile.Drosera.
        Now included the main Makefile.shared and change the SCRIPTS_PATH variable as needed.

        * Drosera/Makefile: Added.
        * Drosera/mac/Makefile:
        * DumpRenderTree/Makefile:
        * Makefile:
        * Makefile.Drosera: Removed.
        * Makefile.shared: Removed.

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        The console log was 20px down from the top for no reason, move it up.

        * Drosera/console.css:

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Use contentDocument to get the source view's iframe document.
        Also adds a null/undefined check for localVariableNames.

        * Drosera/debugger.js:

2007-07-18  Lars Knoll <lars@trolltech.com>

        We really don't want to compare non text only tests to the
        Mac results if we don't have a result for Qt, as this would
        give a failure and not a notification that the test is new.

        Reviewed by Zack

        * Scripts/run-webkit-tests:

2007-07-18  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack & Simon

        Adjust to changed API in QWebFrame

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-07-18  Mark Rowe  <mrowe@apple.com>

        Update path to the Drosera Xcode project now that it has moved into a subdirectory.

        * BuildSlaveSupport/build-launcher-app:

2007-07-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Antti Koivisto.

        Added watchdog timer to waitUntilDone to prevent a run-away test from
        hanging the test harness.

        * DumpRenderTree/DumpRenderTree.m:
        (dump):
        (-[LayoutTestController waitUntilDone]):
        (-[LayoutTestController waitUntilDoneWatchdogFired]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-07-17  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Implemented cross-platform code for functions calling into the JavaScript.

        * Drosera/DebuggerDocument.cpp:
        (DebuggerDocument::callAsFunction):
        (DebuggerDocument::pauseJS):
        (DebuggerDocument::resumeJS):
        (DebuggerDocument::stepIntoJS):
        (DebuggerDocument::stepOverJS):
        (DebuggerDocument::stepOutJS):
        (DebuggerDocument::showConsoleJS):
        (DebuggerDocument::closeCurrentFileJS):
        (DebuggerDocument::updateFileSource):
        (DebuggerDocument::didParseScript):
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::exceptionWasRaised):
        * Drosera/DebuggerDocument.h:
        * Drosera/mac/DebuggerDocumentMac.mm:
        (-[DebuggerDocumentMac pause:]):
        (-[DebuggerDocumentMac resume:]):
        (-[DebuggerDocumentMac stepInto:]):
        (-[DebuggerDocumentMac stepOver:]):
        (-[DebuggerDocumentMac stepOut:]):
        (-[DebuggerDocumentMac showConsole:]):
        (-[DebuggerDocumentMac closeCurrentFile:]):
        (-[DebuggerDocumentMac webView:didLoadMainResourceForDataSource:]):
        (-[DebuggerDocumentMac webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[DebuggerDocumentMac webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerDocumentMac webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[DebuggerDocumentMac webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerDocumentMac webView:exceptionWasRaised:sourceId:line:forWebFrame:]):

2007-07-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        - Continued x-platform modifications.

        * Drosera/win/DebuggerDocumentWin.cpp: Copied from Drosera/win/DebuggerObjectCallbacks.cpp.
        * Drosera/win/DebuggerDocumentWin.h: Copied from Drosera/win/DebuggerObjectCallbacks.h.
        * Drosera/win/DebuggerObjectCallbacks.cpp: Removed.
        * Drosera/win/DebuggerObjectCallbacks.h: Removed.
        * Drosera/win/Drosera.cpp:
        * Drosera/win/Drosera.vcproj/Drosera.vcproj:
        * Drosera/win/stdafx.cpp: Removed.
        * Drosera/win/stdafx.h: Removed.

2007-07-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Modified files to use cross-platform code.

        * Drosera/DebuggerDocument.cpp: Added.
        (DebuggerDocument::breakpointEditorHTML):
        (DebuggerDocument::isPaused):
        (DebuggerDocument::pause):
        (DebuggerDocument::resume):
        (DebuggerDocument::stepInto):
        (DebuggerDocument::evaluateScript):
        (DebuggerDocument::currentFunctionStack):
        (DebuggerDocument::localScopeVariableNamesForCallFrame):
        (DebuggerDocument::valueForScopeVariableNamed):
        * Drosera/DebuggerDocument.h: Added.
        (DebuggerDocument::DebuggerDocument):
        * Drosera/config.h: Added.
        * Drosera/mac/DebuggerApplication.mm:
        (-[DebuggerApplication attach:]):
        * Drosera/mac/DebuggerDocument.h: Removed.
        * Drosera/mac/DebuggerDocument.mm: Removed.
        * Drosera/mac/DebuggerDocumentMac.h: Copied from Drosera/mac/DebuggerDocument.h.
        * Drosera/mac/DebuggerDocumentMac.mm: Copied from Drosera/mac/DebuggerDocument.mm.
        (-[DebuggerDocumentMac initWithServerName:]):
        (-[DebuggerDocumentMac dealloc]):
        (-[DebuggerDocumentMac breakpointEditorHTML]):
        (-[DebuggerDocumentMac isPaused]):
        (-[DebuggerDocumentMac pause]):
        (-[DebuggerDocumentMac resume]):
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * Drosera/win/DebuggerApplication.cpp:
        * Drosera/win/DebuggerObjectCallbacks.cpp:
        (breakpointEditorHTMLCallback):
        (currentFunctionStackCallback):
        (evaluateScript_inCallFrame_Callback):
        (isPausedCallback):
        (localScopeVariableNamesForCallFrame_Callback):
        (pauseCallback):
        (resumeCallback):
        (stepIntoCallback):
        (valueForScopeVariableNamed_inCallFrame_Callback):
        (staticFunctions):
        * Drosera/win/Drosera.cpp:
        * Drosera/win/DroseraPrefix.cpp: Added.
        * Drosera/win/DroseraPrefix.h: Added.

2007-07-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam, Sam and Tim.

        - Moving files to prepare for cross-platform architecture.

        * Drosera/DebuggerApplication.h: Removed.
        * Drosera/DebuggerApplication.m: Removed.
        * Drosera/DebuggerDocument.h: Removed.
        * Drosera/DebuggerDocument.m: Removed.
        * Drosera/Drosera.pch: Removed.
        * Drosera/Drosera.xcodeproj: Removed.
        * Drosera/Drosera.xcodeproj/project.pbxproj: Removed.
        * Drosera/Info.plist: Removed.
        * Drosera/LauncherInfo.plist: Removed.
        * Drosera/Makefile: Removed.
        * Drosera/launcher.m: Removed.
        * Drosera/mac: Added.
        * Drosera/mac/DebuggerApplication.h: Copied from Drosera/DebuggerApplication.h.
        * Drosera/mac/DebuggerApplication.mm: Copied from Drosera/DebuggerApplication.m.
        * Drosera/mac/DebuggerDocument.h: Copied from Drosera/DebuggerDocument.h.
        * Drosera/mac/DebuggerDocument.mm: Copied from Drosera/DebuggerDocument.m.
        * Drosera/mac/Drosera.pch: Copied from Drosera/Drosera.pch.
        * Drosera/mac/Drosera.xcodeproj: Copied from Drosera/Drosera.xcodeproj.
        * Drosera/mac/Drosera.xcodeproj/project.pbxproj:
        * Drosera/mac/Info.plist: Copied from Drosera/Info.plist.
        * Drosera/mac/LauncherInfo.plist: Copied from Drosera/LauncherInfo.plist.
        * Drosera/mac/Makefile: Copied from Drosera/Makefile.
        * Drosera/mac/launcher.m: Copied from Drosera/launcher.m.
        * Drosera/mac/main.m: Copied from Drosera/main.m.
        * Drosera/main.m: Removed.
        * Makefile:
        * Makefile.Drosera: Added.

2007-07-15  Mark Rowe  <mrowe@apple.com>

        * Scripts/generate-coverage-data: Don't fail if WebKitBuild directory does not exist.

2007-07-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Add support for running SSL tests over HTTPS.

        * DumpRenderTree/DumpRenderTree.m:
        (runTest):
        * DumpRenderTree/FrameLoadDelegate.m:
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2007-07-13  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Darin Adler.

        Added support for -h|--help argument and verify that all command line arguments parse
        correctly.

        * Scripts/run-webkit-httpd:

2007-07-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Ada.

        Remove leak suppression for xmlDocPtrForString now that <rdar://problem/5329877> is fixed.

        * Scripts/run-webkit-tests:

2007-07-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Made the leaks tests pass on Leopard.

        * Scripts/run-webkit-tests: Added some leaks to exclude on Leopard.
        * Scripts/run-leaks: Updated parser for slight change in text output.

2007-07-11  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Maciej.

        Update the iExploder list of CSS properties after box-sizing was renamed to
        -webkit-box-sizing in r21026 to fix <rdar://problem/4667227>.

        * iExploder/htdocs/cssproperties.in:  Added -webkit-box-sizing.  Both box-sizing and
        -moz-box-sizing remain.

2007-07-10  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Add an ignore item for a leak in Tiger's
        Foundation's multipart/mixed-replace support -- I already verified that
        the bug has been fixed.

2007-07-10  Alice Liu  <alice.liu@apple.com>

        rubber stamped by Maciej.

        fixed <rdar://5137972> editing/selection/editable-links.html fails on Windows

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (initializePreferences):
        set editable link behavior to match Mac DRT.

2007-07-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.

        Ignore Page.o in debug builds because it now has a static PageCounter
        object.

        * Scripts/check-for-global-initializers:

2007-07-09  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Moved leaks from Tiger that are marked as fixed in Leopard to a Tiger-only section.

2007-07-09  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben.

        setting DOM Paste Allowed Pref

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (initializePreferences):

2007-07-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam, Sam, and Ada.

        - Inital checkin of Drosera for Win.  This isn't pretty and doesn't connect to Safari but debug builds and runs.

        * Drosera/Images/Drosera.ico: Added.
        * Drosera/Images/small.ico: Added.
        * Drosera/win: Added.
        * Drosera/win/BaseDelegate.h: Added.
        (BaseDelegate::QueryInterface):
        (BaseDelegate::didFinishLoadForFrame):
        (BaseDelegate::windowScriptObjectAvailable):
        (BaseDelegate::didStartProvisionalLoadForFrame):
        (BaseDelegate::didReceiveServerRedirectForProvisionalLoadForFrame):
        (BaseDelegate::didFailProvisionalLoadWithError):
        (BaseDelegate::didCommitLoadForFrame):
        (BaseDelegate::didReceiveTitle):
        (BaseDelegate::didReceiveIcon):
        (BaseDelegate::didFailLoadWithError):
        (BaseDelegate::didChangeLocationWithinPageForFrame):
        (BaseDelegate::willPerformClientRedirectToURL):
        (BaseDelegate::didCancelClientRedirectForFrame):
        (BaseDelegate::willCloseFrame):
        (BaseDelegate::createWebViewWithRequest):
        (BaseDelegate::webViewShow):
        (BaseDelegate::webViewClose):
        (BaseDelegate::webViewFocus):
        (BaseDelegate::webViewUnfocus):
        (BaseDelegate::webViewFirstResponder):
        (BaseDelegate::makeFirstResponder):
        (BaseDelegate::setStatusText):
        (BaseDelegate::webViewStatusText):
        (BaseDelegate::webViewAreToolbarsVisible):
        (BaseDelegate::setToolbarsVisible):
        (BaseDelegate::webViewIsStatusBarVisible):
        (BaseDelegate::setStatusBarVisible):
        (BaseDelegate::webViewIsResizable):
        (BaseDelegate::setResizable):
        (BaseDelegate::setFrame):
        (BaseDelegate::webViewFrame):
        (BaseDelegate::setContentRect):
        (BaseDelegate::webViewContentRect):
        (BaseDelegate::runJavaScriptAlertPanelWithMessage):
        (BaseDelegate::runJavaScriptConfirmPanelWithMessage):
        (BaseDelegate::runJavaScriptTextInputPanelWithPrompt):
        (BaseDelegate::runBeforeUnloadConfirmPanelWithMessage):
        (BaseDelegate::runOpenPanelForFileButtonWithResultListener):
        (BaseDelegate::mouseDidMoveOverElement):
        (BaseDelegate::contextMenuItemsForElement):
        (BaseDelegate::validateUserInterfaceItem):
        (BaseDelegate::shouldPerformAction):
        (BaseDelegate::dragDestinationActionMaskForDraggingInfo):
        (BaseDelegate::willPerformDragDestinationAction):
        (BaseDelegate::dragSourceActionMaskForPoint):
        (BaseDelegate::willPerformDragSourceAction):
        (BaseDelegate::contextMenuItemSelected):
        (BaseDelegate::hasCustomMenuImplementation):
        (BaseDelegate::trackCustomPopupMenu):
        (BaseDelegate::measureCustomMenuItem):
        (BaseDelegate::drawCustomMenuItem):
        (BaseDelegate::addCustomMenuDrawingData):
        (BaseDelegate::cleanUpCustomMenuDrawingData):
        (BaseDelegate::canTakeFocus):
        (BaseDelegate::takeFocus):
        (BaseDelegate::registerUndoWithTarget):
        (BaseDelegate::removeAllActionsWithTarget):
        (BaseDelegate::setActionTitle):
        (BaseDelegate::undo):
        (BaseDelegate::redo):
        (BaseDelegate::canUndo):
        (BaseDelegate::canRedo):
        * Drosera/win/DebuggerApplication.cpp: Added.
        (DebuggerApplication::serverLoaded):
        (DebuggerApplication::serverUnloaded):
        (DebuggerApplication::attach):
        (DebuggerApplication::numberOfRowsInTableView):
        (DebuggerApplication::tableView):
        * Drosera/win/DebuggerApplication.h: Added.
        (DebuggerApplication::DebuggerApplication):
        (DebuggerApplication::knownServers):
        * Drosera/win/DebuggerObjectCallbacks.cpp: Added.
        (breakpointEditorHTMLCallback):
        (currentFunctionStackCallback):
        (doubleClickMillisecondsCallback):
        (evaluateScript_inCallFrame_Callback):
        (isPausedCallback):
        (localScopeVariableNamesForCallFrame_Callback):
        (pauseCallback):
        (resumeCallback):
        (stepIntoCallback):
        (valueForScopeVariableNamed_inCallFrame_Callback):
        (staticFunctions):
        * Drosera/win/DebuggerObjectCallbacks.h: Added.
        * Drosera/win/Drosera.cpp: Added.
        (_tWinMain):
        (RegisterDroseraClass):
        (DroseraWndProc):
        (About):
        (Attach):
        (Drosera::Drosera):
        (Drosera::initUI):
        (Drosera::QueryInterface):
        (Drosera::AddRef):
        (Drosera::Release):
        (Drosera::didFinishLoadForFrame):
        (getDroseraJSClass):
        (Drosera::windowScriptObjectAvailable):
        (Drosera::webViewClose):
        (Drosera::validateUserInterfaceItem):
        (Drosera::runJavaScriptAlertPanelWithMessage):
        (Drosera::onSize):
        * Drosera/win/Drosera.h: Added.
        (Drosera::webViewLoaded):
        * Drosera/win/Drosera.vcproj: Added.
        * Drosera/win/Drosera.vcproj/Drosera.rc: Added.
        * Drosera/win/Drosera.vcproj/Drosera.vcproj: Added.
        * Drosera/win/Drosera.vcproj/debug.vsprops: Added.
        * Drosera/win/Drosera.vcproj/release.vsprops: Added.
        * Drosera/win/HelperFunctions.h: Added.
        (CFStringToBSTR):
        * Drosera/win/Info.plist: Added.
        * Drosera/win/resource.h: Added.
        * Drosera/win/stdafx.cpp: Added.
        * Drosera/win/stdafx.h: Added.

2007-07-09  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame from a QFrame to a pure QObject to eliminate all
        traces of widgets.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/4954319>
        Acrobat 7 / Safari crash: CrashTracer: 99 crashes in Safari at
        com.apple.WebCore: WebCore::NetscapePlugInStreamLoader::isDone const + 0

        If the src url is "data:application/x-webkit-test-netscape,returnerrorfromnewstream",
        return an error from NPP_NewStream.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_New):
        (NPP_NewStream):

2007-07-08  Mark Rowe  <mrowe@apple.com>

        Change name from WebKit/Qt to WebKit.

        * CodeCoverage/regenerate-coverage-display:

2007-07-08  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=14209
        DRT should be able to deal with text zoom

        Allow increasing/decreasing text zoom using eventSender.

        * DumpRenderTree/DumpRenderTree.m:
        (runTest):
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController initialize]):
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (-[EventSendingController textZoomIn]):
        (-[EventSendingController textZoomOut]):

2007-07-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        * DumpRenderTree/DumpRenderTree.m:
        (convertWebResourceResponseToDictionary): Fix leak of two NSMutableString's introduced in r24076.

2007-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Kilzer.

        <rdar://problem/5313502>
        Many webarchive tests fail due to different NSURLResponse serialization on Leopard

        Don't dump the serialized form of NSURLResponse. Instead, create a dictionary with the
        response's attributes. Also change the JavaScript MIME type to be "text/javascript".

        * DumpRenderTree/DumpRenderTree.m:
        (convertMIMEType):
        (convertWebResourceDataToString):
        (convertWebResourceResponseToDictionary):
        (serializeWebArchiveToXML):

2007-07-06  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Oliver.

        Initialize the NSMutableAttributedString directly instead of creating
        a NSAttributedString first.

        * DumpRenderTree/TextInputController.m:
        (-[TextInputController attributedStringWithString:]):

2007-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Kilzer.

        Replace "Apple Computer" with "Apple" in the DTD declaration.

        * DumpRenderTree/DumpRenderTree.m:
        (serializeWebArchiveToXML):

2007-07-06  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Adjust for conversion of QWebFrame to a QFrame from a scroll area.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-07-06  George Staikos  <staikos@kde.org>

        Reviewed by Anders.

        Allow passing of additional arguments to qmake with --qmakearg=

        * Scripts/webkitdirs.pm:

2007-07-05  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Add --qt and --qmake= to force Qt even when QTDIR isn't present and to
        give a path to a specific qmake binary.  Both are optional.

        * Scripts/webkitdirs.pm:

2007-07-05  Adam Roben  <aroben@apple.com>

        Warn about tests in the Skipped file that succeeded

        * Scripts/run-webkit-tests:

2007-07-05  Adam Roben  <aroben@apple.com>

        Removed unused install-win-extras script

        Rubberstamped by Mark.

        * Scripts/install-win-extras: Removed.

2007-07-05  Adam Roben  <aroben@apple.com>

        Show the test's extension in the results page

        * Scripts/run-webkit-tests:

2007-07-05  Adam Roben  <aroben@apple.com>

        Add more options for controlling the interpretation of the Skipped file

        Reviewed by Mark.

        * Scripts/run-webkit-tests:

2007-07-04  Adam Roben  <aroben@apple.com>

        Add --skipped-only option to run-webkit-tests

        When this option is specified, only those tests listed in the Skipped
        file are run.

        Reviewed by Mark.

        * Scripts/run-webkit-tests:

2007-07-04  Adam Roben  <aroben@apple.com>

        Clean up/alphabetize the run-webkit-tests help message

        * Scripts/run-webkit-tests:

2007-07-04  Adam Roben  <aroben@apple.com>

        Enable a Leopard-specific Skipped list.

        Reviewed by Mark.

        * Scripts/run-webkit-tests: Check for Leopard.
        * Scripts/webkitdirs.pm: Added isTiger/isLeopard.

2007-07-03  Adam Roben  <aroben@apple.com>

        Fixed update-webkit-localizable-strings to work with new extract-localizable-strings

        Got rid of extract-webkit-localizable-strings because it was trying to
        do update-webkit-localizable-strings' job.

        Rubberstamped by Darin Adler.

        * Scripts/extract-webkit-localizable-strings: Removed.
        * Scripts/update-webkit-localizable-strings: Renamed from
        extract-localizable-strings.

2007-07-03  Adam Roben  <aroben@apple.com>

        Modify scripts to keep Mac/Windows localized strings in sync

        extract-webkit-localizable-strings now handles extracting strings from
        both the Mac and Windows WebKit ports and updating their respective
        Localizable.strings files. extract-localizable-strings is now really a
        piece of plumbing rather than a top-level tool.

        Reviewed by Darin and Anders.

        * Scripts/extract-localizable-strings: Changed to handle multiple
        directories.
        * Scripts/extract-webkit-localizable-strings: Added.

2007-07-03  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Extended DumpRenderTree to test encoding and decoding host names.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Added cases for encodeHostName and decodeHostName.
        (+[LayoutTestController webScriptNameForSelector:]): ditto.
        (-[LayoutTestController decodeHostName:]): Added.
        (-[LayoutTestController encodeHostName:]): Added.

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Eleventh round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        Add functions to test long long and unsigned long long.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController objCLongLongRoundTrip:]):
        (-[LayoutTestController objCUnsignedLongLongRoundTrip:]):

2007-07-01  Adam Roben  <aroben@apple.com>

        Fix some paths to make http tests work again on Windows

        Rubberstamped by Sam.

        * Scripts/run-webkit-tests:

2007-06-28  Stephanie  <slewis@apple.com>

        Reviewed by Adam,

        Allow tests to use pre-built roots instead of building the tests.

        * Scripts/run-javascriptcore-tests: added --root option
        * Scripts/run-webkit-tests: added --root option
        * Scripts/webkitdirs.pm: added support for using a root

2007-06-25  Adam Roben  <aroben@apple.com>

        Fix Bug 14405: LayoutTestResults/qt should be in LayoutTests/qt
        http://bugs.webkit.org/show_bug.cgi?id=14405

        Reviewed by Anders.

        * Scripts/run-webkit-tests:

2007-06-25  Adam Roben  <aroben@apple.com>

        Enable running the regression tests on Windows.

        These changes were developed alongside the Windows WebKit port and
        have been well tested.

        Rubberstamped by Sam.

        * Scripts/run-webkit-tests:

2007-06-25  Adam Roben  <aroben@apple.com>

        Fix Bug 14403: prepare-ChangeLog --git-commit doesn't support --diff
        http://bugs.webkit.org/show_bug.cgi?id=14403

        Reviewed by Mark Rowe.

        * Scripts/prepare-ChangeLog: Don't spew to stdout, use stderr instead.
        (sub createPatchCommand): Generate a correct diff in the $gitCommit
        case.

2007-06-25  Adam Roben  <aroben@apple.com>

        Land pdevenv and supporting scripts/programs

        pdevenv is a script that will open an instance of Visual Studio that
        can compile multiple files in parallel, similar to make -jN. It uses
        the following scripts/programs to accomplish this:

        CLWrapper: Compiles to vcbin/cl.exe. Calls Scripts/parallelcl.

        parallelcl: Actually performs the parallel compilation by forking
        multiple instances of the Microsoft-supplied cl.exe.

        MIDLWrapper: Compiles to vcbin/midl.exe. Calls through to the
        Microsoft-supplied midl.exe. This avoids having to invoke perl for
        every invocation of midl.exe, which would be quite slow.

        Rubberstamped by Sam.

        * CLWrapper/CLWrapper.cpp: Added.
        (wmain):
        * CLWrapper/CLWrapper.sln: Added.
        * CLWrapper/CLWrapper.vcproj: Added.
        * MIDLWrapper/MIDLWrapper.cpp: Added.
        (wmain):
        * MIDLWrapper/MIDLWrapper.sln: Added.
        * MIDLWrapper/MIDLWrapper.vcproj: Added.
        * Scripts/parallelcl: Added.
        * Scripts/pdevenv: Added.
        * vcbin/cl.exe: Added.
        * vcbin/midl.exe: Added.

2007-06-23  Adam Roben  <aroben@apple.com>

        Land num-cpus for the Windows build.

        Reviewed by Mark Rowe.

        * Scripts/num-cpus: Added.

2007-06-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Adam Roben.

        Added support for populating ChangeLog entries from given git commits
        using --git-commit=<commitish> and --git-reviewer=<name>.

        * Scripts/prepare-ChangeLog:

2007-06-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders.

        <rdar://problem/5228168> Leopard regression test failures: fast/applescript

        There were some changes in Leopard that made our test output inconsistent with Tiger.

        NSAppleEventDescriptor no longer returns a stringValue for typeType descriptors
        on Leopard, so output our own readable string for typeType descriptors.

        NSArray's description also changed on Leopard to output more whitespace, so
        make our own string representation for typeAEList descriptors. This requires
        a special case typeUnicodeText too, so the output is a quoted string.

        * DumpRenderTree/AppleScriptController.m:
        (convertAEDescToObject):

2007-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Don't dump didFirstLayout callbacks, they happen intermittently.

        * DumpRenderTree/FrameLoadDelegate.m:

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        look for the Qt library in the installed location

        * Scripts/webkitdirs.pm:

2007-06-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adele Peterson, Oliver Hunt, Anders Carlsson.

        Added tests for stringByEvaluatingJavaScriptFromString.

        * DumpRenderTree/DumpRenderTree.m:
        (testStringByEvaluatingJavaScriptFromString):
        (dumpRenderTree):

2007-06-19  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe.

        Support applications with spaces or special characters in their names

        * Scripts/run-webkit-app:

2007-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Assert that the frame has a dataSource.

        * DumpRenderTree/FrameLoadDelegate.m:
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):

2007-06-18  Adam Treat <adam@staikos.net>

        Reviewed by George.

        Reflect the library name change.

        * Scripts/webkitdirs.pm:

2007-06-18  Jake Helfert  <jake@jakeonthenet.com>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14154
          Spinneret doesn't build against the new Win32 port.

        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
            -Changed IWebViewExt to IWebViewPrivate
            -Changed Co[Un]initialize to Ole[Un]initialize because WebKit now calls
             the WIN32 function RegisterDragDrop which requires the Ole* calls.
        * Spinneret/Spinneret/Spinneret.h:
        (SpinneretWebHost::didReceiveIcon): Updated method signature.
        (SpinneretWebHost::willPerformClientRedirectToURL): Updated method signature.
        (SpinneretWebHost::windowScriptObjectAvailable): Updated method signature.

2007-06-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady.

        Update set of files to download for cygwin to include
        diffutils and regenerate the zip file.  This should fix
        an issue on vista where svn-create-patch doesn't work.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

2007-06-14  Mark Rowe  <mrowe@apple.com>

        Update script to match new nightly.webkit.org infrastructure.

        * BuildSlaveSupport/build-launcher-dmg:  Upload to the live web server, not the caching proxy.  Let the server know it's a Mac build.

2007-06-12  Adam Roben  <aroben@apple.com>

        Land CygwinDownloader.

        Rubberstamped by Hyatt.

        * CygwinDownloader/cygwin-downloader.py: Added.
        * CygwinDownloader/cygwin-downloader.zip: Added.
        * CygwinDownloader/make-zip.sh: Added.
        * CygwinDownloader/setup.py: Added.

2007-06-06  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Mark Rowe.

        Fixes Bug 13996: http://bugs.webkit.org/show_bug.cgi?id=13996
        [Drosera] Items in the file list don't get un-highlighted when
        files are selected from the file drop-down

        * Drosera/debugger.js: currentFile was getting modified before file in the file
        browser got un-highlighted. Changed the order in which the functions execute.

2007-06-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=13988
        Bug 13988: Colon in file path crashes WebKit Nightly

        The WebKit launcher makes use of two `dyld' variables to coerce Safari into running with
        the bundled WebKit framework.  Both of these variables are interpreted as containing a
        colon-delimited list of paths.  There is no escaping mechanism defined, so if we detect
        a path with a colon in it we need to bail out to prevent `dyld' from throwing an error
        when we execute Safari.

        * WebKitLauncher/main.m:
        (main):

2007-06-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders.

        * WebKitLauncher/Info.plist: Update CFBundleGetInfoString, and add CFBundleShortVersionString.

2007-05-30  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Brady.

        Enable logging in the Gdk port.
        http://bugs.webkit.org/show_bug.cgi?id=13936

        * GdkLauncher/main.cpp:
        (main):

2007-05-29  Holger Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        Create a GtkLayout and pass it to the FrameView/ScrollView. Embed the GtkLayout into a GtkScrolledWindow
        to provide ScrollBars for the FrameView.

        * GdkLauncher/main.cpp:
        (registerRenderingAreaEvents):
        (layout_realize_callback): Only after realization we can access the GtkLayout::bin_window
        (frameResizeCallback): Inform the ScrollView about its new viewport size, and ask the FrameView to adjust
        (main):

2007-05-29  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13901
          run-pageloadtest does not obey testName on command-line

        * Scripts/run-pageloadtest: Grab $testName from the command-line if it is present,
        otherwise default to "svg".  Added dummy check to make sure $testName.pltsuite
        exists.

2007-05-29  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13900
          svnStatus($) subroutine in svn-[un]apply does not work properly with directories

        This patch also fixes an instance of the "broken pipe" warning that happened when
        a directory contained modified files that were not part of an applied or unapplied
        patch.

        * Scripts/svn-apply:
        (svnStatus($)): If we're trying to get status on a directory (instead of a file),
        make sure we actually get the directory's status (if it has one), not the first
        file's status reported within the directory.  Fix "broken pipe" warnings by
        reading all of the output from the SVN filehandle before closing it.
        * Scripts/svn-unapply:
        (svnStatus($)): Ditto.

2007-05-28  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10342
          prepare-ChangeLog only shows removed files but not added files when files are moved
        - fix prepare-ChangeLog part of http://bugs.webkit.org/show_bug.cgi?id=13408
          prepare-ChangeLog and svn-create-patch don't show replaced files

        Switched method used to find list of changed files from "diff" to "status".  This
        makes added and replaced files with history appear in the changed file list for svn.
        Added check for "+" in output from the svn status command to detect file history, and
        handle it in the generateFileList(\@\@\%) and in statusDescription($$) subroutines.

        * Scripts/prepare-ChangeLog:
        (diffCommand(@)): Switched argument from hash ref to array to match statusCommand(@).
        (statusCommand(@)): Switched argument from array ref to array.  Necessary to use
        the output of "keys $paths" without creating a temporary array variable.
        (findOriginalFileFromSvn($)): Added.  Based on findSourceFileAndRevision($)
        subroutine in svn-create-patch.
        (generateFileList(\@\@\%)): Added.  Extracted from main body of script.  Runs status
        command using command-line arguments instead of list of changed files from the diff
        command.  Changed svn regex to only accept file statuses that we know how to handle.
        Identify original file when an added/replaced status with history is present.
        (statusDescription($$)): Handled added/replaced statuses with history.  Added
        fall-through return statement.

2007-05-28  Holger Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        Add scripts and data to generate a coverage data for WebKit.

        * CodeCoverage/README: Added.
        * CodeCoverage/amber.png: Added.
        * CodeCoverage/cov.py: Added.
        * CodeCoverage/emerald.png: Added.
        * CodeCoverage/gcov.css: Added.
        * CodeCoverage/glass.png: Added.
        * CodeCoverage/regenerate-coverage-display: Added.
        * CodeCoverage/ruby.png: Added.
        * CodeCoverage/run-generate-coverage-data: Added.
        * CodeCoverage/snow.png: Added.
        * Scripts/build-webkit: Add --coverage by Niko
        * Scripts/check-for-global-initializers: Skip the check on coverage builds
        * Scripts/generate-coverage-data: Added.
        * Scripts/run-javascriptcore-tests: Add --coverage by Niko

2007-05-29  Mark Rowe  <mrowe@apple.com>

        Build fix after r21745.

        * Scripts/check-for-global-initializers: Skip CachedPage.o as it now has a global initializer in debug builds.

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * DumpRenderTree/DumpRenderTree.m:
        * DumpRenderTree/FrameLoadDelegate.m:

2007-05-25  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        For the keyDown binding use QStringList instead of QList<QString>. The former is a default
        registered metatype. Also print out critical messages in dumprendertree's qt message handler.

        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:

2007-05-20  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13565
          Change svn-create-patch to put LayoutTests in the end

        In addition to reordering test files under the LayoutTests directory so that they
        appear after source code files, this patch fixes an issue with prepare-ChangeLog
        if the first argument passed to it is a file name instead of a directory name.

        * Scripts/prepare-ChangeLog:
        (isGIT()): If first value in @dirs array is a file, use dirname() to get the directory.
        (isSVN()): Ditto.
        * Scripts/svn-create-patch:
        (generateFileList($\%\%\%)): Differentiate test files in the LayoutTests directory from
        source code files.

2007-05-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Force LC_ALL to C when parsing locale-specific strings in 'svn' output.

        * Scripts/svn-create-patch:
        * Scripts/webkitdirs.pm:

2007-05-18  Holger Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        * GdkLauncher/main.cpp: Call setGtkWidget
        (main):

2007-05-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        * GdkLauncher/main.cpp:
        (main): Call Frame::init to catch up with Maciej's changes.
        * Scripts/run-javascriptcore-tests: Remove --gdk from the command line
        passed to the helper scripts.

2007-05-16  Brady Eidson  <beidson@apple.com>

        Build fix for some dev configurations

        * DumpRenderTree/DumpRenderTree.m:

2007-05-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Justin.

        - created a new mechanism to log FrameLoadDelegate callbacks in directories named "loading"

        The reason for doing things in this slightly odd way is to make sure we don't miss the load delegates
        that happen before the load commits.

        Basically I moved WaitUntilDoneDelegate into a separate file (FrameLoadDelegate.m) and added
        optional logging for every FrameLoadDelegate callback, including SPI callbacks.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (createWebView):
        (dumpRenderTree):
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController clearBackForwardList]):
        (-[LayoutTestController setUseDashboardCompatibilityMode:]):
        (-[LayoutTestController dumpFrameLoadCallbacks]):
        (-[LayoutTestController setWindowIsKey:]):
        (-[LayoutTestController setMainFrameIsFirstResponder:]):
        (-[LayoutTestController _doLoad:target:]):
        (-[LayoutTestController _doBackOrForwardNavigation:]):
        (-[LayoutTestController queueReload]):
        (-[LayoutTestController queueScript:]):
        (-[LayoutTestController queueLoad:target:]):
        (-[LayoutTestController setAcceptsEditing:]):
        (-[LayoutTestController setTabKeyCyclesThroughElements:]):
        (shouldLogFrameLoadDelegates):
        (runTest):
        (displayWebView):
        (+[DumpRenderTreeEvent mouseLocation]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeDraggingInfo.m:
        (-[DumpRenderTreeDraggingInfo draggingDestinationWindow]):
        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController contextClick]):
        * DumpRenderTree/FrameLoadDelegate.h: Added.
        * DumpRenderTree/FrameLoadDelegate.m: Added.
        (-[WebFrame _drt_descriptionSuitableForTestResult]):
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        (-[FrameLoadDelegate webView:didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didReceiveIcon:forFrame:]):
        (-[FrameLoadDelegate webView:didChangeLocationWithinPageForFrame:]):
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):
        (-[FrameLoadDelegate webView:didCancelClientRedirectForFrame:]):
        (-[FrameLoadDelegate webView:willCloseFrame:]):
        (-[FrameLoadDelegate webView:didFirstLayoutInFrame:]):
        (-[FrameLoadDelegate webView:didFinishDocumentLoadForFrame:]):
        (-[FrameLoadDelegate webView:didHandleOnloadEventsForFrame:]):
        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[NSURL _drt_descriptionSuitableForTestResult]):
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webViewFocus:]):

2007-05-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin and Geoff.

        - rdar://problem/4981886
        - Now windows opened by the DOM can be closed by JS.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController windowCount]):

2007-05-15  Adam Roben  <aroben@apple.com>

        Reviewed by David Kilzer.

        http://bugs.webkit.org/show_bug.cgi?id=13732
        prepare-ChangeLog should work with git

        * Scripts/prepare-ChangeLog: Added support for Git.

2007-05-15  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add the EventSender object to DRT. Currently it implements
        mouseDown, mouseUp and mouseMoveTo.

        Make run-webkit-tests --strict work somewhat better for form elements.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (HackWebFrame::mousePressEvent):
        (HackWebFrame::mouseReleaseEvent):
        (EventSender::EventSender):
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::leapForward):
        (EventSender::keyDown):
        (EventSender::frameUnderMouse):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:
        * Scripts/run-webkit-tests:

2007-05-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        Add new api to DRT to allow us to test a file being dragged
        onto <input type="file">

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController addFileToPasteboardOnDrag]):
        (runTest):
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):

2007-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Bug 13656: [gdk] Resize the drawing area of the GdkLauncher
        http://bugs.webkit.org/show_bug.cgi?id=13656

        * GdkLauncher/main.cpp: Handle resizing the drawing area
        (frameResizeCallback):
        (main):

2007-05-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Updated test now that +[WebScriptObject scriptObjectForJSObject:frame:]
        is gone.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didClearWindowObject:forFrame:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController testWrapperRoundTripping:]):

2007-05-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - don't clear events whenever an EventSendingController goes away, only do it at predictable times,
        since destroying a subframe can make one go away

        (Discovered while fixing:

        <rdar://problem/5063277> blank screen after login to Citibank Online (accessing document before frame starts loading cancels load)
        <rdar://problem/5159541> REGRESSION (r20972): Wall Street Journal pages replaced by advertisements (13465)

        * DumpRenderTree/DumpRenderTree.m:
        (runTest): explicitly clear saved events after every page load
        * DumpRenderTree/EventSendingController.h:
        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController dealloc]): don't clear saved events here...
        (+[EventSendingController clearSavedEvents]): do it here
        * Scripts/check-for-global-initializers:

2007-05-10  Mark Rowe  <mrowe@apple.com>

        Build fix for DumpRenderTree. Enable Objective-C exceptions in Release configuration.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-05-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added support for testing ObjC/JS type bridging.

        Added ASSERT that -JSObject returns nil when the underlying JSObject
        is no longer GC protected.

        * DumpRenderTree/DumpRenderTree.m:
        (returnThisCallback):
        (returnThisClass):
        (-[WaitUntilDoneDelegate webView:didClearWindowObject:forFrame:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController accessStoredWebScriptObject]):
        (-[LayoutTestController testWrapperRoundTripping]):
        (-[LayoutTestController objCClassNameOf:]):
        (-[LayoutTestController objCObjectOfClass:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-05-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Simon

        Move setting of the DPI value a few lines up. Should fix
        the last two remaining failures in the layout tests.

        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2007-05-09  Holger Freyther <zecke@selfish.org>

        Reviewed by Mark Rowe.

        * GdkLauncher/main.cpp: Always include config.h.

2007-05-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Added support for testing ObjC object identity.

        Added ASSERT to verify that you can round-trip the object passed to you
        in -didClearWindowObject:forFrame:.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didClearWindowObject:forFrame:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController accessStoredWebScriptObject]):
        (-[LayoutTestController objCIdentityIsEqual::]):

2007-05-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added tests for new APIs: -[WebFrame windowObject], -[WebFrame globalContext],
        and - (void)webView:(WebView *)webView didClearWindowObject:(WebScriptObject *)windowObject
        forFrame:(WebFrame *)frame, in the form of ASSERTs.

        * DumpRenderTree/DumpRenderTree.m:
        (runJavaScriptThread): Fixed quote mismatch that prepare-changelog likes
        to complain about.

        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        (-[WaitUntilDoneDelegate webView:didClearWindowObject:forFrame:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-05-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Dump JavaScript console messages as well. Also requires a slight
        change in run-webkit-tests, so we still correctly differentiate
        between text only and rendertree tests.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::javaScriptConsoleMessage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::dump):
        * Scripts/run-webkit-tests:

2007-05-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Specify what the serif, sans-serif and monospace aliases
        should map to and explicitly select the Gui style of
        DRT to be plastique.

        Fixes most of the test failures still seen on the build bot.

        * DumpRenderTree/DumpRenderTree.qtproj/fonts.conf:
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2007-05-07  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix the default font to 9pt Sans Serif.

        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2007-05-04  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Revert on line of the last commit. We still want to keep the RPATH
        support in the pro file.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-05-04  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Remove the old bitmap fonts I tried using to get reliable results from
        DumpRenderTree on X11. Instead we now use the URW Type1 fonts from
        ghostscript. I've added a mirror to simply check them out at
        svn://labs.trolltech.com/svn/webkit/testfonts.

        Fixed DumpRenderTree to make sure these fonts are the only ones we use
        on X11 and added a fonts.conf file to get a well defined fontconfig
        configuration.

        Made sure run-webkit-tests forwards the WEBKIT_TESTFONTS environment variable
        I use to find the fonts to DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:
        * DumpRenderTree/DumpRenderTree.qtproj/fontoverload.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/COPYING: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierBold.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierBoldOblique.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierMedium.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierMediumOblique.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaBold.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaBoldOblique.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaMedium.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaMediumOblique.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/SymbolMedium.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesBold.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesBoldItalic.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesMedium.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesMediumItalic.ttf: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts.conf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):
        * Scripts/run-webkit-tests:

2007-05-03  Holger Freyther <freyther@kde.org>

        Reviewed by Zack, landed by Simon.
        This is bugzilla bug 13499.

        * GdkLauncher/GdkLauncher.pro: Build the GdkLauncher using qmake
        * GdkLauncher/main.cpp: We don't have a config.h with the qmake build
        * Scripts/build-webkit: Add --gdk for the Gdk port
        * Scripts/webkitdirs.pm: Add helper methods for the Gdk port

2007-05-03  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Add AllInOneFile.o to the ignore list, since it includes files
        in the ignore list.

        * Scripts/check-for-global-initializers:

2007-05-02  Holger Freyther <freyther@kde.org>

        Reviewed by Mark Rowe.

        * Scripts/build-webkit: Remove the CMake call.
        * Scripts/webkitdirs.pm: Remove isQtWithQMake as QMake is now the only
        buildsystem for the Qt port.

2007-04-27  Kevin McCullough  <kmccullough@apple.com>

        - Removed debugging statements and took out the removal of the deletion
          of the symlink.  This is because multiple instances of run-webkit-tests
          can be running at the same time.
        * Scripts/run-webkit-tests:

2007-04-27  Adam Roben <aroben@apple.com>

        Reviewed by Maciej.

        Cleaned up prepare-ChangeLog

        * Scripts/prepare-ChangeLog: No code changes, but style now matches
        the prevalent style of our perl scripts.

2007-04-27  Nazar Kulyk  <schamane@myeburg.net>

        Reviewed by Mark Rowe.

        Basic auto-correction of user-entered URLs.

        * GdkLauncher/main.cpp:
        (autocorrectURL):
        (goToURLBarText):
        (main):

2007-04-28  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Anders.

        Rename some methods and variables to match the style guidelines.

        * GdkLauncher/main.cpp:
        (stringIsEmpty):
        (stringIsEqual):
        (goToURLBarText):
        (goButtonClickedCallback):
        (urlBarEnterCallback):
        (frameResizeCallback):
        (frameDestroyCallback):
        (menuMainBackCallback):
        (menuMainForwardCallback):
        (menuMainQuitCallback):
        (main):

2007-04-27  Holger Freyther <freyther@kde.org>

        Reviewed by Maciej.

        Remove unmaintained CMake build system.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt: Removed.
        * Scripts/build-webkit: Remove references to CMake.
        * Scripts/webkitdirs.pm: Remove references to CMake.

2007-04-26  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        * GdkLauncher/main.cpp:
        (main): Avoid use of deprecated API.

2007-04-26  Kevin McCullough  <kmccullough@apple.com>

        - Changed debugging statements for more information.

        * Scripts/run-webkit-tests:

2007-04-26  Kevin McCullough  <kmccullough@apple.com>

        - Adding debugging statements to see why these tests fail.  These will be removed.

        * Scripts/run-webkit-tests:

2007-04-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Add a setUseDashboardCompatibilityMode method to LayoutTestController which is used to toggle
        the dashboard compatibility mode.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setUseDashboardCompatibilityMode:]):
        (runTest):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-04-24  Timothy Hatcher  <timothy@apple.com>

        Setting the valid architectures to 32-bit only, so these projects
        will ignore requests to build them 64-bit. Once they can be built 64-bit,
        the valid architectures can be updated.

        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2007-04-23  Adam Roben  <aroben@apple.com>

        Reviewed by Mark Rowe and David Kilzer.

        * Scripts/build-webkit: Print the path to the run-safari script when
        finished building so that users can copy-and-paste the command to
        execute it.

2007-04-23  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - rename box-sizing to -webkit-box-sizing

        * Drosera/console.css: Here.
        * Drosera/debugger.css: And here.
        * Drosera/viewer.css: And here.

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=13350
          Build Ahem into DumpRenderTree

        * DumpRenderTree/DumpRenderTree.m:
        (activateAhemFont): Added. Activates the copy of Ahem included in the
        DumpRenderTree binary.
        (dumpRenderTree): Replaced the check that Ahem is available with a call
        to activateAhemFont().
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
          Added linker options to include Ahem in the data section of the
          DumpRenderTree binary.

2007-04-20  Adam Roben  <aroben@apple.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=13421
        Bug 13421: prepare-ChangeLog should use svn-create-patch when spewing diffs

        * Scripts/prepare-ChangeLog: Use svn-create-patch instead of svn diff.

2007-04-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim

        <rdar://problem/5008925>
        Expose the NSURLConnection delegate willCacheResponse API to WebResourceLoadDelegate

        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:resource:willCacheResponse:fromDataSource:]):
          Add the willCacheResponse delegate call

2007-04-18  Adam Roben  <aroben@apple.com>

        Reviewed by David Kilzer.

        * Scripts/webkitdirs.pm:
        (sub setConfiguration): Added an optional argument to set the
        configuration instead of parsing it from ARGV.

2007-04-17  Adam Roben  <aroben@apple.com>

        * Scripts/find-included-framework-headers: Search Obj-C and Obj-C++
        files as well.

2007-04-17  Adam Roben  <aroben@apple.com>

        Added a simple shell script to find all the headers from a specified
        framework or frameworks that are included by files beneath the working
        directory.

        * Scripts/find-included-framework-headers: Added.

2007-04-16  Timothy Hatcher  <timothy@apple.com>

        * Drosera/debugger.css: hide the borders for iframes

2007-04-13  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: #include
        stdio.h so that snprintf is defined.

2007-04-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Add the ability to dump the back/forward history of all windows open at the end of a test

        * DumpRenderTree/DumpRenderTree.m:
        (dumpBackForwardListForWebView): Dump B/F list for the given WebView
        (dump): Call dumpBackForwardListForWebView for each WebView open after the test

2007-04-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        By default, close any windows that have been opened during a test. This can be overridden by
        calling setCloseRemainingWindowsWhenComplete(false).

        Change the windows set to an array so we can gurantee the enumeration order.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setCloseRemainingWindowsWhenComplete:]):
        (runTest):
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow dealloc]):

2007-04-13  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (handleCallback): Explicitly cast the void* returned by malloc.

2007-04-12  Deneb Meketa  <dmeketa@adobe.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=13029
        rdar://problem/4994849
        Bug 13029: Permit NPAPI plug-ins to see HTTP response headers.
        Changes in WebKitTools are only for the NPAPI test plugin.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: main test logic.
        (pluginInvoke): support null window argument for NPStream creation.
        (pluginAllocate): initialization.
        (pluginDeallocate): cleanup.
        (handleCallback): add second JS callback arg: header dump.
        (notifyStream): added; hook from NPP_NewStream to record headers.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: declarations.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c: call new header hook.
        (NPP_NewStream): call new header hook.

2007-04-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed fast/forms/textarea-paste-newline.html.

        This failure was pretty funny. run-webkit-tests kills and respawns
        DumpRenderTree once every 1000 runs. Adding a few tests caused
        textarea-paste-newline.html to run right at the beginning of DumpRenderTree's
        lifetime, before any render tree dumps had occurred. However, WebCore
        used a render tree dump as the hook that set a global flag to allow
        pasting through the DOM API, so running before any render tree dumps had
        occurred caused this test to fail.

        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree): Explicitly tell WebKit to allow pasting through the DOM
        API, instead of hoping it will read the tea leaves.

2007-04-07  Mark Rowe  <mrowe@apple.com>

        Not reviewed.  Update to match some configuration changes that have been active on build.webkit.org.

        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py:

2007-04-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add support for opening new windows in DumpRenderTree.

        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setCallCloseOnWebViews:]):
        (-[LayoutTestController setCanOpenWindows]):
        Add two new methods callable from JavaScript. setCanOpenWindows controls whether a test
        can open new windows, and setCallCloseOnWebViews controls whether -[WebView close] should be called on
        web views that are about to be closed.

        (runTest):
        Make sure that only the main window is around when a test has finished running.

        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        (-[DumpRenderTreeWindow dealloc]):
        Manage the set of windows.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_Destroy):
        Add a "logDestroy" property which controls whether plugins should print when they are destroyed or not.

        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:createWebViewWithRequest:]):
        Create new windows.

        (-[UIDelegate webViewClose:]):
        Close windows.

2007-04-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        Move WebView and NSWindow creation to a separate function in preparation of supporting opening new
        windows in DRT.

        * DumpRenderTree/DumpRenderTree.m:
        (createWebView):
        (dumpRenderTree):

2007-04-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add the notion of a "disallowed URL", which the resource loader won't allow to be loaded.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController addDisallowedURL:]):
        (runTest):
        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):

2007-04-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Antti.

        * BuildSlaveSupport/build-launcher-dmg: Use bzip2 compression in nightly build disk images rather than gzip.

2007-04-02  Anders Carlsson  <andersca@apple.com>

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        Don't use #import in a header included by C files.

2007-03-31  Mark Rowe  <mrowe@apple.com>

        Reviewed by Mitz.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13239
        Bug 13239: REGRESSION (r20343): Drosera hits exception trying to call "count" cross-process

        Use -[WebScriptObject valueForKey:@"length"] to retrieve the length of a JavaScript array
        rather than -[WebScriptObject count].

        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument webScriptAttributeKeysForScriptObject:]):

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Add an "onstreamload" attribute to the plugin which is called when a stream starts loading.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_New):
        Look for the onstreamload attribute.

        (NPP_Destroy):
        Free the onstreamload attribute.

        (NPP_NewStream):
        Call the onstreamload handler.

2007-03-30  Geoffrey Garen  <ggaren@apple.com>

        Removing an assertion I just added because it's crashing the Leopard
        buildbot. The related layout test will still report a failure, so we
        don't really need this assertion.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c:
        (testAllocate):
        (testEnumerate):
        Add casts.

        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h:
        Don't use #import, use #include.

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Alexey.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):
        Free the identifier string.

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add TestObject.c and TestObject.h

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginGetProperty):
        Implement the testObject property.

        (pluginInvoke):
        Implement testEnumerate which takes an object and an array and enumerates
        the properties of the object and adds them to the array.

        (pluginAllocate):
        Allocate the test object.

        (pluginDeallocate):
        Free the test object.

        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c: Added.
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h: Added.
        Add a test object with two enumerable properties.

2007-03-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Layout test for <rdar://problem/5091330> REGRESSION: Repro crash in
        -[WebBaseNetscapePluginView(WebNPPCallbacks) destroyStream:reason:]
        navigating away from page with DivX movie plug-in (13203)

        Added hasStream property and destroyStream function, used by layout test.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginGetProperty):
        (pluginInvoke):
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_NewStream):

2007-03-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):
        Add new function which takes a function and calls it using NPN_InvokeDefault.

2007-03-27  Adele Peterson  <adele@apple.com>

        Adding comment.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didFinishLoadForFrame:]):

2007-03-27  Adele Peterson  <adele@apple.com>

        Fix svg tests by calling displayIfNeeded.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didFinishLoadForFrame:]):

2007-03-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Upload crash logs from DumpRenderTree as part of the test results to ease debugging
        of hard-to-reproduce crashes.

        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py:

2007-03-23  Adam Treat  <adam@staikos.net>

        Reviewed and committed by George.

        Patch by Adam Treat.  Removes hardcoded path to .pro file.

2007-03-22  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Removed eventSender.mouseClick because it was only useful for AppKit
        controls, which we don't use anymore.

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Removed
        mouseClick.

2007-03-22  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Make eventSender.mouseClick actually send a mouse up event.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseClick]):

2007-03-19  David Hyatt  <hyatt@apple.com>

        Update the minimum font size pref to match the actual default setting in Safari.  It should have been 1
        all this time and not 9.

        Reviewed by aroben

        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree):

2007-03-18  Dan Waylonis  <waylonis@mac.com>

        Reviewed by Tim Hatcher.

        DumpRenderTree changes for http://bugs.webkit.org/show_bug.cgi?id=13005
        Bug 13005: WebScriptObject +throwException needs NULL check.

        Add tests to ensure that a plugin can safely throw an exception in dealloc.

        * DumpRenderTree/ObjCPlugin.h:
        * DumpRenderTree/ObjCPlugin.m:
        (+[ObjCPlugin webScriptNameForKey:]):
        (+[ObjCPlugin isKeyExcludedFromWebScript:]):
        (-[ObjCPlugin dealloc]):

2007-03-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Have the nightly launcher prefer Safari found in /Applications or ~/Applications
        if present, otherwise fall back on using LaunchServices to locate it elsewhere
        on the system.  The motivation for this is to make the behaviour of the nightly
        builds more predictable on machines with multiple copies of Safari present.

        * WebKitLauncher/main.m:
        (locateSafariBundle):
        (main):

2007-03-12  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - add a DumpRenderTree feature where you can get the Objective-C
          class name of a JavaScript object

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Add the
        objCClassNameOf: selector.
        (+[LayoutTestController webScriptNameForSelector:]): Add the
        objCClassNameOf: selector, with the name "objCClassName".
        (-[LayoutTestController objCClassNameOf:]): Added.

2007-03-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Beefed up --threaded mode in light of <rdar://problem/4681051> Installer
        crashes in KJS::Collector::markOtherThreadConservatively(KJS::Collector::Thread*)
        trying to install iLife 06 using Rosetta on an Intel Machine

        --threaded mode now runs a bunch of different JavaScript threads, randomly
        killing and respawning them. This was sufficient for reproducing the
        bug on my MacBook Pro.

        * DumpRenderTree/DumpRenderTree.m:
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        (dumpRenderTree):

2007-03-11  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Brady Eidson.

        Add forward/backward/quit menus for easier testing.

        * GdkLauncher/main.cpp:
        (menuMainBackCb):
        (menuMainForwardCb):
        (menuMainQuitCb):
        (main):

2007-03-09  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13007
          svn-create-patch doesn't handle UTF files with BOMs as text

        Force diff to treat files that svn-create-patch thinks are text as text.

        * Scripts/svn-create-patch: Added -a switch to diff command.

2007-03-09  Mark Rowe  <mrowe@apple.com>

        Unreviewed.  Use the new SVN URL on the buildbot.

        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py:

2007-03-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Antti.

        Fix compiler warnings when building Drosera as 64-bit.

        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument breakpointEditorHTML]): Move away from deprecated NSString method.
        (-[DebuggerDocument scriptConfirmSheetDidEnd:returnCode:contextInfo:]): Update type.
        (-[DebuggerDocument webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:]): Update type to accommodate constant.

2007-03-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Update check-for-global-initializers to ignore new debug initializers in bidi.o and kjs_events.o.

        * Scripts/check-for-global-initializers:

2007-03-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add some assertions.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]):
        (-[WaitUntilDoneDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[WaitUntilDoneDelegate webView:didFailLoadWithError:forFrame:]):

2007-03-07  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        - WebKitTools part of fix for http://bugs.webkit.org/show_bug.cgi?id=12463
          WebArchiver - attempt to insert nil exception when archive empty iframe

        The dumpDOMAsWebArchive() test method uses the DOMDocument as a basis for creating
        a webarchive while the dumpSourceAsWebArchive() test method uses the original
        dataSource (page source) to create a webarchive.  Most tests currently use
        dumpDOMAsWebArchive() since this is what Safari does when saving a web page as a
        webarchive.

        * DumpRenderTree/DumpRenderTree.m: Renamed dumpAsWebArchive to dumpDOMAsWebArchive.
        Added dumpSourceAsWebArchive.
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpDOMAsWebArchive]):
        (-[LayoutTestController dumpSourceAsWebArchive]):
        (runTest):

2007-03-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Mark and Dave H.

        - rdar://problem/4922454
        - This fixes a security issue by making remote referrers not able to access local
        resources, unless they register their schemes to be treated as local. The result is
        that those schemes can access local resources and cannot be accessed by remote
        referrers.
        Because this behavior is new a link-on-or-after check is made to determine if the
        app should use the older, less safe, behavior.

        * DumpRenderTree/DumpRenderTree.m: Add ability to set user style sheet to DRT.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setUserStyleSheetLocation:]):
        (-[LayoutTestController setUserStyleSheetEnabled:]):

2007-03-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam, Darin.

        <rdar://problem/5025212>
        In Mail, a crash occurs at WebCore::Frame::tree() when clicking on embedded flash object

        Add a "getURLNotify" method to the plugin object. This lets you pass a URL, a target and a callback function
        to be run when the URL has finished (or failed) loading.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke):
        (handleCallback):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_URLNotify):

2007-03-04  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Load a url given on a command line in a way that also
        works for local (file://) urls.

        * GdkLauncher/main.cpp:
        (main):

2007-03-02  Geoffrey Garen  <ggaren@apple.com>

        Tweaked parse-malloc-history to work with new malloc_history output format.

        * Scripts/parse-malloc-history:

2007-02-28  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12887
        Bug#12887: [Drosera] Add ability to close loaded files

        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument closeCurrentFile:]): Adds delegation to call a JS script to close files
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/English.lproj/MainMenu.nib/classes.nib:
        * Drosera/English.lproj/MainMenu.nib/info.nib:
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib: Adds Close Current File menu item
        * Drosera/debugger.html: Changed "no files loaded" to "<No files loaded>" to match Xcode style
        * Drosera/debugger.js: Adds implementation of closeFile() to unload currently loaded file

2007-02-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Add new flags to build-webkit to be able to switch on/off xpath, xslt, etc. easily.

        * Scripts/build-webkit:

2007-02-27  Geoffrey Garen  <ggaren@apple.com>

        Small tweak to run-webkit-tests.

        * Scripts/run-webkit-tests: Allow people with lots of RAM to run more than
        1000 MallocStackLogging tests at a time.

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Lars.

        - set ENABLE_XSLT even when compiling without SVG support, since that is no
        longer hardcoded into config.h.

        * Scripts/build-webkit:

2007-02-26  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Rename *_SUPPORT defines to ENABLE_*.

        * GdkLauncher/gdklauncher.bkl:

2007-02-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        * Scripts/run-webkit-tests: Stop ignoring BidiRun leaks, now that they're
        fixed.

2007-02-24  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Improve gdklauncher: add text field for entering url.

        * GdkLauncher/gdklauncher.bkl:
        * GdkLauncher/main.cpp:
        (strEmpty):
        (strEq):
        (handleGdkEvent):
        (goToUrlBarText):
        (goButtonClickedCb):
        (urlBarEnterCb):
        (registerRenderingAreaEvents):
        (frameResizeCb):
        (frameDestroyCb):
        (main):

2007-02-22  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12852
        Bug#12852: Drosera should select function name, not "function" keyword when selecting from function list pop-up
        * Drosera/debugger.js: Fixed some logic errors resulting in generating double IDs and names.

2007-02-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Added option in layoutTestController to setTabKeyCyclesThroughElements, so we
        can test <rdar://problem/5014970> 9A374: Tabs don't work in the message body

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setTabKeyCyclesThroughElements:]):

2007-02-22  Geoffrey Garen  <ggaren@apple.com>

        Used svn merge -r19786:19785 to roll out previous hack to work around
        SVG painting issue in DRT.

        Implemented new work-around, which makes --paint paint *after* dumping
        the render tree instead of before, so that painting doesn't influence
        the SVG render tree.

        This should fix the ~400 new pixel failures introduced in r19786.

        * DumpRenderTree/DumpRenderTree.m:
        (dump):
        * Scripts/run-webkit-tests:

2007-02-22  Geoffrey Garen  <ggaren@apple.com>

        Resetting --leaks mode default to run 1000 tests at a time because setting it
        to 750 didn't stop the stack logging related crashes, and running more tests
        at a time is faster. The crashes seem to be a real bug in stack logging,
        not an out of memory condition.

        * Scripts/run-webkit-tests:

2007-02-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Added hack to force painting when running an SVG test. This is a work-around
        for http://bugs.webkit.org/show_bug.cgi?id=12849 SVG renderers update at
        paint time instead of style resolution time.

        We need this so that --leaks mode, which always paints, doesn't appear to
        fail SVG tests. We also need this if we ever want to test style application
        in SVG, since many SVGs don't apply style to their renderers until they paint.

        * Scripts/run-webkit-tests:

2007-02-21  Geoffrey Garen  <ggaren@apple.com>

        Reduced --leaks mode to running only 750 tests at a time, in the hopes
        of fixing intermittent crasher that may be caused by out of memory
        conditions.

        * Scripts/run-webkit-tests:

2007-02-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Made DRT paint when running run-webkit-tests in --leaks mode, to check
        for painting leaks.

        * DumpRenderTree/DumpRenderTree.m: Removed some "NO" initializations, since
        that's the default for statics.
        (dumpRenderTree): Added --paint command line option, which specifies that
        DRT should paint at the end of every test.
        (displayWebView): New function, called by dump() and -[LayoutTestController display].
        * Scripts/run-webkit-tests: Use the --paint command line option when checking
        for leaks.

        * Scripts/run-webkit-tests: Added a new, painting leak to the ignore list.
        Removed stale comment about THRD leaks -- we now ignore them reliably.

2007-02-21  Geoffrey Garen  <ggaren@apple.com>

        Tools tweak. No review necessary.

        * Scripts/parse-malloc-history: Enabled multiple merge-regexp command line
        arguments. Changed command line argument variables from special implicit
        no-op values to specific empty values that we test explicitly.

2007-02-21  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Bug 12834: Drosera should remember scroll position of open files like Xcode
        http://bugs.webkit.org/show_bug.cgi?id=12834

        * Drosera/debugger.js: Implemented scrolling memory

2007-02-20  Geoffrey Garen  <ggaren@apple.com>

        Tools tweak. No review necessary.

        Made parse-malloc-history executable. (Oops!)

        Made parse-malloc-history parse 'leaks' output in addition to 'malloc_history"
        output.

        Added the ability to merge callstacks by regexp, not just depth, so you
        can ask questions like, "How many of these allocations were due to that one
        call to ...?"

        * Scripts/parse-malloc-history:

2007-02-20  Geoffrey Garen  <ggaren@apple.com>

        * Scripts/parse-malloc-history: Added copyright info.

2007-02-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        New script to parse the output from malloc_history, so we can determine
        what's using memory in WebKit.

        * Scripts/parse-malloc-history: Added.

2007-02-20  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Darin Adler.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12802
        WebKit.framework is built with SVG_SUPPORT for No-SVG build

        * Scripts/build-webkit: Pass the "FEATURE_DEFINES=" option when building WebKit as well.

2007-02-19  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * Scripts/check-for-global-initializers: Ignore the global counter I added
        for SubresourceLoaders.

2007-02-19  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/check-for-global-initializers: Delete the linked executable if the check fails.
        Without this, you only see the global initializer error once, which makes it very easy
        to miss them.

2007-02-16  Mark Rowe  <mrowe@apple.com>

        Not reviewed.

        <rdar://problem/4982312> leaks bot should run in normal mode, rather than quiet mode

        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Switch back to default verbosity for output of leaks tests.

2007-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        * DumpRenderTree/DumpRenderTree.m: Don't ignore NSAttributedString WebCore::Node
        leaks anymore, either, since r19486 fixed them, too.
        (shouldIgnoreWebCoreNodeLeaks):

2007-02-15  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Don't ignore NSAttributedString leaks any more. Those were
        fixed by change 19486.

2007-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Ignore another leak, seen recently on the buildbot.

        * Scripts/run-webkit-tests:

2007-02-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Ignore another leak, seen recently on the buildbot.

        * Scripts/run-webkit-tests:

2007-02-13  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Fix a bug where --reset-results output would all go in one
        giant line.

2007-02-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        - add contextClick() operation to eventSender to be able to test this

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (-[EventSendingController contextClick]):

2007-02-11  Darin Adler  <darin@apple.com>

        * Scripts/check-for-global-initializers: Fix case where executable doesn't exist at all
        so it doesn't give a perl exception (happens in clean builds, for example).

2007-02-10  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        * Scripts/svn-create-patch:
        (findSourceFileAndRevision($)): Use File::Spec->abs2rel() instead of substr() to generate
        a relative path to the copied file.

2007-02-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        * Drosera/Drosera.icns: updated the icon with 512px and 256px variants

2007-02-10  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Timothy.

        * Scripts/svn-apply:
        (handleBinaryChange($$)): Binary patches don't need a trailing newline after the base64
        encoded text.

2007-02-10  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej

        <rdar://problem/4965133> WebKit sends file:// url referrers

        * Scripts/run-webkit-tests: Enhanced the http tests so that we can run layout tests
          on local files, but have an httpd for remote resources

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Ignore another false leak report.

        * Scripts/run-webkit-tests:

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Kevin McCullough.

        * Scripts/run-webkit-tests: Don't try to create /tmp/LayoutTests if it
        already exists, to avoid confusing error message.

        Also, remove /tmp/LayoutTests after running so unsupecting fools don't
        try to rm -rf it, only later to discover that they have completely hosed
        their machines.

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * GdkLauncher/main.cpp: Add -exit-after-loading and
        -dump-render-tree as debugging aid.
        (strEq):
        (main):

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Minor fixup based on Maciej's review last night.

        * Scripts/run-webkit-tests: Use normal "increment at end of loop" behavior,
        and do a little math to make it work.

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * GdkLauncher/gdklauncher.bkl:

2007-02-08  Kevin McCullough  <KMcCullough@apple.com>

        - Fix layout test failures.

        * Scripts/run-webkit-tests:

2007-02-08  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        * Scripts/check-for-global-initializers: For speed, only check files that
        have been modified since the last time we linked. For tidiness, capture
        stderr from nm, and prevent "nm: no name list" messages from going out.

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak, Adam Roben.

        Added 'nthly' support to run-webkit-tests. It's like 'singly', for an
        arbitrary number n.

        Plus some renames:
            - DumpRenderTree => "dumpTool" (to match abstraction elsewhere)
            - checkLeaks => "shouldCheckLeaks" (to match style guidelines)
            - tool => dumpTool (to match abstraction elsewhere)
            - httpdOpen => isHttpdOpen (to match style guidelines)

        Plus a few logic fixups:
            - Don't check isDumpToolOpen when we know we've called openDumpTool().
            - Use a single code path to decide when to shut down dumpTool and
              when to check for leaks, since the operations are coincidental.
            - Use a single code path for running the leaks tool, since the only
              thing that varies between configurations is the output file name.
            - Increment $count after each test finishes, instead of at the end
              of the loop, to help with comparing to the length of the array
              and %-ing by n.
            - Use a more robust test inside the loop to determine if we need to
              close dumpTool, instead of copying the closing code outside the loop.

        Layout tests pass.

        * Scripts/run-webkit-tests:

2007-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin, evil twin to Bethany P. Dakin.

        Ignore known leaks in CFRunLoop. Exclude THRD leaks by type so that we can
        catch all reports of them, not just those inside pthread_create.

        Also, use "\\" instead of "\" because we need the actual \ to get into the
        regexp string if it's going to do any escaping. (Oops!)

        * Scripts/run-webkit-tests:

2007-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Bethany P. Dakin.

        The 's' is optional when the leaks tool reports 'leaks'.

        * Scripts/run-leaks:

2007-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Bethany P. Dakin.

        Hooked up run-webkit-tests to the run-leaks script. No change in behavior yet.

        * Scripts/run-webkit-tests: Changed symbol names to valid regular expressions.

2007-02-06  David Smith  <catfish.man@gmail.com>

        Reviewed by Darin Adler.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12566
        [Drosera] Console history fixups

        * Drosera/console.js: assorted cleanups and fixes

2007-02-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        New script that allows you to ignore leaks by regular expression.

        * Scripts/run-leaks: Added.

2007-02-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12555
        Drosera doesn't handle CR ( carriage returns ) well

        - Normalize all the line endings.

        * Drosera/debugger.js:

2007-02-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Added some more known leaks to the leaks ignore list.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Why does XCode
        hate itself so much?
        * Scripts/run-webkit-tests:

2007-02-02  Geoffrey Garen  <ggaren@apple.com>

        Even better build fix than the last.

        * ChangeLog:
        * DumpRenderTree/DumpRenderTree.m:
        (shouldIgnoreWebCoreNodeLeaks):

2007-02-02  Geoffrey Garen  <ggaren@apple.com>

        Fixed build. Added work-around for GCC bug.

        * DumpRenderTree/DumpRenderTree.m:
        (shouldIgnoreWebCoreNodeLeaks):

2007-02-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added support for selectively ignoring WebCore::Node leaks during layout
        tests, so that we can ignore known leaks in other components.

        * DumpRenderTree/DumpRenderTree.m:
        (shouldIgnoreWebCoreNodeLeaks): Implements a black list of tests whose
        WebCore::Node leaks we have to ignore. Does this CFString gobbledy-gook
        confuse anyone else?
        (runTest):

2007-02-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin Adler.

        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:addMessageToConsole:]):
        Dump console messages.

2007-01-31  Anders Carlsson  <acarlsson@apple.com>

        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        Use an NSString here so we can guarantee that -description always returns the same value.

2007-01-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Added Selection::toRange to the leaks -exclude list, since it comes up
        as a false positive (Radar 4967949).

        Also added RangeCounter to the global initializer exclude list. I added
        a RangeCounter since leaks won't detect all Range leaks anymore.

        * Scripts/check-for-global-initializers:
        * Scripts/run-webkit-tests:

2007-01-31  Anders Carlsson  <acarlsson@apple.com>

        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        Don't try to create an identifier if resource loads shouldn't be dumped.

2007-01-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Add dumping of resource loads. This isn't completely tweaked yet since the test results would
        rely on resources being delivered in the same order which might not always be true. However, it works good
        enough for the simple webarchive tests I want to do right now.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpResourceLoadCallbacks]):
        (runTest):

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ResourceLoadDelegate.h: Added.
        * DumpRenderTree/ResourceLoadDelegate.m: Added.
        Add new resource load delegate.

2007-01-31  Geoffrey Garen  <ggaren@apple.com>

        Backing out the CFRunLoopRunSpecific exclude command because it was overly
        broad. We'll either need to work around this leak in DRT, or do some
        custom grep-based leak ignoring.

        * Scripts/run-webkit-tests:

2007-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Filed some more Radars in other components, added some more leaks to the
        exclusion list.

        * Scripts/run-webkit-tests: Ignore leaks in CFNotificationCenterAddObserver,
        CFRunLoopRunSpecific, and NSSpellChecker.

2007-01-30  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=11882
        Need a way to regression test .webarchive output files

        Implement layoutTestController.dumpAsWebArchive() to test WebArchive format.
        Alters WebResourceResponse and WebResourceURL properties within WebArchive format
        to normalize URLs to remove path where WebKit was checked out.  Also converts
        WebDataResource properties from data to string if the corresponding
        WebResourceMIMEType property starts with "text/" or equals
        "application/x-javascript".

        * DumpRenderTree/DumpRenderTree.m:
        (convertWebResourceDataToString): Added.
        (normalizeWebResourceURL): Added.
        (normalizeWebResourceResponse): Added.
        (serializeWebArchiveToXML): Added.
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpAsWebArchive]): Added.
        (runTest):

2007-01-30  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=12470
        svn-create-patch creates duplicate patches for files within an added/modified directory

        * Scripts/svn-create-patch:
        (sub generateFileList($\%\%)): Ignore directories when generating the file list.

2007-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed <rdar://problem/4485644> REGRESSION: JavaScriptCore has init routines

        No more mollycoddling for you, FastMalloc.o!

        * Scripts/check-for-global-initializers:

2007-01-29  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Maciej.

        Enables layout test for: http://bugs.webkit.org/show_bug.cgi?id=10725
        Image data in from RTFD clipboard data thrown away

        - This method is needed because NSArrays are bridged to JS Arrays,
          which in turn are bridged back to WebScriptObjects when passed from
          JS to ObjC. Hence it is not possbile to pass an NSArray from JS.

        * DumpRenderTree/DumpRenderTree.m:
        (-[DumpRenderTreePasteboard declareType:owner:]): Added a convenience method for JS.

2007-01-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added support for test for <rdar://problem/4608404> WebScriptObject's
        _rootObject lack of ownership policy causes crashes (e.g., in Dashcode)

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController storeWebScriptObject:]):
        (-[LayoutTestController accessStoredWebScriptObject]):
        (-[LayoutTestController dealloc]):

2007-01-26  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Small hack to ensure that our top level frame actually has the
        correct size. Unfortunately this means I'll have to regenerate
        all test cases :/

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-01-25  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin and Zack

        Move the test results for Qt into a directory of it's own
        (WebKit/LayoutTestResults/qt). Leave the Mac results where
        they are for now and share the text only results between
        Mac and Qt.

        Add support for a LayoutTestResults/platform/Skipped file
        to run-webkit-tests to be able to ignore certain tests

        Remove the old tests-skipped.txt from Qts DumpRenderTree
        implementation.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt: Removed.
        * Scripts/run-webkit-tests:

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix crash seen in layout tests

        * DumpRenderTree/EventSendingController.m: (-[EventSendingController dealloc]):
        Add back the line of code that sets savedMouseEvents to nil. I thought it was
        a field of the EventSendingController, but it's actually a global.

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - changed dragMode to be a property instead of a function

        * DumpRenderTree/EventSendingController.h: Renamed inDragMode to dragMode.
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Removed setDragMode.
        (+[EventSendingController isKeyExcludedFromWebScript:]): Added dragMode.
        (-[EventSendingController init]): Updated for name change.
        (-[EventSendingController leapForward:]): Ditto.
        (-[EventSendingController mouseUp]): Ditto.
        (-[EventSendingController mouseMoveToX:Y:]): Ditto.

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - made the deferral of mouse events until drag completes conditional
          it's needed for drag testing, and harmful for selection testing

        * DumpRenderTree/EventSendingController.h: Added inDragMode boolean.
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Added setDragMode:.
        (+[EventSendingController webScriptNameForSelector:]): Added name for setDragMode,
        and remove unneeded clearKillRing name.
        (-[EventSendingController init]): Initialize inDragMode to true.
        (-[EventSendingController dealloc]): Removed overzealous assertions -- we should
        not be asserting things that are dependent on the test content!
        (-[EventSendingController leapForward:]): Only queue events in drag mode.
        (-[EventSendingController setDragMode:]): Added.
        (-[EventSendingController mouseDown]): Removed overzealous assertion.
        (-[EventSendingController mouseUp]): Removed overzealous assertions.
        Only queue events in drag mode.
        (-[EventSendingController mouseMoveToX:Y:]): Only queue events in drag mode.

2007-01-24  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add a signal handler, always dump immediately if we get an
        error during a page load and raise the timeout to 5 seconds
        (as we get a lot less such failures now)

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::maybeDump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::waitUntilDone):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (crashHandler):
        (main):
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2007-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - a couple tiny tweaks to make --reset-results work better

        * Scripts/run-webkit-tests: Always generate results when --reset-results is specified.
        Don't make a separate "new" entry while generating results when --reset-results
        is specified since new results are the norm in that case.

2007-01-21  Sanjay Madhav  <sanjay12@gmail.com>

        Reviewed by Darin Adler.

        Test support for: <rdar://problem/4928583> Memory usage grows when reloading google.com/ig

        This adds a getJSObjectCount test-accessible function to allow test scripts to track JSObject usage.

        * DumpRenderTree/GCController.h:
        * DumpRenderTree/GCController.mm:
        (+[GCController isSelectorExcludedFromWebScript:]):
        (-[GCController getJSObjectCount]):

2007-01-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Track the output of run-javascriptcore-tests,
        catch single regressions, and don't generate tests results for new tests.

2007-01-20  Adam Roben  <aroben@apple.com>

        Rubberstamped by Maciej.

        * Scripts/run-webkit-tests: Change the default behavior back to
        generating results for new tests (this can be disabled with
        --no-new-test-results)

2007-01-19  Lars Knoll <lars@trolltech.com>

        Reviewed by Adam Roben.

        run-webkit-tests does now not generate new results by default anymore.
        You'll have to pass the --new-tests flag to it to force it to do so.

        This is required to make it possible to have tests running on multiple
        platforms peacefully together.

        * Scripts/run-webkit-tests:

2007-01-18  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        * Scripts/run-webkit-tests: Fix handling of configuration so it
        does the right thing when no explicit configuration is passed in.
        The old code assumed that the result of setConfiguration() was the
        configuration, but it's undefined when no configuration is
        explicitly passed in. The correct function to use is
        configuration(), and I also streamlined the code.

2007-01-17  Lars Knoll <lars@trolltech.com>

        Fix my last commit to actually work in all cases.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej

        Make sure DumpRenderTree exits when run-webkit-tests
        is done.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Small fixes in DumpRenderTree, so we don't by
        accident dump twice for the same test.

        Exclude one more test as it currently causes DumpRenderTree to
        hang forever.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::notifyDone):
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add a message handler to DumpRenderTree that will
        suppress all debug output coming from qDebug() statements.
        Like this we can get rid of all the noise coming
        from the notImplemented() macro when running the
        layout tests. You can get it back by adding -v to
        DumpRenderTree's command line.

        Changed run-webkit-tests slightly, so we by default
        don't fail anymore when our output differs from what
        is generated on the Mac. Added a --strict option, so
        that we can still see this cases and fix them one by one.

        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (messageHandler):
        (main):
        * Scripts/run-webkit-tests:

2007-01-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Use the new public API for the Qt build, and don't rely on
        WebKit internals anymore.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h: Removed.
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::notifyDone):
        (LayoutTestController::timerEvent):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2007-01-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs

        <rdar://problem/4810960>
        Gmail Editor: window.focus() called on keyDown (9640)

        * DumpRenderTree/EventSendingController.m: Send the keyDown event
        to the firstResponder, not the event's locationInWindow.  A
        key press's locationInWindow is meaningless and just a dummy
        coordinate.

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by bdash.

        Add a script to keep our header guards squeaky clean.

        * Scripts/clean-header-guards: Added.

2007-01-15  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix a few smaller issues in here, and update
        our list of skipped tests.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::timerEvent):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h:
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2007-01-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam.

        <rdar://problem/4908909> Need to create Leopard nightly build

        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj: Always use the 10.4 Universal SDK.  The disk images don't mount pre-10.4 so we aren't losing anything here.
        * WebKitLauncher/WebKitNightlyEnabler.m:
        (poseAsWebKitApp): Simplify CoreFoundation-related hackery by using _CFGetProcessPath instead of walking the mach-o symbol tables.  The smaller timeframe where the
        CFProcessPath environment variable is set allows this to work correctly on Leopard where the old code failed.
        (enableWebKitNightlyBehaviour):
        * WebKitLauncher/main.m:
        (main): Pass executable path as WebKitAppPath rather than CFProcessPath to prevent it being picked up too early by CoreFoundation.
        * Drosera/launcher.m:
        (main): Ditto

2007-01-12  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Get DumpRenderTree to work again for the Qt build.

        Make run-webkit-tests a little less verbose when testing
        Qt, and add an option to run DumpRenderTree inside valgrind
        (useful for debugging)

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::dump):
        (WebCore::DumpRenderTree::maybeDump):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp:
        (WebCore::DumpRenderTreeClient::dispatchDidHandleOnloadEvents):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h:
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:
        * Scripts/run-webkit-tests:

2007-01-12  Zack Rusin  <zack@kde.org>

        Add WEBKIT_FULLBUILD env variable to get the
        build do a make clean before make to cleanout the
        stale depenendencies (for buildbot mainly).

        * Scripts/webkitdirs.pm:

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=10249
          Temporarily disable tests that are causing kernel panics

        Changed the ImageDiff tool not to use CoreImage filters.

        * DumpRenderTree/ImageDiff.m:
        (main):
        (createImageFromStdin):
        (compareImages):
        (getDifferenceBitmap):

2007-01-11  Lars Knoll <lars@trolltech.com>

        Fix compilation

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-01-11  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin Adler.

        Adjust to loader changes.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2007-01-06  George Staikos  <staikos@kde.org>

        This doesn't build on all unix platforms!

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-01-05  Zack Rusin  <zack@kde.org>

        Reviewed by Simon.

        Fix the undefined warnings and try to detect
        the DISPLAY properly.

        * Scripts/run-webkit-tests:

2007-01-05  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Mark Rowe.

        Speed up svn-create-patch for copied and moved files.

        * Scripts/svn-create-patch:
        (manufacturePatchForAdditionWithHistory($$)): Use 'svn cat' instead of 'svn cat -rNNNNN'
        so svn pulls original from local disk.

2007-01-04  Lars Knoll <lars@trolltech.com>

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:
              Link with RPATH to (hopefully) get the automatic tests working.

2007-01-03  Mark Rowe  <bdash@webkit.org>

        Reviewed by Anders.

        * Scripts/run-webkit-tests: Launch Safari using the same WebKit build configuration as the layout tests used.

2007-01-02  Zack Rusin  <zack@kde.org>

        Make it work after javascriptcore/bindings changes.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:

2007-01-01  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=12023
        svn-create-patch and friends should handle moved/copied files

        * Scripts/svn-apply: Identify copied files and handle those before all other patches.
        * Scripts/svn-create-patch: Generate patches with subtle changes for copied files.
        (findMimeType($)): Added.
        (findModificationTime($)): Added.
        (findSourceFileAndRevision($)): Added.
        (generateDiff($$$)): Changed to use svn stat instead of svn diff.
        (isBinaryMimeType($)): Added.
        (manufacturePatchForAdditionWithHistory($$)): Added.
        * Scripts/svn-unapply: Identify copied files and handle those after unapplying all other patches.

2006-12-29  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Stop DumpRenderTree from reporting false Frame/Node leaks due to new SVGImage

        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree): clear WebCore cache before exiting

2006-12-29  David Kilzer  <ddkilzer@webkit.org>

        Reverted last commit until WebResourceData issue is fixed.

        http://bugs.webkit.org/show_bug.cgi?id=11882
        Need a way to regression test .webarchive output files

        * DumpRenderTree/DumpRenderTree.m:
        (serializeWebArchiveToXML): Removed.
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpAsWebArchive]): Removed.
        (runTest):

2006-12-28  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=11882
        Need a way to regression test .webarchive output files

        Implement layoutTestController.dumpAsWebArchive() to test WebArchive format.
        Saves WebArchive plist in xml format, then alters file:// URLs to remove path
        where WebKit was checked out.

        * DumpRenderTree/DumpRenderTree.m:
        (serializeWebArchiveToXML): Added.
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpAsWebArchive]): Added.
        (runTest):

2006-12-28  George Staikos  <staikos@kde.org>

        Reviewed by Olliej.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro: don't build on non-X11

2006-12-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric Seidel. Prose edited by Mitz Pettel.

        Some cleanup I did while debugging the regression in plugins/netscape-dom-access.html.

        No behavior change. Layout tests pass.

        * DumpRenderTree/DumpRenderTree.h: Exported the done BOOL in place of the
        doneLoading() accessor function. This matches the rest of DRT's exports and
        makes it easier to search for clients who check (!done).

        * DumpRenderTree/DumpRenderTree.m: Moved fflush() call to runTest() so
        it would cover both code paths for calling runTest().

        (dumpRenderTree): "doneLoading()" => "done"
        (dump): ditto
        * DumpRenderTree/EditingDelegate.m: ditto
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]): ditto
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]): ditto
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]): ditto
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]): ditto
        (-[EditingDelegate webView:shouldDeleteDOMRange:]): ditto
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]): ditto
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]): ditto
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]): ditto
        (-[EditingDelegate webViewDidBeginEditing:]): ditto
        (-[EditingDelegate webViewDidChange:]): ditto
        (-[EditingDelegate webViewDidEndEditing:]): ditto
        (-[EditingDelegate webViewDidChangeTypingStyle:]): ditto
        (-[EditingDelegate webViewDidChangeSelection:]): ditto
        * DumpRenderTree/UIDelegate.m: ditto
        (-[UIDelegate webView:runJavaScriptAlertPanelWithMessage:]): ditto

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by bradee-oh.

        Add very simple run-pageloadtest script for running SVG page load test.

        * Scripts/run-pageloadtest: Added.

2006-12-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric Seidel.

        Some cleanup in preparation for fixing <rdar://problem/4740328> Safari
        crash on quit in _NPN_ReleaseObject from KJS::Bindings::CInstance::~CInstance

        (dumpRenderTree): Renamed "installedPlugins" to "sharedDatabase."

2006-12-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added --threaded support to run-webkit-tests and DumpRenderTree.

        In "threaded" mode, DRT runs a concurrent JavaScript thread with each test,
        stressing the thread safety of JavaScriptCore and the JavaScriptCore/WebCore
        interface. This is useful for tracking down bugs you might see on a system
        configured to use a PAC file.

        Ironically, I can proudly state that very few layout tests pass.

        * DumpRenderTree/DumpRenderTree.m: Added javaScriptThread and helper functions
        for starting and stopping it.
        (runJavaScriptThread): helper function
        (startJavaScriptThread): helper function
        (stopJavaScriptThread): helper function

        (dumpRenderTree): Added --threaded command line argument.
        * Scripts/run-webkit-tests: ditto

2006-12-22  Mark Rowe  <bdash@webkit.org>

        Reviewed by Brady.

        Fix for <rdar://problem/4265976>
        prepare-ChangeLog sometimes lists the wrong Objective-C class name for a changed method

        * Scripts/prepare-ChangeLog: Treat @end as the end of both the interface and the method declaration.

2006-12-21  Mark Rowe  <bdash@webkit.org>

        Reviewed by Tim Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=11922
        Bug 11922: REGRESSION(r17128): Drosera no longer shows local variables in stack frame

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject webScriptAttributeKeysForScriptObject:]): Use an anonymous function with function.call to
        ensure that the properties are being retrieved from the correct scope object.

2006-12-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add support for the layoutTestController JavaScript object
        to be able to get textOnly dumps.
        Added a Qt specific hack to always get the same fonts (the ones
        added in this submit) and the same dpi when running the layout tests.
        Modified the run-webkit-tests script to also do a comparison to the
        Mac generated outputs (by stripping out positioning information).

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::resetJSObjects):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dump):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp:
        (WebCore::DumpRenderTreeClient::DumpRenderTreeClient):
        (WebCore::DumpRenderTreeClient::partClearedInBegin):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h:
        * DumpRenderTree/DumpRenderTree.qtproj/fontoverload.cpp: Added.
        (QX11Info::appDpiY):
        (QX11Info::appDpiX):
        (qt_x11ft_convert_pattern):
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.h: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp: Added.
        (LayoutTestController::shouldDumpAsText):
        (LayoutTestController::shouldWaitUntilDone):
        (LayoutTestController::reset):
        (LayoutTestController::dumpAsText):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/AHEM____.TTF: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/COPYING: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierBold.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierBoldOblique.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierMedium.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/CourierMediumOblique.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaBold.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaBoldOblique.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaMedium.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/HelveticaMediumOblique.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/SymbolMedium.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesBold.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesBoldItalic.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesMedium.ttf: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/fonts/TimesMediumItalic.ttf: Added.
        * Scripts/run-webkit-tests:

2006-12-21  Mark Rowe  <bdash@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=11888
        Bug 11888: REGRESSION (r18320): Web Inspector panes broken

        * Drosera/debugger.js: Use removeProperty to reset a style property to its initial value.

2006-12-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Updated EventSender to be able to send mouse up events outside the WebView.
        This is a minor tweak to a hackish implementation. The real solution
        should be to use NSApplication's event sending model instead of rolling
        our own, but I don't have time for that right now.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseUp]):

2006-12-15  Marvin Decker  <marv.decker@gmail.com>

        Reviewed by Darin and Alexey.

        Fix the Windows build, move various Client implementations out of
        WebCore and into WebKit.

        * Spinneret/Spinneret.sln:

2006-12-14  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady.

        * Makefile.shared: use $PIPESTATUS[0] and a sub-shell to exit with xcodebuild's exit status

2006-12-13  Zack Rusin  <zack@kde.org>

        Reviewed by rwlbuis

        Use the qmake build by default with Qt - it's the one that works
        currently.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Some more fixes to the dumprendertree application.
        Fix the run-webkit-tests script for Qt.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro: Added.
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2006-12-10  Rob Buis  <buis@kde.org>

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.m:
        (dump):

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Get the DumpRenderTree app to compile again

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp:
        (WebCore::DumpRenderTreeClient::DumpRenderTreeClient):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h:
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2006-12-09  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Repair QMake build on OS X.

        * Scripts/build-webkit:

2006-12-09  Zack Rusin  <zack@kde.org>

        Fixing small mistakes in the build scripts for
        the qmake builds.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2006-12-09  Simon Hausmann  <hausmann@kde.org>

        Reviewed by hyatt.

        Add support for a QMake build using build-webkit --qmake

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2006-12-09  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Remove reference to Unity.

        * Scripts/webkitdirs.pm:

2006-12-08  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        Fix the compile after recent API changes.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
        (main):

2006-12-08  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Build Qt webkit on non-linux, and prefer it if $QTDIR is set

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2006-12-06  Steve Falkenburg  <sfalken@apple.com>

        Support C strings for localization

        * Scripts/extract-localizable-strings:

2006-12-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Make extract-localizable-strings compatible with cpp file extensions.

        * Scripts/extract-localizable-strings:

2006-11-21  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - a couple changes to reduce the chance of false positives on the leakbot

        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree): Move the main function into a separate function so we can run
        a final garbage collect afterward without any stray values on the stack. Replaced
        the old way of closing down a WebView (setting the delegates to nil) with the new
        way (calling the close method), which does a more complete job of shutting
        everything down without waiting for the WebView object to be deallocated.
        (main): Put auto-release pool here and added an explicit call to garbage collect.
        With a separate function, we greatly reduce the chance that a stray address on the
        stack will keep an object alive.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Let Xcode do its thing,
        because I don't have what it takes to fight the power.

2006-11-17  Zack Rusin  <zack@kde.org>

        Reviewed by Mitz. Landed by Niko.

        Fixing compilation.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Adding
        ContextMenuClient to the constructor

2006-11-12  Mark Rowe  <bdash@webkit.org>

        Reviewed by Mitz.

        Clean up of GdkLauncher bakefile.

        * GdkLauncher/gdklauncher.bkl:

2006-11-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Make DRT work again on Qt/Linux.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2006-11-10  Zack Rusin  <zack@kde.org>

        Reviewed and landed by Anders.

        Adjusting to the recent loader changes, making it compile
        and work.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:

2006-11-10  Zack Rusin  <zack@kde.org>

        Reviewed by Anders.

        Making the Qt code work after refactorings in WebCore.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:

2006-11-08  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - same change as below, only tested this time

        * DumpRenderTree/DumpRenderTree.m: (main): Explicitly turn "tab to links"
        mode off. I think we need to do this because WebPreferences saves things
        for us automatically. It would be good to turn that off for DumpRenderTree,
        but for now lets handle this like the other preferences (set it explicitly
        each time).

2006-11-08  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        * DumpRenderTree/DumpRenderTree.m: (main): Get rid of code to turn on
        "tab to links" mode. No current tests depend on this, and there's a new
        test I want to land that depends on the default setting.

2006-11-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux\gdk build fixes.

        * GdkLauncher/main.cpp:
        (LauncherFrameGdk::LauncherFrameGdk):
        (main):

2006-11-06  Alexey Proskuryakov  <ap@nypop.com>

        Build fix, approved in principle by Tim H.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Disable deprecated warnings for main.c (TestNetscapePlugin),
        as it now uses QuickDraw to convert mouse event coordinates.

2006-11-05  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        Bug 11525: [Drosera] function menu doesn't understand object.method = function() {} syntax
        http://bugs.webkit.org/show_bug.cgi?id=11525

        * Drosera/debugger.js: imporved the function name code

2006-11-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        Make sure that alerts and delegate output made after notifyDone() are ignored, rather than
        being attributed to the next test.

        * DumpRenderTree/EditingDelegate.m:
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        (-[EditingDelegate webViewDidChangeSelection:]):
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:runJavaScriptAlertPanelWithMessage:]):

2006-11-06  Mark Rowe  <bdash@webkit.org>

        Reviewed by Alexey.

        Fix "Undefined subroutine &main::WEXITSTATUS" when build-dumprendertree fails.

        * Scripts/run-webkit-tests: import the POSIX module.

2006-11-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        Test for http://bugs.webkit.org/show_bug.cgi?id=11517
        REGRESSION: Flash clicks/interactivity not working properly

        Teach TestNetscapePlugin to log events passed to it. To enable, set eventLoggingEnabled to true:

        <embed name="plg" type="application/x-webkit-test-netscape" width=100 height=100></embed>
        <script>
            plg.eventLoggingEnabled = true;
            // use eventSender to simulate events...
        </script>

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginGetProperty):
        (pluginSetProperty):
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_HandleEvent):

2006-11-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11521
        Bug 11521: [Drosera] Breakpoint editor UI behaves incorrectly when multiple editors are open

        * Drosera/debugger.js: Use .// instead of // so that it doesn't root the search at the document.

2006-11-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11513
        Bug 11513: [Drosera] Function popup fails to appear when clicking supposedly valid areas.

        * Drosera/debugger.css: Stick a min-width on the menu to keep it from becoming smaller than the control.

2006-11-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11512
        Bug 11512: [Drosera] Scrolling via keyboard breaks after clicking in function popup.

        * Drosera/debugger.js: blur() the function popup when we're done with it.

2006-11-04  Mark Rowe  <bdash@webkit.org>

        Reviewed by Darin Adler.

        Fix use of uninitialized value in pattern match.

        * Scripts/webkitdirs.pm:

2006-11-04  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/webkitdirs.pm: Don't try to use the Xcode build setting if it's project-relative.

2006-11-03  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11510
        Bug 11510: [Drosera] Doubleclicking the attach table should attach to the clicked item.

        * Drosera/DebuggerApplication.m:
        (-[DebuggerApplication showAttachPanel:]): Set the doubleAction for the table view

2006-11-03  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=9596
        Bug 9596: [Drosera] add a function popup to the source pane

        * Drosera/debugger.css: Added styles for function popup
        * Drosera/debugger.html: Added function popup button and select
        * Drosera/debugger.js: Added function popup functionality

2006-11-03  Michael Emmel  <mike.emmel@gmail.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9671

        * Scripts/wkstyle:
        Adds astyle sed script formats according to most of the style guidelines.

2006-11-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=7323
        REGRESSION (10.4.4): ondrag* events don't fire on page in a frame

        When dragging, do not send EventSendingController's events immediately. Dragging
        is supposed to be modal, so we need to perform it from within the delegate, without
        returning to JS to make the next mouse movement.

        When the mouse is down, mouse events are now recorded, and executed when mouseUp is sent.

        * DumpRenderTree/EventSendingController.h:
        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController dealloc]):
        (-[EventSendingController leapForward:]):
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (+[EventSendingController saveEvent:]):
        (+[EventSendingController replaySavedEvents]):
        * DumpRenderTree/UIDelegate.m:
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):

2006-11-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Justin Garcia.

        Made dumping of editing callbacks opt-in, so that editing spew doesn't
        cloud non-editing tests.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController shouldDumpEditingCallbacks]):
        (runTest):
        * DumpRenderTree/EditingDelegate.m:
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
        (-[EditingDelegate webViewDidChangeSelection:]):

2006-11-02  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej, landed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Make Windows build work with Visual C++ Express.
        * Scripts/install-win-extras: Make setx.exe actually run.

2006-11-01  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Kevin.

        Fixed bug where additional arguments got fed to xcode and jsdriver.pl
        Since testkjs is being built before the tests are run, we don't need
        to build it with webkit.

        Fixes bugs
        http://bugs.webkit.org/show_bug.cgi?id=11462
        http://bugs.webkit.org/show_bug.cgi?id=6168

        * Scripts/build-webkit:
        * Scripts/run-javascriptcore-tests:

2006-11-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Added accessor to get the source directory for use in client scripts

        * Scripts/webkitdirs.pm:

2006-11-01  Mark Rowe  <bdash@webkit.org>

        Reviewed by Mitz.

        Update references to webkit.opendarwin.org to webkit.org in Spinneret and WebKit.app.

        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
        * WebKitLauncher/WebKitNightlyEnabler.m:
        (cleanUpAfterOurselves):

2006-10-31  Mark Rowe  <bdash@webkit.org>

        Reviewed by Stephanie.

        Limit build slaves to a single build to prevent concurrent builds on a single slave from significantly increasing build time.

        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py: Adjust slave distribution, and make use of a SlaveLock.
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py: Remove unused Qt build factory.

2006-10-31  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.m: Instead of allocating a single local
        pasteboard, allocate any number of local pasteboards.
        (main): Allocate the dictionary of pasteboards.
        (+[DumpRenderTreePasteboard _pasteboardWithName:]): Allocate a pasteboard,
        given a name.
        (+[LocalPasteboard alloc]): Added, so we don't have to call NSAllocateObject
        explicitly elsewhere.
        (-[LocalPasteboard addTypes:owner:]): Added a check that the owner responds
        to the selector rather than calling unconditionally.

2006-10-30  Darin Adler  <darin@apple.com>

        - fixed build

        * DumpRenderTree/DumpRenderTree.m: (-[LocalPasteboard setString:forType:]):
        Don't use CFPasteboard.

2006-10-30  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11353

        * Drosera/debugger.js: ParsedURL() object now recognizes local files

2006-10-30  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * DumpRenderTree/DumpRenderTree.m: Changed to allocate a local pasteboard.
        This should make our buildbot tests no longer need a pasteboard server.

2006-10-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth.

        Reorganized project file into Delegates and Controllers groups, and split
        UIDelegate stuff into a UIDelegate class.

        A little birdy told me that I might end up adding some UIDelegate methods
        to DRT soon.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (runTest):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2006-10-31  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add new platform/graphics include directory.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt:

2006-10-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Stephanie.

        Add a special case for the Internal makefiles, so it can find the OepnSource.

        * Scripts/webkitdirs.pm:

2006-10-30  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        Change Makefiles to return non-zero when module make fails.
        Fix bug where if xcode options are not set, modules can build in the
        wrong directory.

        * Makefile:
        * Scripts/webkitdirs.pm:

2006-10-30  Matt Lilek  <pewtermoose@gmail.com>

        Reviewed by Tim H.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=10468
        [Drosera] The Console toolbar button should bring the console window to the front.

        The console now gets focus when its activated but already open.  Command + L also
        now activates/focuses the console.

        * Drosera/English.lproj/MainMenu.nib/classes.nib:
        * Drosera/English.lproj/MainMenu.nib/info.nib:
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib:
        * Drosera/debugger.js:

2006-10-29  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: Renames done, ready for the next round.
        * Scripts/do-webcore-rename: Ditto.

2006-10-29  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: And again.

2006-10-29  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Tweaked plans for renaming again.

2006-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        * DumpRenderTree/DumpRenderTree.m: (-[DumpRenderTreeWindow keyDown:]):
        Added. Does nothing, which prevents a beep.

        * Scripts/do-webcore-rename: Tweaked plans for renaming a bit.

2006-10-27  Brady Eidson  <beidson@apple.com>

        Rubber stamped by Tim Hatcher

        Added "make universal" to build universal binaries

        * Makefile:
        * Makefile.shared:

2006-10-26  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Geoff.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11419
        REGRESSION (r17299): Assertion failure in -[WebHTMLView(WebPrivate) _topHTMLView]
        ([view isKindOfClass:[WebHTMLView class]]) when running the layout tests

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseMoveToX:Y:]):

2006-10-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin Adler.

        Fix Qt/Linux build.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):

2006-10-24  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Maciej.

        - Changed run-javascriptcore tests to build testkjs before running.

        * Scripts/run-javascriptcore-tests:

2006-10-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix Qt/Linux build.

        - Remove BrowserExtensionQt, move it's methods to Page/FrameQt.
        - Fix CMakeLists.txt to include platform/network.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt:

2006-10-24  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Bug 11382: [Drosera] Dragging breakpoints onto each other can mess up inline editor
        http://bugs.webkit.org/show_bug.cgi?id=11382

        * Drosera/debugger.js: Breakpoint dragging now ensures that editors aren't orphaned.

2006-10-21  Darin Adler  <darin@apple.com>

        * Scripts/commit-log-editor: Use baseProductDir() to find the base product directory.
        This was still using "symroots" so it almost never worked!

2006-10-21  Darin Adler  <darin@apple.com>

        * Makefile: Build DumpRenderTree too.
        * Scripts/do-webcore-rename: Removed bogus comment.

2006-10-20  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Bug 11367: Inline Breakpoint Editor Improvements: Act III
        http://bugs.webkit.org/show_bug.cgi?id=11367

        Major breakpoint editor changes:
        * Breakpoints can now either pause or log to console
        * Code cleanup through use of XPath and converting breakpoints to objects
        * Breakpoints now track how many times they've been reached
        * UI tweaks
        * The breakpoint editor now saves changes as they're entered
        * Because changes are auto-saved now, the save button has been converted to a close button (images from PSMTabBarControl, BSD licensed)
        * If an expression with no return is entered as a condition, it will be wrapped transparently with a return statement.

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject breakpointEditorHTML]): A way of loading this from an external file, as it was getting too complex to include inline.
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Images/close.tif: Added.
        * Drosera/Images/close_active.tif: Added.
        * Drosera/Images/close_hover.tif: Added.
        * Drosera/breakpointEditor.html: Added.
        * Drosera/console.js: Added a way to append messages from outside the console window.
        * Drosera/debugger.js:
        * Drosera/viewer.css:
        * Drosera/viewer.html:

2006-10-18  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Improve the doubleclick behavior of breakpoints, and make breakpoints with no custom condition set appear blank instead of return [-1, 1] depending on enabled state.

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject getDoubleClickMillis]): Add an ObjC wrapper for GetDblTime() so that JS can call it
        * Drosera/Drosera.xcodeproj/project.pbxproj: link Carbon for GetDblTime()
        * Drosera/debugger.js:

2006-10-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders.

        Bug 10851: Crash with Drosera
        http://bugs.webkit.org/show_bug.cgi?id=10851

        This crash results in an assert in debug builds.

        assert(implementsCall());

        The __drosera_introspection propery was not callable. Now we just assign
        this.__drosera_introspection in the evaluateWebScript call.
        This change also removes one DO message.

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject webScriptAttributeKeysForScriptObject:]):

2006-10-18  Mark Rowe  <bdash@webkit.org>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=11304
        Bug 11304: Drosera fails to link as universal binary on PowerPC machine

        * Drosera/Drosera.xcodeproj/project.pbxproj: Use -weak_framework to link against JavaScriptCore and WebCore directly
        when they are not part of the WebKit umbrella framework.

2006-10-18  Adam Roben  <aroben@apple.com>

        fixo el buildo II: Release's Pride.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2006-10-18  Geoffrey Garen  <ggaren@apple.com>

        fixo el buildo.

        Work around #import of <PDFKit/PDFView.h>.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2006-10-18  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Add Xcode 3 style inline breakpoint editor. Credit to xenon for the CSS wizardry to get the appearance working properly.

        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Images/breakpointeditor.png: Added.
        * Drosera/breakpointEditor.css: Removed.
        * Drosera/breakpointEditor.html: Removed.
        * Drosera/breakpointEditor.js: Removed.
        * Drosera/debugger.js:
        * Drosera/viewer.css:

2006-10-18  David Harrison  <harrison@apple.com>

        Reviewed by Tim H.

        Bug 11341: REGRESSION (r16760): editing/selection/editable-links is failing
        http://bugs.webkit.org/show_bug.cgi?id=11341

        Link editing behavior became a preference. DumpRenderTree needs to specify the
        non-default behavior it wants (WebKitEditableLinkOnlyLiveWithShiftKey).

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2006-10-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Anders.

        Make compiler not complain about unused gk. SpinneretWebHost was not setting
        initial refcount upon creation, so it is completely bogus.

        * GdkLauncher/main.cpp:
        (main):
        * Spinneret/Spinneret/Spinneret.h:
        (SpinneretWebHost::SpinneretWebHost):

2006-10-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add another hanging test, to the "to be skipped" list.

        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:

2006-10-14  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Anders.

        Some fixes to get the Qt BuildSlave to run the LayoutTests.

        * Scripts/build-dumprendertree: No need to call cmake again.
        * Scripts/run-webkit-tests: Expose LD_LIBRARY_PATH.

2006-10-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Force --no-http on Qt/Linux.

        * Scripts/run-webkit-tests:

2006-10-13  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adam.

        Gets JavaScripCore tests running on windows.

        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitdirs.pm:

2006-10-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Exclude some tests which crash or hang from Qt/Linux DRT.
        These are known to fail, and will be fixed at some point :-)

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::readSkipFile):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt: Added.

2006-10-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Specialization of alert() for DumpRenderTree - just log the output, don't show any message box.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp:
        (WebCore::DumpRenderTreeClient::runJavaScriptAlert):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h:

2006-10-12  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Also regenerate GdkLauncher makefiles, since not doing that might
        lead to mismatch between WebCore and GdkLauncher compiler settings.

        * Scripts/regenerate-makefiles:

2006-10-10  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Bug 11246: Minor Drosera code cleanup
        http://bugs.webkit.org/show_bug.cgi?id=11246

        * Drosera/debugger.js: Change [has, add, remove]StyleClass to be a function on Element rather than taking an Element as an argument.

2006-10-10  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Tim H.

        Bug 9778: http://bugs.webkit.org/show_bug.cgi?id=9778

        * Drosera/Drosera.xcodeproj/project.pbxproj: Added files
        * Drosera/English.lproj/Debugger.nib/info.nib: Resized the main window and WebView
        * Drosera/English.lproj/Debugger.nib/keyedobjects.nib: Resized the main window and WebView
        * Drosera/Images/SourceArrowOpen.png: Added.
        * Drosera/Images/fileIcon.jpg: Added.
        * Drosera/Images/siteCollapsed.tif: Added.
        * Drosera/Images/siteExpanded.tif: Added.
        * Drosera/Images/siteIcon.tif: Added.
        * Drosera/debugger.css: Added File Browser styles
        * Drosera/debugger.html: Added File Browser UI
        * Drosera/debugger.js: Added File Browser functionality

2006-10-10  Darin Adler  <darin@apple.com>

        * Scripts/do-file-rename: Added.

2006-10-09  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Geoff.

        Add -exit-after-loading option to make gdklauncher quit after fully loading and rendering
        a page. This allows automatic testing via e.g. valgrind.

        * GdkLauncher/gdklauncher.bkl:
        * GdkLauncher/main.cpp:
        (LauncherFrameGdk::LauncherFrameGdk):
        (LauncherFrameGdk::setExitAfterLoading):
        (LauncherFrameGdk::handledOnloadEvents):
        (handle_event):
        (main):

2006-10-06  David Smith  <catfish.man@gmail.com>

        Reviewed by Timothy.

        Bug 9665: [Drosera] Conditional breakpoints. http://bugs.webkit.org/show_bug.cgi?id=9665

        * Drosera/Drosera.xcodeproj/project.pbxproj: Added new files
        * Drosera/breakpointEditor.css: Added.
        * Drosera/breakpointEditor.html: Added.
        * Drosera/breakpointEditor.js: Added.
        * Drosera/debugger.js: Added conditional breakpoint support, and the ability to open the breakpoint editor window on option-clicking a breakpoint.

2006-10-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fix Qt/Linux build by adapting the s/ScrollBar/Scrollbar/ changes.

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2006-10-05  Oliver Hunt  <ohunt@apple.com>

        Reviewed by Anders.

        * Scripts/run-webkit-tests:
        Fix pixel tests.

2006-10-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin Adler.

        * Scripts/run-webkit-tests:
        Add an environment variable, WebKitExpectedTestResultsDirectory, which controls where expected test
        results should be.

2006-10-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Cmake: make it possible to install the libraries after having built using 'build-webkit'.
        Just set the "WebKitInstallationPrefix" environment variable to your desired prefix.

        * Scripts/webkitdirs.pm:

2006-10-04  Mark Rowe  <bdash@webkit.org>

        Reviewed by Stephanie.

        Switch the Qt buildbot to the standard set of build steps.
        Have JavaScriptCoreTest check the output of run-javascriptcore-tests to
        see if any regressions were spotted, and fail the test if so.

        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py:
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py:

2006-10-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mitz Pettel!

        Bug 10708: [Drosera] Make the console input plaintext-only
        http://bugs.webkit.org/show_bug.cgi?id=10708

        Change the console input -webkit-user-modify property to
        read-write-plaintext-only.

        * Drosera/console.css:

2006-10-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Bug 10473: [Drosera] Overlapping text in JavaScript Console
        http://bugs.webkit.org/show_bug.cgi?id=10473

        Using min-height instead of height to avoid overlapping text.

        * Drosera/console.css:

2006-10-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Tim H.

        Added a bash-style command history.

        * Drosera/console.js:

2006-10-03  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam and Brady.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        Update URL to Ahem.ttf

2006-10-03  Darin Adler  <darin@apple.com>

        * Scripts/commit-log-editor: Added missing "close" call. Oops!

2006-10-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Offer a way for BuildBot to not colorize the cmake output, when building
        with the 'build-webkit' script. Add "--color" / "--no-color" option pair.

        Default is colorize output, though only Qt platform handles this for now.

        * Scripts/build-dumprendertree:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2006-10-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Make all important scripts work with Qt/Linux.

        You can safely use this now:
        set-configuration-release --debug && build-webkit && run-javascriptcore-tests && run-webkit-tests

        * Scripts/build-dumprendertree:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2006-10-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        build-webkit tweak: Use WebKitBuild/$config as output dir (Release/Debug).

        * Scripts/webkitdirs.pm:

2006-10-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Proper build-webkit support for Qt/Linux.

        Compilation process is similar to OSX now, aka.
        the build directory is RootCheckoutDir/WebKitBuild now.

        * Scripts/build-webkit: Recognize Qt.
        * Scripts/webkitdirs.pm: Add buildCMakeProject() logic.

2006-10-01  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Maciej.

        Add QT build slave to Buildbot.

        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py: Add QT build slave, fix existing errors.
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py: Add QT build factory.
        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py: Disable forcing of builds via web interface to prevent spamming.  Use the IRC bot in #webkit-build instead.
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Add CMake build step.

2006-09-28  David Harrison  <harrison@apple.com>

        Suggested by Darin Adler.

        Moved an extern declaration from inside a method to the top of the file.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController clearKillRing]):

2006-09-28  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        Add clearKillRing so we can test emacs support with empty kill ring.

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController clearKillRing]):

2006-09-27  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Maciej, landed by Brady

        Fix URL bar updating.

        * Spinneret/Spinneret/Spinneret.h:
        (SpinneretWebHost::didStartProvisionalLoadForFrame):
        (SpinneretWebHost::didCommitLoadForFrame):
        (SpinneretWebHost::didFinishLoadForFrame):

2006-09-23  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Eric.

        Build Fix.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController enableDOMUIEventLogging:]):

2006-09-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        * Scripts/do-webcore-rename:

2006-09-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Bug 10923: Frame scroll layout test failures on the buildbot
        http://bugs.webkit.org/show_bug.cgi?id=10923

        Added a new method that will toggle on the recursive dump of
        child frame scroll positions.

        * DumpRenderTree/DumpRenderTree.m:
        (dumpFrameScrollPosition):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpChildFrameScrollPositions]):

2006-09-19  Krzysztof Kowalczyk <kkowalczyk@gmail.com>

        Reviewed by eseidel.  Landed by eseidel.

        Detect that close button was pressed and exit cleanly.

        * GdkLauncher/main.cpp:
        (handle_event):
        (main):

2006-09-17  Adam Roben  <aroben@apple.com>

        Reviewed by hyatt, sfalken.

        Get DumpRenderTree compiling and limping along on Windows.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (loadResourceIntoArray): Added this function that WebCore::ImageWin needs from WebKit
        (main): Add NULL argument to Page constructor.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj: Remove incorrect "wininet.dll" argument to CC, fix JavaScriptCore.lib path, add *_SECURE_NO_DEPRECATE #defines
        * Scripts/webkitdirs.pm: Fix JavaScriptCore.lib path

2006-09-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=10635
        Bug 10635: Buildbot configuration in SVN is out of sync with build.webkit.org

        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py: Reorder build slaves within build factories in an attempt to spread the load evenly.
        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py: Return to sending status emails to <svnuser>@opensource.apple.com addresses.
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Update configuration to match changes in Buildbot.  Always do clean SVG builds.

2006-09-09  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Eric.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10791
        Even More Objective-C DOM auto-generation cleanup

        - Change to use new, more Objectice-C'ish version of
          DOMKeyboardEvent's initKeyboardEvent.  Fixes an error with
          regression test for fast/events/dblclick-addEventListener.html.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController fireKeyboardEventsToElement:]):

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fixes last part of: http://bugs.webkit.org/show_bug.cgi?id=10644
        Move QtLauncher down to WebKitQt.

        * QtLauncher/CMakeLists.txt: Removed.
        * QtLauncher/main.cpp: Removed.

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin Adler.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10644
        Adjust DumpRenderTree to the FrameQtClient changes.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::frame):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.cpp: Added.
        (WebCore::DumpRenderTreeClient::DumpRenderTreeClient):
        (WebCore::DumpRenderTreeClient::~DumpRenderTreeClient):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTreeClient.h: Added.

2006-09-03  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming plans.

2006-09-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=10693
        Convert JavaScript arrays to AppleScript lists

        * DumpRenderTree/AppleScriptController.m:
        (convertAEDescToObject):
        (-[AppleScriptController doJavaScript:]): Support printing AEDescLists.

2006-08-31  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Prepare for another round of renaming.

2006-08-29  Dan Waylonis  <waylonis@google.com>

        Reviewed by ggaren.

        - Verification of exceptions thrown in a plugin.  Test for bug 10114.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ObjCPlugin.m:
        (+[ObjCPlugin isSelectorExcludedFromWebScript:]):
        (+[ObjCPlugin webScriptNameForSelector:]):
        (-[ObjCPlugin throwIfArgumentIsNotHello:]):

2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Commit KDE related tweaks, to be able to
        differentiate between a Qt-only or a KDE build.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt: Add ksvg2/ includes.
        * QtLauncher/CMakeLists.txt: Add ksvg2/ includes.

2006-08-29  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/gdb-safari: Set DYLD_FRAMEWORK_PATH inside gdb instead of setting it in gdb's environment
        to work around what seems to be a bug in some versions of gdb.

2006-08-16  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

        Part of <rdar://problem/4481553> NetscapeMoviePlugIn example code scripting doesn't work in Firefox (4319)
        <http://bugs.webkit.org/show_bug.cgi?id=4319>: NetscapeMoviePlugIn example code scripting doesn't work
        in Firefox

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_GetValue):
        WebKit's NPP_GetValue() reference counting behavior has been changed to match Firefox.  NPObject return values
        are expected to be retained by the plug-in, and released by the caller.

2006-08-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim Hatcher.

        Fixes one chunk of: http://bugs.webkit.org/show_bug.cgi?id=10604

        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::checkLoaded): Faster polling for isLoaded() in
        Qt's DumpRenderTree.

      * Scripts/run-webkit-tests:
        Use -expected-qt.txt etc.. output in run-webkit-test if isQt().

2006-08-28  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/build-drosera: Fix behavior when there are multiple options.

2006-08-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders.

        Drosera will be built when you type make.

        * Drosera/Makefile: Added.
        * Makefile: Added.
        * Makefile.shared: Added.

2006-08-27  Anders Carlsson  <acarlsson@apple.com>

        Forgot to add these.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp: Added.
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp: Added.
        (main):

2006-08-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric, landed by Anders.

        Add DumpRenderTree support for Qt/Linux.

        * DumpRenderTree/DumpRenderTree.qtproj/CMakeLists.txt: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp: Added.
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::readStdin):
        (WebCore::DumpRenderTree::checkLoaded):
        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h: Added.
        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp: Added.
        (main):
        * Scripts/build-dumprendertree:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        Add QtLauncher (was testunity before), which provides a
        standalone "browser" to test the Qt platform stuff.

        * QtLauncher/CMakeLists.txt: Added.
        * QtLauncher/main.cpp: Added.
        (main):

2006-08-22  Trey Matteson  <trey@usa.net>

        Reviewed by ggaren.

        Added support for a new set of browser navigation tests.  The main feature
        is the ability for a test to queue up a set of future actions that will
        happen after that first page is loaded.  This is used to simulate a sequence
        of user actions such as filling out forms, loading additional pages or
        going back.  In addition we can now dump out the state of the back/forward
        list, and the scroll position is dumped if not at 0,0.

        * DumpRenderTree/DumpRenderTree.m:
        (main):  Init new state
        (compareHistoryItems):  New utility to support sorting.
        (dumpHistoryItem):  Write out a WebHistoryItem and kids.
        (dumpFrameScrollPosition):  Write out the scroll position.
        (dump):  Optionally write b/f list or scroll position.
        (-[WaitUntilDoneDelegate processWork:]):  Perform queued work.
        (-[WaitUntilDoneDelegate webView:locationChangeDone:forDataSource:]):
        Kick off any queued actions.  Fixed for the case of loads started in
        a subframe instead of the root frame.
        (-[WaitUntilDoneDelegate webView:didStartProvisionalLoadForFrame:]):
        Grab the topmost frame that is being loaded.  Do this as early as possible,
        instead of in didCommitLoadForFrame.
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]):
        Noting a load has started now happens in previous method.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):  Boilerplate
        (+[LayoutTestController webScriptNameForSelector:]):  Boilerplate
        (-[LayoutTestController notifyDone]):  readyToDump var is subsumed by
        topFrameLoading
        (-[LayoutTestController dumpBackForwardList]):  New impl, just set a bit.
        (-[LayoutTestController _addWorkForTarget:selector:arg1:arg2:]):
        Add new work to the queue.
        (-[LayoutTestController _doLoad:target:]):  Do a queued load.
        (-[LayoutTestController _doBackOrForwardNav:]):  Do a queued back/forward.
        (-[LayoutTestController scheduleBackNav:]):  Ways for scripts to queue actions
        (-[LayoutTestController scheduleForwardNav:]):
        (-[LayoutTestController scheduleReload]):
        (-[LayoutTestController scheduleScript:]):
        (-[LayoutTestController scheduleLoad:target:]):
        (runTest):  Clear new state for each test.  Renamed from "dumpRenderTree"
        since it's not one of the functions that does any dumping.

2006-08-15  Jonas Witt <jonas.witt@gmail.com>

        Reviewed by Darin Adler.

        - added a function to create a few DOMKeyboardEvents and dispatch
          them to a specified HTML element
          http://bugs.webkit.org/show_bug.cgi?id=9736

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController fireKeyboardEventsToElement:]):

2006-08-15  Duncan Wilcox  <duncan@mclink.it>

        Reviewed and tweaked by Darin Adler.

        - added DumpRenderTree support so editing delegate can be made to refuse edits
          to enable tests for http://bugs.webkit.org/show_bug.cgi?id=10129

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Add setAcceptsEditing:
        to the list of methods.
        (+[LayoutTestController webScriptNameForSelector:]): Use the name setAcceptsEditing,
        without the colon, for the JavaScript name.
        (-[LayoutTestController setAcceptsEditing:]): Added. Calls through to the editing
        delegate.
        (dumpRenderTree): Set the acceptsEditing flag to YES before each test.

        * DumpRenderTree/EditingDelegate.h: Added an "acceptsEditing" flag and getter and
        setter methods to the class.
        * DumpRenderTree/EditingDelegate.m:
        (-[EditingDelegate init]): Initialize acceptsEditing to YES.
        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]): Instead of always returning YES,
        return the value of acceptsEditing.
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]): Ditto.
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]): Ditto.
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]): Ditto.
        (-[EditingDelegate webView:shouldDeleteDOMRange:]): Ditto.
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        Ditto.
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]): Ditto.
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]): Ditto.
        (-[EditingDelegate setAcceptsEditing:]): Added.

2006-08-03  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        Bug 10224: [Drosera] Drosera icon should be set on DroseraLauncher so it appears in nightly builds
        http://bugs.webkit.org/show_bug.cgi?id=10224

        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/LauncherInfo.plist:

2006-08-03  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        - fix ASSERTION FAILURE: draggingDocumentView == nil in -[WebViewPrivate dealloc]
          when a test performs an unsuccessful drag and drop operation.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseUp]): Added a call to -draggingExited: if the
        drag operation for the mouse release is NSDragOperationNone.

2006-08-02  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Bug 9632: [Drosera] syntax highlighting is slow (reproducible 40 second hang)
        http://bugs.webkit.org/show_bug.cgi?id=9632

        Do not change the file source when normalizing the line endings.
        We use this file source to compare against new versions of the source
        as it comes in, so we can skip re-syntax highlighting if they are the same.
        The problem is apparent on yahoo.com since they have mixed line endings and
        once we normalize them the source will always be different. This was
        compounded by the fact that yahoo has around 40 inline scripts. Each
        inline script causes us to check if the main document has more loaded,
        that is when we compare the source strings. Since they are always different
        we would syntax highlight yahoo.com 40 times! We do check source length before
        doing a more expensive string comparison, but the lengths were the same.

        * Drosera/debugger.js:

2006-08-02  Niels Leenheer  <niels.leenheer@gmail.com>

        Reviewed by Timothy.

        Bug 9931: [Drosera] Needs a cool icon
        http://bugs.webkit.org/show_bug.cgi?id=9931

        * Drosera/Drosera.icns: Added.
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Info.plist:

2006-08-01  Darin Adler  <darin@apple.com>

        - fix a bug in my recent change where the mouse position at the end of
          the last test would affect the results of the next test

        * DumpRenderTree/DumpRenderTree.m: (dumpRenderTree): Set lastMousePosition to 0.

2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10182
        Bug 10182: [Drosera] Evaluating expressions in Console is slow when current frame has many variables

        * Drosera/console.js: String.indexOf returns -1 when the string is not found.
        Correct the logic to not reload local variable list unless an '=' character is in the expression.

2006-07-31  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10171
          REGRESSION: failing layout test: fast/events/objc-event-api.html

        * DumpRenderTree/DumpRenderTree.m:
        (main): Add pose so we can implement +[NSEvent mouseLocation]. Put the window at a predictable
        location in flipped coordinates, since those are the coordinates that we use.
        (+[DumpRenderTreeEvent mouseLocation]): Implement this, since it's used for mouse event handling
        inside WebHTMLView.

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController initialize]): Removed unused webkitDomEventProperties array.
        (-[EventSendingController init]): Removed, since the whole thing was a no-op.
        (-[EventSendingController mouseMoveToX:Y:]): Convert the x,y pair to window coordinates. The old code
        probably worked OK, but this is needed to be correct.
        (-[EventSendingController handleEvent:]): Put clientX/Y before screenX/Y and removed the flipping
        code from screenY. We didn't really need to flip screenY -- what was actually happening was that the
        position that DumpRenderTree chose was in non-flipped coordinates, and with that fixed we can just
        dump the screenY as-is.

2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=10178
        Bug 10178: [Drosera] Selecting a frame in the stack list should take you to that location in the source

        * Drosera/debugger.js:  Keep a stack that contains the source file and line number references for outer
        frames.  Use this stack to determine which file and line to highlight when a stack frame is selected.

2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=10175
        Bug 10175: [Drosera] Anonymous functions show up as "(global scope)" in stack list

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject currentFunctionStack]): If the frame has a caller it isn't the global scope.

2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=10167
        Bug 10167: REGRESSION(r15688): ASSERTION FAILED: _private->mouseDownEvent != nil in layout tests

        * DumpRenderTree/EventSendingController.m: Don't set the mouse down flag
        in keyDown handler.

2006-07-30  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Maciej.

        Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
        http://bugs.webkit.org/show_bug.cgi?id=9686

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject switchToServerNamed:]): Remove as listener before resuming to
        ensure that the server does not try and notify us of events related to the resumption.
        (-[WebScriptObject webView:exceptionWasRaised:sourceId:line:forWebFrame:]): Delegate
        call through to JavaScript.
        * Drosera/debugger.js: Pause debugger when exception is raised.

2006-07-29  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed by Darin Adler.

        - fixes for Linux build

        * GdkLauncher/mk: Added call to bakefile_gen before calling make.
        * GdkLauncher/gdklauncher.bkl: Tweak comment.

2006-07-24  Dan Waylonis  <waylonis@google.com>

        Reviewed and tweaked a bit by Darin Adler.

        * DumpRenderTree/ObjCPlugin.m:
        (+[ObjCPlugin isSelectorExcludedFromWebScript:]): Added "echo:".
        (+[ObjCPlugin webScriptNameForSelector:]): Use the name "echo" for
        "echo:" so it's nice to call from JavaScript.
        (-[ObjCPlugin echo:]): Just returns the same object -- can be used
        to test a round trip through Objective-C types.

2006-07-24  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        Fix http://bugs.webkit.org/show_bug.cgi?id=10060
        Improve iExploder results parsing

        * Scripts/run-iexploder-tests: Fix Apach logs parsing to produce a correct results
        in random mode, too.

2006-07-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Timothy.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9964
          Add switch to prepare-ChangeLog to skip svn update of ChangeLog files

        * Scripts/prepare-ChangeLog: Added --[no-]update switch.

2006-07-16  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/buildbot.css:
        Removed "No newline at end of file" that snuck in as part of the "apply patch" process.
        * GdkLauncher/mk:
        Removed "Property changes" that snuck in as part of the "apply patch" process.

2006-07-16  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9875
          Teach svn-apply and svn-unapply to use patch(1) for additions and deletions

        * Scripts/svn-apply:
        (addDirectoriesIfNeeded): Don't try to add a directory that's already in svn.
        (checksum): Added.
        (patch): Use patch(1) for non-binary additions and deletions.
        * Scripts/svn-unapply:
        (checksum): Added.
        (patch): Use patch(1) for reverting non-binary additions and deletions.
        (revertDirectories): Don't try to revert a directory that hasn't changed in svn.

2006-07-13  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Timothy.

        Bug 9889: [Drosera] Stepping out when paused after last statement in function skips a frame
        http://bugs.webkit.org/show_bug.cgi?id=9889

        * Drosera/debugger.js:  Track whether we paused during the execution of willLeaveFrame.  If
        so, have stepOut pause on the next call to willExecuteStatement rather than second.

2006-07-12  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9848
          Teach svn-create-patch and friends to fix ChangeLog patches

        * Scripts/svn-apply: Added fixChangeLogPatch() and invoked it in the proper place.
        * Scripts/svn-create-patch: Ditto.
        * Scripts/svn-unapply: Ditto.

2006-07-12  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by ggaren.

        Bug 9869: [Drosera] JS Console fails to evaluate input when paused in global scope
        http://bugs.webkit.org/show_bug.cgi?id=9869

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject currentFunctionStack]): Include the global frame in the stack.

2006-07-12  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by ggaren.

        Bug 9863: Drosera needs to show something at launch
        http://bugs.webkit.org/show_bug.cgi?id=9863

        * Drosera/DebuggerApplication.m:
        (-[DebuggerApplication applicationDidFinishLaunching:]): Show the attach window on launch.

2006-07-12  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Timothy.

        Lets Drosera build universal for the nightlies. Right now it is not
        possible to build a universal binary on a PPC machine because of a
        conflict with the universal SDK.

        * BuildSlaveSupport/build-launcher-app:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2006-07-11  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Tim O.

        - test for http://bugs.webkit.org/show_bug.cgi?id=7808
        Assertion failure in -[WebBaseNetscapePluginStream dealloc] when requesting an invalid URL

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke): treat getURL() with one parameter as if the second parameter were NULL -
        should open a new stream and deliver the data to the current instance.

2006-07-11  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Bug 9598: [Drosera] add a JavaScript evaluator console
        http://bugs.webkit.org/show_bug.cgi?id=9598

        * Drosera/DebuggerApplication.h:
        * Drosera/DebuggerApplication.m:
        (-[DebuggerApplication knownServers]):
        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject evaluateScript:inCallFrame:]):
        (-[WebScriptObject showConsole:]):
        (-[WebScriptObject toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:]):
        (-[WebScriptObject toolbarDefaultItemIdentifiers:]):
        (-[WebScriptObject toolbarAllowedItemIdentifiers:]):
        (-[WebScriptObject webView:createWebViewWithRequest:]):
        (-[WebScriptObject webViewShow:]):
        (-[WebScriptObject webViewAreToolbarsVisible:]):
        (-[WebScriptObject webView:setToolbarsVisible:]):
        (-[WebScriptObject webView:setResizable:]):
        (-[WebScriptObject webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        (-[WebScriptObject scriptConfirmSheetDidEnd:returnCode:contextInfo:]):
        (-[WebScriptObject webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:]):
        (-[WebScriptObject webView:windowScriptObjectAvailable:]):
        (-[WebScriptObject webView:didFinishLoadForFrame:]):
        (-[WebScriptObject webView:didReceiveTitle:forFrame:]):
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Images/console.png: Added.
        * Drosera/console.css: Added.
        * Drosera/console.html: Added.
        * Drosera/console.js: Added.

2006-07-11  Timothy Hatcher  <timothy@apple.com>

        Reviewed by a tired Geoff.

        Bug 9597: [Drosera] hook up the variables table to show stack variables
        http://bugs.webkit.org/show_bug.cgi?id=9597

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject isSelectorExcludedFromWebScript:]):
        (-[WebScriptObject webScriptAttributeKeysForScriptObject:]):
        (-[WebScriptObject localScopeVariableNamesForCallFrame:]):
        (-[WebScriptObject valueForScopeVariableNamed:inCallFrame:]):
        (-[WebScriptObject webView:didReceiveTitle:forFrame:]):
        (-[WebScriptObject webView:didLoadMainResourceForDataSource:]):
        (-[WebScriptObject webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[WebScriptObject webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[WebScriptObject webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[WebScriptObject webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        * Drosera/debugger.css:
        * Drosera/debugger.html:
        * Drosera/debugger.js:

2006-07-10  Tim Omernick  <timo@apple.com>

        Reviewed by Beth Dakin.

        <http://bugs.webkit.org/show_bug.cgi?id=9844>:
        Add DOM access test to DumpRenderTree's Netscape plug-in

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (testDOMAccess):
        (pluginInvoke):

2006-07-10  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=9839
          Bug 9839: Nightly launcher fails to detect extensions when extension causes crash on load

        Now track three states: initializing, running, and closed.  If we are launched and the previous
        state was initializing then we likely just experienced a crash on launch.

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (myApplicationWillFinishLaunching): Improve wording of dialog.  Update to set new running state.
        (myApplicationWillTerminate): Update to use new states.
        (cleanUpAfterOurselves): Display alert if previous state was initializing.  Set state as
        initializing as early as practical.
        (symbol_lookup): Bring code up to speed with formatting guidelines.
        (GDSymbolLookup): Ditto.

2006-07-10  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:
        Remove include paths with "khtml" in them. Add one for "html" subdir or WebCore.

2006-07-09  David Kilzer  <ddkilzer@kilzer.net>

        Build fix.

        - Backed out http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Backed out previous change.

2006-07-09  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=9693
          svn-apply should set ChangeLog date correctly when applying patches

        * Scripts/svn-apply: Set the ChangeLog entry date using a configurable timezone
        before applying the patch.
        * Scripts/svn-unapply: Reset the ChangeLog entry date before unapplying the patch.

2006-07-09  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Final version of this round of renaming for posterity.

2006-07-09  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Next round of renaming. (Last round was done.)

2006-07-09  David Kilzer  <ddkilzer@kilzer.net>

        - http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Restore Hyatt's original logic to make buildbot
        work again.  Add VC++ Express check as the fallback.

2006-07-09  Bjoern Graf  <bjoern.graf@gmail.com>

        Reviewed by Timothy Hatcher.

        - http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Make Windows build work with Visual C++ Express.

2006-07-09  Joost de Valk  <jdevalk@opendarwin.org>

        Reviewed by Eric.

        Fixes bug http://bugs.webkit.org/show_bug.cgi?id=9804 .
        Patch by coldwinter@katamail.com.

        In the congratulations message, "capatibilies" should be "capabilities".

        * Scripts/build-webkit:

2006-07-09  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Timothy Hatcher.

        - http://bugs.webkit.org/show_bug.cgi?id=9794
          Teach run-webkit-tests how to ignore tests with performance improvements

        * Scripts/run-webkit-tests: Speed up test list generation, implement --ignore-tests
        feature, and minor clean up.

2006-07-08  Darin Adler  <darin@apple.com>

        Reviewed by Geoff (well, half of it at least).

        - http://bugs.webkit.org/show_bug.cgi?id=9788
          storage leaks in Objective-C tests

        * DumpRenderTree/DumpRenderTree.m: (-[LayoutTestController keepWebHistory]):
        * DumpRenderTree/ObjCPlugin.m: (-[ObjCPlugin removeBridgeRestrictions:]):
        Add a release to fix a storage leak.

2006-07-08  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: A few more.

2006-07-08  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Another cut at renames. About ready to go (later today).

2006-07-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=9734
        - add support for dumping non-HTML as text - in this case use textContent
        instead of innerText

        * DumpRenderTree/DumpRenderTree.m:
        (dump):

2006-07-02  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Bug 9631: [Drosera] Add "Step Over" and "Step Out"
        http://bugs.webkit.org/show_bug.cgi?id=9631

        Adds step over and step out. Along with a little code cleanup
        that was minor enough to piggyback on this fix.

        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument stepOver:]):
        (-[DebuggerDocument stepOut:]):
        (-[DebuggerDocument windowDidLoad]):
        (-[DebuggerDocument windowWillClose:]):
        (-[DebuggerDocument toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:]):
        (-[DebuggerDocument toolbarDefaultItemIdentifiers:]):
        (-[DebuggerDocument toolbarAllowedItemIdentifiers:]):
        (-[DebuggerDocument validateUserInterfaceItem:]):
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/debugger.html:
        * Drosera/debugger.js:
        * Drosera/viewer.css:

2006-07-02  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Bug 9628: [Drosera] Split Views acting oddly
        http://bugs.webkit.org/show_bug.cgi?id=9628

        Only update the last X or Y coordinate if the new
        size was not constrained. Also adds the resize cursor to
        the body during the drag incase there is a constrained
        over drag off of the resizer element.

        * Drosera/debugger.js:

2006-07-02  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Alexey Proskuryakov.

        Bug 9692: Warning about Safari extensions on every launch is obnoxious
        http://bugs.webkit.org/show_bug.cgi?id=9692

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (myApplicationWillTerminate): Note that we are exiting cleanly.
        (cleanUpAfterOurselves): Install bundle load tracking only if we failed
         to exit cleanly on our last invocation.  This doesn't play nicely with
         multiple concurrent instances of WebKit.app so it can be disabled via
         defaults write com.apple.Safari WKNEShouldMonitorShutdowns -bool NO.

2006-07-02  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Alexey Proskuryakov.

        Bug 9654: Refresh Loop when accessing feed URLs
        http://bugs.webkit.org/show_bug.cgi?id=9654

        * WebKitLauncher/Info.plist: Don't claim to handle feed:// URLs.

2006-07-02  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Timothy Hatcher.

        Bug 9689: Nightly builds should warn a user about potential problems when using
        "Safari extensions"
        http://bugs.webkit.org/show_bug.cgi?id=9689

        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitNightlyEnabler.m:
        (myBundleDidLoad): Keep track of if any bundles that are loaded.
        (myApplicationWillFinishLaunching):  Notify user if any bundles are loaded.
        (cleanUpAfterOurselves): Register for NSBundleDidLoadNotification and
        NSApplicationWillFinishLaunchingNotification notifications so that we can
        track bundle loads and notify the user at launch completion.

2006-06-30  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed by Darin Adler.

        - first check-in of a Gdk shell for testing WebKit

        * GdkLauncher: Added.

2006-06-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Need to call window close so WebView tears-down completly.

        * DumpRenderTree/DumpRenderTree.m:
        (main): call [window close]

2006-06-29  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        Bug 9615: Buildbot configuration should be in SVN repository
        http://bugs.webkit.org/show_bug.cgi?id=9615

        Import BuildBot configuration files as used by build.webkit.org.
        auth.py has been stubbed out so that slave passwords are not disclosed.

        * BuildSlaveSupport/build.webkit.org-config/Makefile: Added.
        * BuildSlaveSupport/build.webkit.org-config/buildbot.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/buildbot.tac: Added.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/__init__.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/auth.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/basesteps.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/builders.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/factories.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/schedulers.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/status.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/webkit/steps.py: Added.

2006-06-29  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin Adler.

        Bug 9614: Nightly builds should notify user if a newer build is available
        http://bugs.webkit.org/show_bug.cgi?id=9614

        * BuildSlaveSupport/build-launcher-app: Write revision number to WebKit.app's VERSION file.
        * BuildSlaveSupport/build-launcher-dmg: Pass revision number to server-side nightly maintenance
        script so it can keep track of the latest revision.
        * Scripts/run-webkit-tests: Pass build-dumprendertree's exit status through correctly.
        * WebKitLauncher/VERSION: Added.  Placeholder for SVN revision number
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/start.html: Retrieve revision number from VERSION file, and pass it through to
        the nightly start page.

2006-06-26  Jonas Witt  <jonas.witt@gmail.com>

        Reviewed by Darin Adler.

        Bug 9579: LayoutTests/fast/events/objc-event-api.html failing due to screenY output
        http://bugs.webkit.org/show_bug.cgi?id=9579

        Report screenY values as (height of zero screen - screenY)

        * DumpRenderTree/EventSendingController.m: (-[EventSendingController handleEvent:]):

2006-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        Bug 9591: [Drosera] breakpoints should be dragable and deletable by dragging off the gutter
        http://bugs.webkit.org/show_bug.cgi?id=9591

        Makes breakpoints dragable. If dragged off the gutter they are deleted.

        * Drosera/debugger.js:
        * Drosera/viewer.css:

2006-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Bug 9568: assertion failure in Safari after quitting Drosera
        http://bugs.webkit.org/show_bug.cgi?id=9568

        Call switchToServerNamed:nil and not removeLister to make sure
        the server object is set to nil to prevent further removeListener calls.

        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument applicationTerminating:]):

2006-06-25  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        * Scripts/svn-apply: Speed up isDirectoryEmptyForRemoval() by returning as soon as we find
        that the directory is not empty instead of reading in every single file and directory first,
        then checking the count.  Avoid warning in removeDirectoriesIfNeeded() if $svnOutput is not
        defined.

2006-06-25  Darin Adler  <darin@apple.com>

        * Scripts/svn-apply: Tweak comments.
        * Scripts/svn-create-patch: Ditto.
        * Scripts/svn-unapply: Ditto.

2006-06-25  David Kilzer  <ddkilzer@kilzer.net>

        Formatting fix per Bug 9571 Comment #2.

        http://bugs.webkit.org/show_bug.cgi?id=9571#c2

        * Scripts/svn-apply: Formatting fix.

2006-06-25  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=9571
        Teach svn-apply and svn-unapply to handle directory adds and removes better

        * Scripts/svn-apply: Handle directory adds more intelligently.  Handle directory removes.
        * Scripts/svn-unapply: Handle undoing both directory adds and removes.

2006-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Bug 9574: Drosera should show inline scripts within the original HTML
        http://bugs.webkit.org/show_bug.cgi?id=9574

        Refactor the JavaScript code to have a distinction between files
        and scripts. Show the script in the context of the HTML file if
        it's URL is the same as the frame's main resource. At the time of
        the disParseScript callback the main resource might not be completely
        loaded, but Drosera needs to show whatever we have at the time. Once
        the main resource is finished, update the file source and reload the file.

        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument pause]):
        (-[DebuggerDocument webView:didLoadMainResourceForDataSource:]):
        (-[DebuggerDocument webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[DebuggerDocument webView:failedToParseSource:baseLineNumber:fromURL:withError:forWebFrame:]):
        * Drosera/debugger.css:
        * Drosera/debugger.js:

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=9570
        Teach prepare-ChangeLog to operate on a list of files or directories

        * Scripts/prepare-ChangeLog: Accept a list of files and/or directories when running.
        * Scripts/svn-create-patch: Code refactoring.

2006-06-24  James G. Speth  <speth@end.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8843
          add a way to build Objective-C test cases in HTML

        Tests running in DumpRenderTree can choose to relax some restrictions of the JavaScript/Objective-C bridge
        allowing more extensive testing of the Obj-C API.  (and by more extensive, I mean this lets scripts do
        pretty much whatever they want, including acting as delegates, generating events, instantiating obj-c
        objects, etc... )

        * DumpRenderTree/ObjCPlugin.h:
        * DumpRenderTree/ObjCPlugin.m: this ability is only exposed to scripts running in DumpRenderTree
        (+[ObjCPlugin isSelectorExcludedFromWebScript:]):
        (+[ObjCPlugin webScriptNameForSelector:]):
        (-[ObjCPlugin removeBridgeRestrictions:]): scripts call this to open up obj-c for extensive testing
        (+[NSObject setAllowsScriptsFullAccess:]): makes NSObject allow all selectors to be invoked from script
        (+[NSObject allowsScriptsFullAccess]):
        (+[NSObject isSelectorExcludedFromWebScript:]): when full access is enabled, no selector is excluded
        (+[NSObject webScriptNameForSelector:]): always return nil for the default selector mutation
        (-[JSObjC classNameOfObject:isSelectorExcludedFromWebScript:]):
        (+[JSObjC webScriptNameForSelector:]):
        (-[JSObjC invokeDefaultMethodWithArguments:]): shortcut for accessing classes
        (-[JSObjC lookUpClass:]): allow scripts to retrieve obj-c classes by name
        (-[JSObjC log:]): access to NSLog function
        (-[JSObjC retainObject:]): useful obj-c functions that are otherwise hard to reach from javascript
        (-[JSObjC classOfObject:]):
        (-[JSObjC classNameOfObject:]):

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Timothy.

        * DrawTest/Info.plist: Added copyright statement.
        * Drosera/Info.plist: Ditto.
        * DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist: Ditto.
        * WebKitLauncher/Info.plist: Ditto.

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Build fix.

        - Backed out http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Backed out previous change.

2006-06-24  Bjoern Graf  <bjoern.graf@gmail.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=7802
          devenv.com not available in VC++ Express installations

        * Scripts/webkitdirs.pm: Make Windows build work with Visual C++ Express.

2006-06-24  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=9564
          A bunch of fixes to run-webkit-httpd

        - Add an -all-interfaces (-a) flag to bind to all interfaces, not just
          127.0.0.1. Useful for testing with WinIE running on another machine;
        - don't call checkFrameworks() - we do not need a built WebKit here;
        - changed tabs to spaces;
        - disable HTTP keepalive (since Apache doesn't spawn sub-processes in
          interactive mode, they were a hassle when testing with several browsers, as one
          had to wait for connection to expire);
        - remove httpd.pid when done, so that Apache doesn't complain next time.

        * Scripts/run-webkit-httpd:

2006-06-24  Jonas Witt <jonas.witt@gmail.com>

        Reviewed by ggaren, landed by ap.

        - http://bugs.webkit.org/show_bug.cgi?id=9181
          Complete DOMUIEvent Obj-C API to reflect UIEvent

        Add function to enable logging of all events of one DOM node to stdout.

        * DumpRenderTree/EventSendingController.h:
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController initialize]):
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController enableDOMUIEventLogging:]):
        (-[EventSendingController handleEvent:]):

2006-06-23  Kevin Decker         <kdecker@apple.com>

        Reviewed by Tim Hatcher.

        - Made column headers in Drosera resizable.

2006-06-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by ggaren.

        - see http://bugs.webkit.org/show_bug.cgi?id=9539
        Another case error preventing build

        * Scripts/webkitdirs.pm: Building WebKit now requires Xcode 2.3.

2006-06-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Adds a native toolbar to Drosera to be a good citizen.
        Adds a Debug menu with key-commands for Continue, Pause and Step Into.
        Fixes a dragging bug from an earlier fix to the divider code.
        Fixes some poor indenting in debugger.js.

        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument stepInto]):
        (-[DebuggerDocument pause:]):
        (-[DebuggerDocument resume:]):
        (-[DebuggerDocument stepInto:]):
        (-[DebuggerDocument windowDidLoad]):
        (-[DebuggerDocument toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:]):
        (-[DebuggerDocument toolbarDefaultItemIdentifiers:]):
        (-[DebuggerDocument toolbarAllowedItemIdentifiers:]):
        (-[DebuggerDocument validateUserInterfaceItem:]):
        * Drosera/English.lproj/MainMenu.nib/classes.nib:
        * Drosera/English.lproj/MainMenu.nib/info.nib:
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib:
        * Drosera/debugger.css:
        * Drosera/debugger.html:
        * Drosera/debugger.js:
        * Drosera/viewer.html:

2006-06-22  Kevin Decker         <kdecker@apple.com>

        Reviewed by Anders.

        - Added pressed column header image.
        - Made column headers behave more like Xcode.

2006-06-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Kevin Decker.

        Code clean up. Adds the stackframe and makes only the body
        of the tables scrollable keeping the header visible.
        Shows the current function stack when paused or stepping.

        * Drosera/DebuggerApplication.m:
        (-[DebuggerApplication awakeFromNib]):
        (-[DebuggerApplication numberOfRowsInTableView:]):
        (-[DebuggerApplication tableView:objectValueForTableColumn:row:]):
        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument dealloc]):
        (-[DebuggerDocument currentFrame]):
        (-[DebuggerDocument currentFrameFunctionName]):
        (-[DebuggerDocument currentFunctionStack]):
        (-[DebuggerDocument log:]):
        (-[DebuggerDocument windowWillClose:]):
        (-[DebuggerDocument webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerDocument webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/debugger.css:
        * Drosera/debugger.html:
        * Drosera/debugger.js:

2006-06-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Anders.

        Teach run-webkit-httpd to properly look for webkitdirs.pm.

        * Scripts/run-webkit-httpd:

2006-06-22  Kevin Decker         <kdecker@apple.com>

        Reviewed by Tim Hatcher.

        - More progress toward Javascript Debugger.
        - Added some new images to the project.

2006-06-21  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=9516
          Would like a script to run a httpd server with the same configuration as run-webkit-tests http

        * Scripts/run-webkit-httpd: Added.

2006-06-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Builds Drosera and a launcher to include with the nightly.

        * BuildSlaveSupport/build-launcher-app:
        * BuildSlaveSupport/build-launcher-dmg:
        * Drosera/Drosera.xcodeproj/project.pbxproj:
        * Drosera/Info.plist:
        * Drosera/LauncherInfo.plist: Added.
        * Drosera/launcher.m: Added.
        (displayErrorAndQuit):
        (checkMacOSXVersion):
        (myExecve):
        (main):
        * Scripts/build-drosera
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/main.m:
        (main):

2006-06-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Adds a JavaScript debugger, called Drosera. Named after
        a genus of bug eating plants.

        * Drosera/DebuggerApplication.h: Added.
        * Drosera/DebuggerApplication.m: Added.
        (-[DebuggerApplication applicationDidFinishLaunching:]):
        (-[DebuggerApplication serverLoaded:]):
        (-[DebuggerApplication serverUnloaded:]):
        (-[DebuggerApplication awakeFromNib]):
        (-[DebuggerApplication showAttachPanel:]):
        (-[DebuggerApplication attach:]):
        (-[DebuggerApplication numberOfRowsInTableView:]):
        (-[DebuggerApplication tableView:objectValueForTableColumn:row:]):
        (-[DebuggerApplication tableView:willDisplayCell:forTableColumn:row:]):
        (-[DebuggerApplication tableViewSelectionDidChange:]):
        * Drosera/DebuggerDocument.h: Added.
        * Drosera/DebuggerDocument.m: Added.
        (+[WebScriptCallFrame isSelectorExcludedFromWebScript:]):
        (+[WebScriptCallFrame isKeyExcludedFromWebScript:]):
        (+[DebuggerDocument isSelectorExcludedFromWebScript:]):
        (+[DebuggerDocument isKeyExcludedFromWebScript:]):
        (-[DebuggerDocument initWithServerName:]):
        (-[DebuggerDocument windowWillClose:]):
        (-[DebuggerDocument dealloc]):
        (-[DebuggerDocument isPaused]):
        (-[DebuggerDocument pause]):
        (-[DebuggerDocument resume]):
        (-[DebuggerDocument step]):
        (-[DebuggerDocument windowNibName]):
        (-[DebuggerDocument windowDidLoad]):
        (-[DebuggerDocument switchToServerNamed:]):
        (-[DebuggerDocument applicationTerminating:]):
        (-[DebuggerDocument serverConnectionDidDie:]):
        (-[DebuggerDocument webView:windowScriptObjectAvailable:]):
        (-[DebuggerDocument webView:didFinishLoadForFrame:]):
        (-[DebuggerDocument webView:didParseSource:fromURL:sourceId:forWebFrame:]):
        (-[DebuggerDocument webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[DebuggerDocument webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[DebuggerDocument webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        * Drosera/Drosera.pch: Added.
        * Drosera/Drosera.xcodeproj/project.pbxproj: Added.
        * Drosera/English.lproj/Debugger.nib/classes.nib: Added.
        * Drosera/English.lproj/Debugger.nib/info.nib: Added.
        * Drosera/English.lproj/Debugger.nib/keyedobjects.nib: Added.
        * Drosera/English.lproj/MainMenu.nib/classes.nib: Added.
        * Drosera/English.lproj/MainMenu.nib/info.nib: Added.
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib: Added.
        * Drosera/Images/breakPoint.tif: Added.
        * Drosera/Images/breakPointDisabled.tif: Added.
        * Drosera/Images/continue.tif: Added.
        * Drosera/Images/finishFunction.tif: Added.
        * Drosera/Images/glossyFooterFill.tif: Added.
        * Drosera/Images/glossyHeader.png: Added.
        * Drosera/Images/gradientBackground.png: Added.
        * Drosera/Images/gutter.png: Added.
        * Drosera/Images/navLeftDisabled.png: Added.
        * Drosera/Images/navLeftNormal.png: Added.
        * Drosera/Images/navLeftPressed.png: Added.
        * Drosera/Images/navRightDisabled.png: Added.
        * Drosera/Images/navRightNormal.png: Added.
        * Drosera/Images/navRightPressed.png: Added.
        * Drosera/Images/pause.tif: Added.
        * Drosera/Images/popUpArrows.png: Added.
        * Drosera/Images/programCounter.tif: Added.
        * Drosera/Images/programCounterBreakPoint.tif: Added.
        * Drosera/Images/programCounterBreakPointDisabled.tif: Added.
        * Drosera/Images/run.tif: Added.
        * Drosera/Images/splitterBar.tif: Added.
        * Drosera/Images/splitterDimple.tif: Added.
        * Drosera/Images/step.tif: Added.
        * Drosera/Images/stepOver.tif: Added.
        * Drosera/Images/stop.tif: Added.
        * Drosera/Images/toolbarBackground.png: Added.
        * Drosera/Info.plist: Added.
        * Drosera/debugger.css: Added.
        * Drosera/debugger.html: Added.
        * Drosera/debugger.js: Added.
        * Drosera/main.m: Added.
        (main):
        * Drosera/viewer.css: Added.
        * Drosera/viewer.html: Added.

2006-06-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9485
        Teach svn-apply and svn-unapply to use full path names

        * Scripts/svn-apply: Changed to use full path names.  Cleaned up code.
        * Scripts/svn-unapply: Ditto.

2006-06-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by ggaren.

        - http://bugs.webkit.org/show_bug.cgi?id=9150
          DumpRenderTree should be able to keep URL history during runs

        Test: LayoutTests/fast/history/clicked-link-is-visited.html

        * DumpRenderTree/DumpRenderTree.m: Add keepWebHistory function to layoutTestController
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Updated for keepWebHistory.
        (-[LayoutTestController keepWebHistory]): Added.  We only set optional shared history if
        it is currently nil since keepWebHistory() might be called more than once incidentally
        for the same test.
        (dumpRenderTree): Set optional shared history in WebHistory to nil by default.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Xcode 2.3 clean up.

2006-06-11  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9395
        Make prepare-ChangeLog faster

        * Scripts/prepare-ChangeLog: Use "svn diff" instead of "svn stat" to find changed files,
        then save the diff output for reuse.  Keep a status variable if changes are made to
        LayoutTests so "svn diff LayoutTests" doesn't have to be run to check for changes when
        WebCore is updated.  Added -h|--help command-line switch and help message.  Move test
        for no changed files closer to the beginning of the program.

2006-06-10  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by ap.

        - make DumpRenderTree build

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]): Changed _updateFocusState to _updateActiveState
        (-[WaitUntilDoneDelegate webViewFocus:]): Ditto.
        (-[LayoutTestController setWindowIsKey:]): Ditto.
        (-[LayoutTestController setMainFrameIsFirstResponder:]): Ditto.

2006-06-09  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin, landed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=9350
        Use pathcmp() when sorting paths in svn-create-patch

        * Scripts/run-webkit-tests: Fixed splitpath() to use File::Basename subroutines instead of regex.
        * Scripts/svn-create-patch: Copied numericcmp(), pathcmp() and splitpath() from run-webkit-tests.
        Changed sort() functions to use pathcmp().  Added subroutine prototypes.  Added -h command-line
        switch and printUsage() subroutine.

2006-06-06  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9322
        Teach svn-create-patch to sort its output

        * Scripts/svn-create-patch: Clean up perl code.  Sort patch output alphabetically
        by text files first, then by binary files.

2006-06-04  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9299
        Teach svn-create-patch and friends to work with binary files

        * Scripts/svn-apply: Updated to use base64-encoded text for binary files when applying patches.
        * Scripts/svn-create-patch: Updated to include binary file content as base64-encoded text in patches.
        * Scripts/svn-unapply: Updated to recognize binary files when unapplying patches.

2006-06-03  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9296
        Performance improvement for svn-create-patch

        * Scripts/svn-create-patch: Undef $indexPath after all paths have been fixed for a given patch.

2006-06-03  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9290
        Teach svn-apply and svn-unapply to patch ChangeLogs cleanly

        * Scripts/svn-apply: Fixed to apply ChangeLog patches without failing.
        * Scripts/svn-unapply: Ditto.  Also simplified reversing a deletion.

2006-06-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by hyatt.

        Switch Spinneret to new hosting mechanism

        * Spinneret/Spinneret.sln:
        * Spinneret/Spinneret/Spinneret.cpp:
        (SpinneretWebHost::updateAddressBar):
        (SpinneretWebHost::QueryInterface):
        (SpinneretWebHost::AddRef):
        (SpinneretWebHost::Release):
        (resizeSubViews):
        (_tWinMain):
        (WndProc):
        (MyEditProc):
        (About):
        (loadURL):
        * Spinneret/Spinneret/Spinneret.h:
        (SpinneretWebHost::didStartProvisionalLoadForFrame):
        (SpinneretWebHost::didReceiveServerRedirectForProvisionalLoadForFrame):
        (SpinneretWebHost::didFailProvisionalLoadWithError):
        (SpinneretWebHost::didCommitLoadForFrame):
        (SpinneretWebHost::didReceiveTitle):
        (SpinneretWebHost::didReceiveIcon):
        (SpinneretWebHost::didFinishLoadForFrame):
        (SpinneretWebHost::didFailLoadWithError):
        (SpinneretWebHost::didChangeLocationWithinPageForFrame):
        (SpinneretWebHost::willPerformClientRedirectToURL):
        (SpinneretWebHost::didCancelClientRedirectForFrame):
        (SpinneretWebHost::willCloseFrame):
        (SpinneretWebHost::windowScriptObjectAvailable):
        * Spinneret/Spinneret/Spinneret.vcproj:

2006-06-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by darin.

        Updated build script

        * Scripts/build-webkit:

2006-06-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.m:
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController clearBackForwardList]):
        Add clearBackForwardList function to layoutTestController

2006-06-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=8996
        slow-utf8-text layout test case failing (no longer deterministic?)

        * DumpRenderTree/DumpRenderTree.m:
        (dump):
        Dump as text when the response MIME type is text/plain

2006-05-26  Steve Falkenburg  <sfalken@apple.com>

        Build fixes/tweaks

        * Spinneret/Spinneret.sln:
        * Spinneret/Spinneret/Spinneret.vcproj:

2006-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        Added 'GCController' to DRT to support garbage collection layout tests.

        GCController.collect() and GCController.collectOnAlternateThread() do
        what you would expect. The latter takes a boolean argument sepcifying
        whether to wait for garbage collection to finish before continuing to
        execute script.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/GCController.h: Added.
        * DumpRenderTree/GCController.mm: Added.
        (+[GCController isSelectorExcludedFromWebScript:]):
        (+[GCController webScriptNameForSelector:]):
        (-[GCController collect]):
        (-[GCController collectOnAlternateThread:]):

2006-05-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Newer Xcode removed some obsolete cruft

        * DumpRenderTree/TextInputController.m:
        (-[TextInputController textInput]):
        added (id) cast to make newer compiler happy

2006-05-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by adele.

        Fix build.

        * Spinneret/Spinneret.sln:

2006-05-18  Darin Adler  <darin@apple.com>

        - try to fix no-SVG, no-XPATH build, again

        * Scripts/build-webkit: Use FEATURE_DEFINES= instead of FEATURE_DEFINES=''.

2006-05-18  Darin Adler  <darin@apple.com>

        - try to fix no-SVG, no-XPATH build

        * Scripts/build-webkit: Pass FEATURE_DEFINES rather than GCC_PREPROCESSOR_DEFINITIONS,
        since the former is what's used in the WebCore project now.

2006-05-17  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Some more future renames.

2006-05-16  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        * Scripts/do-webcore-rename: Added RenderTextField => RenderTextControl and
        HTMLTextFieldInnerElement => HTMLTextControlInnerElement to list for future renames.

2006-05-15  Alexey Proskuryakov  <ap@nypop.com>

        * Scripts/install-unix-extras: Changed to be executable and removed
        text in the file generated by "svn diff".
        * Scripts/regenerate-makefiles: Ditto.

2006-05-13  Kevin M. Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin, landed by ap.

        - http://bugs.webkit.org/show_bug.cgi?id=8528
          Bakefiles (and generated Makefiles) for wx and gdk ports

        * Scripts/install-unix-extras: Added.
        * Scripts/regenerate-makefiles: Added.

2006-05-10  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Fix registry usage from perl script.  Turns out libwin32's
        SetRegValueEx, even for REG_DWORD, always takes its value as a string!

        * Scripts/install-win-extras:

2006-05-09  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build.
        Add load ended callback.

        Reviewed by kevin.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj: Fix include paths
        * Scripts/build-webkit: Build WebKitWin instead of WebCore/JavaScriptCore (WebKitWin builds those indirectly).
        * Spinneret/Spinneret/Spinneret.cpp:
        (SpinneretWebHost::loadEnd): Add callback for loadEnd() to determine success/failure of page load.
        (_tWinMain): Load built-in test content here instead of in lower-level code.
        * Spinneret/Spinneret/Spinneret.h: Add loadEnd() callback.

2006-05-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        * Scripts/extract-localizable-strings: Update for correct names of log macros.

2006-05-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        * Scripts/check-dom-results:
        Add XPath to the list of results.

2006-05-08  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Add another rename.

2006-05-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by eric.

        Spinneret now links against the new separate lib.

        * Spinneret/Spinneret.sln:
        * Spinneret/Spinneret/Spinneret.cpp:
        (SpinneretWebHost::updateLocationBar):
        (_tWinMain):
        * Spinneret/Spinneret/Spinneret.h:
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp: Removed.
        * Spinneret/Spinneret/WebFrame.h: Removed.
        * Spinneret/Spinneret/WebView.cpp: Removed.
        * Spinneret/Spinneret/WebView.h: Removed.

2006-04-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by kdecker

        Modify error reporting registry keys to disable Dr. Watson.
        This allows Javascript test cases to complete without blocking UI.

        * Scripts/install-win-extras:
         - Use Perl Win32 registry functions to disable blocking UI


2006-04-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by eric.

        Turned off C++ exceptions, fixed memory leaks

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:
        * Spinneret/Spinneret.sln:
        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::WebFramePrivate::~WebFramePrivate):
        (WebKit::WebFrame::WebFrame):
        (WebKit::WebFrame::~WebFrame):
        (WebKit::WebFrame::impl):
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        * Spinneret/Spinneret/stdafx.h:

2006-04-28  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8633
          DumpRenderTree should reset the URL cache

        * DumpRenderTree/DumpRenderTree.m:
        (main): Call [[NSURLCache sharedURLCache] removeAllCachedResponses].

2006-04-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        * Scripts/do-webcore-rename: rename KCanvasContainer too
        * Scripts/run-webkit-tests: output total time

2006-04-26  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt.  Landed by eseidel.

        - http://bugs.webkit.org/show_bug.cgi?id=8549
          Enable detection of excessive repainting with DumpRenderTree

        * DumpRenderTree/DumpRenderTree.m:
        (-[LayoutTestController display]):

2006-04-23  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=6905
          DumpRenderTree needs a way to force painting (to allow invalidation tests)

        * DumpRenderTree/DumpRenderTree.m:
        (dump): If display() has been called during the test, grab the pixels from
        the view, after letting it repaint invalidated rects.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController display]): Added. Calls -display on the view
        and changes the subsequent behavior of dump().
        (dumpRenderTree):

2006-04-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=8532
          Update iExploder to 1.3.2

        Test case numbers are not compatible with iExploder 1.2.

        * Scripts/run-iexploder-tests: Print the numbers of the last five tests that were accessed.

        * iExploder/CHANGELOG.txt: Added.
        * iExploder/LICENSE.txt: Changed to a standard zlib/png license.
        * iExploder/README.txt: Added some performance hints.

        * iExploder/htdocs/config.rb: Added.
        * iExploder/htdocs/cssproperties.in:
        * iExploder/htdocs/cssvalues.in:
        * iExploder/htdocs/htmlattrs.in:
        * iExploder/htdocs/htmltags.in:
        * iExploder/htdocs/iexploder.cgi:
         - Updated to support the latest HTML & CSS tags, properties, and values from both
           the WebKit and Mozilla CVS tree
         - cssproperties.in cleanup
         - Modularized the code a little bit.
         - Fix subtest bug that was causing last 5 tags to be missed
         - new subtest algorithm to deal better with larger tag counts
         - default HTML_MAX_TAGS increased from 32 to 96

        * iExploder/htdocs/index.html: Updated version to 1.3.2.
        * iExploder/htdocs/webserver.rb: Added. New standalone webserver, can be used as an
        alternative to our run-iexploder-tests.
        * iExploder/tools/showtest.rb: Added. Similar to run-iexploder-tests --get.
        * iExploder/htdocs/iexploder.rb: Added. Used by webserver.rb.
        * iExploder/tools/osx_last_crash.rb: Find logs modified in the last two days.

2006-04-22  Alexey Proskuryakov  <ap@nypop.com>

        - commit Scripts/run-mangleme-tests (missed it the previous time).

2006-04-18  Darin Adler  <darin@apple.com>

        - attempt to fix Windows buildbot

        * Scripts/install-win-extras: Temporarily changed URLs to fr.rpmfind.net.
        We need a better long-term solution for this.

2006-04-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8444
          Integrate mangleme test script.

        Works in a similar way to run-iexploder-tests.

        * Scripts/run-mangleme-tests: Added.
        * mangleme: Added.
        * mangleme/Makefile: Added.
        * mangleme/README: Added.
        * mangleme/mangle.cgi.c: Added.
        * mangleme/remangle.cgi.c: Added.
        * mangleme/tags.h: Added.

2006-04-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8443
          An easier way to save iExploder tests.

        * Scripts/run-iexploder-tests: Added a --get option to save a test into a file.

2006-04-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=8421
          Integrate iExploder test script.

        This script generates artificially mangled HTML documents, to test that the browser
        doesn't crash when handling ill-formed code.

        How to use:
         run-iexploder-tests             Open an interactive test page in Safari+ToT.
         run-iexploder-tests nnnnn       Open test #nnnnn.

        Command line options:
         --guard-malloc (-g)              Use Guard Malloc.
         --port=nnnn                      Run Apache on port nnnn (default is 8000).

        To save a crashing test, you can use curl while the crash reporter dialog is on the screen
        (thus, Apache is still running), e.g.:
         curl -o iexploder293.html "http://127.0.0.1:8000/iexploder.cgi?lookup=1&test=293"

        Additionally, there are some useful scripts in WebKitTools/iExploder/tools directory.

        * Scripts/run-iexploder-tests: Added.
        * iExploder: Added.
        * iExploder/LICENSE.txt: Added.
        * iExploder/README.txt: Added.
        * iExploder/htdocs: Added.
        * iExploder/htdocs/cssproperties.in: Added.
        * iExploder/htdocs/cssvalues.in: Added.
        * iExploder/htdocs/htmlattrs.in: Added.
        * iExploder/htdocs/htmltags.in: Added.
        * iExploder/htdocs/htmlvalues.in: Added.
        * iExploder/htdocs/iexploder.cgi: Added.
        * iExploder/htdocs/index.html: Added.
        * iExploder/tools: Added.
        * iExploder/tools/lasthit.rb: Added.
        * iExploder/tools/osx_last_crash.rb: Added.

2006-04-16  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8412
          Restore color profile after a crash

        * DumpRenderTree/DumpRenderTree.m:
        (crashHandler): Added a handler for signals that are raised on a crash. Keeping separate
        from the existing handler for manual interruption (SIGINT/SIGHUP/SIGTERM), because
        I'm trying to find a way to prevent the Crash Reporter dialog from appearing on crash,
        and this code may change significantly.

        (main): Install crashHandler.

        (setDefaultColorProfileToRGB): Properly convert CFStringRef to a char buffer
        (CFStringGetCStringPtr should NEVER EVER be used!).

2006-04-15  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        * Scripts/install-win-extras: Try to fix the Windows build by fixing the URLs here.
        Seems xmlsoft.org's HTTP no longer has what we need.

2006-04-13  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Rubber-stamped by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8348
          upload-disk-image stage on buildslaves fail with "No space left on device"

        * BuildSlaveSupport/build-launcher-dmg:  Use the -srcfolder option to
          'hdiutil create'.   This creates the initial disk image based on the size of
          the source folder, and copies the contents to the new disk image.  The file
          extension on the temporary uncompressed disk image has also been altered from
          ".uncompressed" to ".uncompressed.dmg" as hdiutil on 10.4.6 Intel fails when
          the extension is not ".dmg".

2006-04-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by Tim H.

        * Scripts/update-webkit: Make this return non-zero when svn fails.

2006-04-10  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8157
          Make HTTP tests using Perl use .pl extension

        * Scripts/run-webkit-tests: Added support for running .pl and .php tests,
          removed support for .text. Reduced the number of places that explicitly list supported
          extensions. Some of the changes come from bug 8121, the patch for which got landed only
          partially.

2006-04-06  Darin Adler  <darin@apple.com>

        Changes requested by Mark Rowe.

        * BuildSlaveSupport/build-launcher-app: Set executable bit, removed property change
        trash at the end of the file.
        * BuildSlaveSupport/build-launcher-dmg: Ditto.

        * WebKitLauncher/main.m: Removed trash at end of file.

        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj: Let Xcode update comments
        to make name match.

2006-04-06  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin, landed by Maciej.

        * BuildSlaveSupport/build-launcher-app: Added.  Builds WebKit.app from WebKitLauncher
          and bundles the WebKit frameworks inside it.
        * BuildSlaveSupport/build-launcher-dmg: Added.  Builds, and optionally uploads, a disk image
          containing WebKit.app.
        * BuildSlaveSupport/run-performance-tests:  Use currentSVNRevision.
        * Scripts/webkitdirs.pm:  Add currentSVNRevision to retrieve the revision
          number of the SVN working copy.
        * WebKitLauncher: Added.
        * WebKitLauncher/Info.plist: Added.
        * WebKitLauncher/WebKitLauncher.xcodeproj: Added.
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj: Added.
        * WebKitLauncher/WebKitNightlyEnabler.m: Added.  This makes
          up the WebKitNightlyEnabler dylib which is loaded into Safari's address space
          to cause LaunchServices to treat Safari.app as WebKit.app when it is run from
          the nightly launcher.
        * WebKitLauncher/main.m: Added.  The WebKit.app launcher.
          It sets up the environment to have Safari use the bundled frameworks
          and load the WebKitNightlyEnabler dylib before exec'ing Safari
        * WebKitLauncher/start.html: Added.
        * WebKitLauncher/webkit.icns: Added.

2006-04-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Scripts/check-for-global-initializers: Remove StringImpl from the list of files that
        are allowed to have global initializers.

2006-04-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by OMG BETH

        * Scripts/run-testkjs:
        - pipe STDERR to /dev/null by default; new --verbose option overrides
        this behavior
        - set DYLD_FRAMEWORK_PATH to the webkit-configured path
        - output run command in a format that can be copied and pasted into the
        terminal to run manually

2006-04-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <http://bugs.webkit.org/show_bug.cgi?id=7567>
        A drag and drop in DumpRenderTree copies the source, instead of cutting it

        Tell the source that the drag is over after the drag is performed, not before.

        * DumpRenderTree/EventSendingController.m:
        (-[EventSendingController mouseUp]):

2006-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        * DumpRenderTree/EventSendingController.m: (-[EventSendingController keyDown:withModifiers:]):
        Fixed keyDown function so that it will work if you don't pass an array of modifiers or if
        elements in that array are not strings.

2006-03-31  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - added a "--reset-results" option to run-webkit-tests so you can reset
          the results without first deleting expected results
        - <rdar://problem/4185878> add scroll position to dumpRenderTree

        * Scripts/run-webkit-tests: Rearranged the code a bit to make the sequence
        more logical. Moved all the subroutines to the end of the file. Added a
        "--force" option.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Added a new --dump-all-pixels option, used when forcing run-webkit-tests
        to generate new output for all tests it runs.
        (dump): Dump the scroll position if it's non-zero. Always dump the image when
        the --dump-all-pixels option is passed. Also tightened up the image dumping
        code and replaced the incorrect use of +[NSGraphicsContext saveGraphicsState]
        with code to save and restore the context.

        * DumpRenderTree/DumpRenderTree.h: Tweaked includes a bit and added (void).
        * DumpRenderTree/EventSendingController.m: Added now-needed include.

2006-03-30  Tim Omernick  <timo@apple.com>

        * DumpRenderTree/ObjCPlugin.h:
        Fixed copyright.
        * DumpRenderTree/ObjCPlugin.m: ditto
        * DumpRenderTree/ObjCPluginFunction.h: ditto
        * DumpRenderTree/ObjCPluginFunction.m: ditto

2006-03-30  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        Add "objCPlugin", "objCPluginFunction" properties to the window.  objCPlugin simulates
        an Objective C object exposed to JS; objCPluginFunction simulates an Objective C method
        exposed to JS as a callable object.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Added ObjCPlugin.[hm], ObjCPluginFunction.[hm].

        * DumpRenderTree/ObjCPlugin.h: Added.
        * DumpRenderTree/ObjCPlugin.m: Added.
        * DumpRenderTree/ObjCPluginFunction.h: Added.
        * DumpRenderTree/ObjCPluginFunction.m: Added.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        Added a new method, "removeDefaultMethod", which removes the default method from the
        plugin object's class.  The effect is that the plugin object is mutated from a callable
        function to a simple object.
        (pluginInvoke):
        Handle "removeDefaultMethod".
        (pluginInvokeDefault):
        Made the default method actually do something (return 1).

2006-03-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Remove WebFrame::viewImpl(), setMainFrame on page.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebViewWndProc):

2006-03-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix html editing input & basic form submission.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::submitForm):
        (WebKit::WebFrame::loadURL):
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::keyPress):
        (WebKit::WebViewWndProc):

2006-03-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/4402375>
        REGRESSION (417.8-TOT): selectionRect sometimes includes adjacent images

        Added an option to draw the selectionRect.

        * DumpRenderTree/DumpRenderTree.m:
        (dump):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (-[LayoutTestController dumpSelectionRect]):
        (dumpRenderTree):

2006-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - make the global initializer check work on Xcode 2.1 (although it's better on 2.2)

        * Scripts/check-for-global-initializers: Use NATIVE_ARCH if there is no CURRENT_ARCH.

2006-03-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/check-for-global-initializers: remove svg exceptions.

2006-03-28  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Exit gracefully if $ENV{'CURRENT_ARCH'} is undefined. Rolling out my previous change.

        * Scripts/check-for-global-initializers:

2006-03-28  Timothy Hatcher  <timothy@apple.com>

        Build fix. Turn off uninitialized warnings for the first block of code.

        * Scripts/check-for-global-initializers:

2006-03-28  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        * Scripts/check-for-global-initializers: Added.

2006-03-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by darin.  Landed by eseidel.

        - http://bugs.webkit.org/show_bug.cgi?id=7947
          Add repaint testing support to run-webkit-tests

        * DumpRenderTree/DumpRenderTree.m:
        (main): Added --repaint and --horizontal-sweep options.
        (dump): Repaint line-by-line or column-by-column when the appropriate option
        is selected.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Added testRepaint()
        and repaintSweepHorizontally() methods to layoutTestController.
        (-[LayoutTestController testRepaint]):
        (-[LayoutTestController repaintSweepHorizontally]):
        (dumpRenderTree):
        * Scripts/run-webkit-tests: Added --repaint and --horizontal-sweep options
        to force these settings on tests that do not ask for them.

2006-03-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Build fix.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::openURL): replace QString with DeprecatedString

2006-03-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej

        Add support for keyDown() to DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Set the preference for tabbing to links.
        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController keyDown:withModifiers:]):

2006-03-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix win32 build.

        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebView::keyPress):
        (WebKit::WebViewWndProc):

2006-03-19  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        * DumpRenderTree/DumpRenderTree.m: (main): Turn on pop-up blocking so that
        we can test it in layout tests. We don't really need tests that run with
        pop-up blocking off at the moment. If we do some day, we can add some
        API for turning it off in the layout test controller.

        * Scripts/run-webkit-tests: Since we don't use NSLanguage at all any more,
        don't ignore the leak; it should no longer show up.

2006-03-17  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric.

        * Scripts/install-win-extras:
        Fetch "Program Files" location from the environment.

2006-03-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Fix Spinneret to pass Events as const & not as pointers.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebView::keyPress):

2006-03-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Add support for basic HTML editing.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::keyPress):

2006-03-17  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by ggaren.

        Break DumpRenderTree.m up into several files to make the code more readable.

        * DumpRenderTree/DumpRenderTree.h: Added.
        * DumpRenderTree/DumpRenderTree.m:
        (doneLoading): new accessor function for "done" global.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeDraggingInfo.h: Added.
        * DumpRenderTree/DumpRenderTreeDraggingInfo.m: Added.
        * DumpRenderTree/EditingDelegate.h: Added.
        * DumpRenderTree/EditingDelegate.m: Added.
        (-[EditingDelegate webViewDidChangeSelection:]):
        * DumpRenderTree/EventSendingController.h: Added.
        * DumpRenderTree/EventSendingController.m: Added.

2006-03-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Add resize, scroll event support.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebView::keyPress):
        (WebKit::WebViewWndProc):
        * Spinneret/Spinneret/WebView.h:

2006-03-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Make build-webkit print correctly to stdout on windows.

        * Scripts/webkitdirs.pm: Fix to use devenv.com instead of devenv.exe

2006-03-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix eventSender.mouseClick() to update lastClick timestamp.

        * DumpRenderTree/DumpRenderTree.m:
        (-[EventSendingController mouseClick]):

2006-03-15  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Fix path
        that had a lowercase "i" in it so this builds on case-sensitive
        file systems.

2006-03-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric.

        Added run-testkjs and compare-timing-files scripts, to support super
        accurate JS iBench.

        * Scripts/compare-timing-files: Added.
        * Scripts/run-testkjs: Added.

2006-03-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Make the URL bar relinquish focus on page load.

        * Spinneret/Spinneret/Spinneret.cpp:
        (MyEditProc):

2006-03-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix WebView to allow KeyFocus.
        Add handling of space and shift-space for scrolling.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::scrollMessageForKey):
        (WebKit::WebViewWndProc):

2006-03-10  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Add scrolling support into Spinneret.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::paint):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::createWebView):
        (WebKit::calculateScrollDelta):
        (WebKit::scrollMessageForKey):
        (WebKit::WebViewWndProc):

2006-03-13  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix checksum generation on Intel machines.
        Also moved to CGImage APIs instead of NSBitmapImageRep, may possibly
        give a small speed boost now that it uses a shared buffer.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (dump):
        (md5HashStringForBitmap):
        * DumpRenderTree/ImageDiff.m:
        (computePercentageDifferent):

2006-03-13  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/run-webkit-tests: Fix httpd handling to work on systems that
        have it named httpd-1.3 instead.

2006-03-13  Alexey Proskuryakov  <ap@nypop.com>

        Fix proposed by Mitz Pettel, reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7718
          run-webkit-tests fast/dom/HTMLObjectElement/ hangs

        * Scripts/run-webkit-tests: Make test paths canonical, to form proper URLs
        (sequences of slashes are equivalent to a single slash in POSIX paths, but not
        in URLs).

2006-03-09  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7681
          memory leak in the plug-in tests

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
        (NPP_Destroy): Added code to release the plug-in object. This is the leak fix.
        (NPP_SetWindow): Remove unneeded code to store the window pointer.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        Moved the browser global in here since it's declared in this file's header.
        Changed the code to set up the pluginClass structure to not use function
        pointer casts. Those are dangerous because they can hide many types of mismatch.
        And indeed when I did this I discovered that many functions were missing their
        boolean return values or had parameter declarations with the wrong types.
        (pluginGetProperty): Use STRINGZ_TO_NPVARIANT macro for greater simplicity and
        clarity. Added boolean return value: return true when successful and false when not.
        (pluginSetProperty): Added boolean return value, return false since we have no
        properties we can set.
        (pluginInvoke): Added boolean return value. Return true when successful and false
        when not. Use NPVARIANT macros where appropriate. Added a missing release for the
        return value from calling the browser. Changed code to put the strings in malloc
        buffers instead of relying on GCC's extension that allows variable-sized arrays
        on the stack.
        (pluginInvokeDefault): Added boolean return value, return false since we have no
        default function to call.
        (pluginInvalidate): Added missing parameter. Removed comment.
        (pluginAllocate): Removed unneeded cast. This is C code, not C++, so you don't have
        to cast the result of malloc.
        (pluginDeallocate): Removed uneeded cast.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Removed some unneeded
        includes. Changed our PluginObject to use NPObject instead of re-declaring fields
        that match NPObject's fields. Removed unused NPWindow pointer.

2006-03-09  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/events/event-sender-mouse-click.html

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7583
          DRT hangs when doing eventSender.mouseDown on native widgets

        * DumpRenderTree/DumpRenderTree.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (-[EventSendingController mouseClick]): Simulates a click in a native
        widget by queueing a mouseUp before sending the mouseDown, so that
        the widget's mouse tracking event loop doesn't hang indefinitely.

2006-03-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - make link clicks work by handling link click requests
        from WebCore

        * Spinneret/Spinneret/Spinneret.cpp:
        (updateLocationBar):
        * Spinneret/Spinneret/Spinneret.h:
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        (WebKit::WebFrame::openURL):
        (WebKit::WebFrame::loadURL):
        * Spinneret/Spinneret/WebFrame.h:

2006-03-08  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Focus URL bar on Spinneret launch, remove border from WebView.
        Stop WebFrame from deleting the job (prevent crash).

        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::receivedAllData):
        (WebKit::WebFrame::paint):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::createWebView):

2006-03-09  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke): Added a method to test getURL.

2006-03-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - load URLs, not file paths, in Spinneret

        * Spinneret/Spinneret/Spinneret.cpp:
        (MyEditProc):
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::loadURL):
        (WebKit::WebFrame::receivedData):
        (WebKit::WebFrame::receivedAllData):
        * Spinneret/Spinneret/WebFrame.h:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::WebView):

2006-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fixed AppleScript layout test results to not be endian-dependent
          (Hyatt complained to me about this one)

        * DumpRenderTree/AppleScriptController.m: (-[AppleScriptController doJavaScript:]):
        Added specific code for dumping LongDateTime, instead of dumping the raw bytes
        (which are endian-dependent).

2006-03-07  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7655
          unwanted output while running layout tests

        * DumpRenderTree/DumpRenderTree.m:
        (checkedMalloc): Added.
        (checkedRealloc): Added.
        (makeLargeMallocFailSilently): Added.
        (main): Call makeLargeMallocFailSilently.

2006-03-06  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Add some more planned renaming.

2006-03-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::paint): force layout before painting

2006-03-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        Sent the windowNumber when sending events.
        Added leapForward so that we don't have to spend time waiting
        in layout tests that do mouse operations that require delays.

        * DumpRenderTree/DumpRenderTree.m:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController currentEventTime]):
        (-[EventSendingController leapForward:]):
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):

2006-03-05  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Fix a couple of things found while testing.
        Script now works (after landing my two pending patches).

2006-03-05  Darin Adler  <darin@apple.com>

        - check in a script to do a "big" rename in WebCore
          (can be run whenever we're ready to do it)

        * Scripts/do-webcore-rename: Added.

2006-03-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::loadFilePath): Close file when done.

2006-03-05  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7589
          Mouse moved events do not work in DumpRenderTree

        Test: fast/events/event-sender-mouse-moved.html

        * DumpRenderTree/DumpRenderTree.m:
        (-[EventSendingController mouseMoveToX:Y:]): Pass the correct windowNumber in the event.

2006-03-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Take advantage of new GraphicsContext constructor to implement double buffering to avoid tearing.
        Disable background erase to avoid tearing.
        Fix potential memory smasher from extra long urls.

        * Spinneret/Spinneret/Spinneret.cpp:
        (MyRegisterClass):
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::loadFilePath):
        (WebKit::WebFrame::paint):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::registerWebViewWithInstance):

2006-03-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Hang WebView pointer off of HWND (gets rid of global hack).
        Remove MessageBox displayed on url change.

        * Spinneret/Spinneret/Spinneret.cpp:
        (WndProc):
        (MyEditProc):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::registerWebViewWithInstance):
        (WebKit::WebView::createWebView):
        (WebKit::WebViewWndProc):

2006-03-04  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        Automatically kill httpd if it appears to be already running.

        * Scripts/run-webkit-tests:

2006-03-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        * Spinneret/Spinneret/WebFrame.cpp:
        (WebKit::WebFrame::loadFilePath): Improved local file loading.

2006-03-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        A few more fixes to make run-webkit-tests really work on win32.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (localFileTest):
        * Scripts/run-webkit-tests:

2006-03-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Make run-webkit-tests work on win32.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (localFileTest):
        (dumpRenderTreeMain):
        (dumpRenderTreeToStdOut):
        (serializeToStdOut):
        (main):
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::WebView):

2006-03-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Add WebFrame class (to hold Frame and FrameView).
        Add Location bar support to Spinneret.

        * Spinneret/Spinneret/Spinneret.cpp:
        (resizeSubViews):
        (_tWinMain):
        (WndProc):
        (MyEditProc):
        * Spinneret/Spinneret/Spinneret.vcproj:
        * Spinneret/Spinneret/WebFrame.cpp: Added.
        (WebKit::WebFrame::WebFramePrivate::WebFramePrivate):
        (WebKit::WebFrame::WebFramePrivate::~WebFramePrivate):
        (WebKit::WebFrame::WebFrame):
        (WebKit::WebFrame::loadFilePath):
        (WebKit::WebFrame::loadHTMLString):
        (WebKit::WebFrame::paint):
        (WebKit::WebFrame::impl):
        (WebKit::WebFrame::viewImpl):
        * Spinneret/Spinneret/WebFrame.h: Added.
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::WebView::WebViewPrivate::~WebViewPrivate):
        (WebKit::WebView::WebView):
        (WebKit::WebView::windowHandle):
        (WebKit::WebView::mainFrame):
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebViewWndProc):
        * Spinneret/Spinneret/WebView.h:

2006-03-02  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::registerWebViewWithInstance):
        (WebKit::WebView::WebView):
        (WebKit::WebView::mouseMoved):
        (WebKit::WebView::mouseDown):
        (WebKit::WebView::mouseUp):
        (WebKit::WebView::mouseDoubleClick):
        (WebKit::WebViewWndProc):
        * Spinneret/Spinneret/WebView.h:

2006-03-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Make spinneret take advantage of the new GraphicsContextCairo.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main): updated to match style guidelines.
        * Spinneret/Spinneret/Spinneret.cpp:
        (_tWinMain):
        * Spinneret/Spinneret/WebView.cpp:
        (WebKit::registerWebViewWithInstance):
        (WebKit::WebView::WebView):
        (WebKit::WebView::~WebView):
        (WebKit::WebView::drawRect):
        (WebKit::WndProc):
        * Spinneret/Spinneret/WebView.h:

2006-03-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        Give the events that eventSender sends a unique eventNumber

        * DumpRenderTree/DumpRenderTree.m:
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):

2006-03-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Add a stub win32 application to test WebCore drawing on windows.

        * Spinneret: Added.
        * Spinneret/Spinneret: Added.
        * Spinneret/Spinneret.sln: Added.
        * Spinneret/Spinneret/Resource.h: Added.
        * Spinneret/Spinneret/Spinneret.cpp: Added.
        (_tWinMain):
        (MyRegisterClass):
        (InitInstance):
        (WndProc):
        (About):
        * Spinneret/Spinneret/Spinneret.h: Added.
        * Spinneret/Spinneret/Spinneret.ico: Added.
        * Spinneret/Spinneret/Spinneret.rc: Added.
        * Spinneret/Spinneret/Spinneret.vcproj: Added.
        * Spinneret/Spinneret/WebView.cpp: Added.
        (WebKit::WebView::WebViewPrivate::WebViewPrivate):
        (WebKit::WebView::WebViewPrivate::~WebViewPrivate):
        (WebKit::registerWebViewWithInstance):
        (WebKit::WebView::createWebView):
        (WebKit::WebView::WebView):
        (WebKit::WebView::~WebView):
        (WebKit::WebView::drawRect):
        (WebKit::WebView::windowHandle):
        (WebKit::WndProc):
        * Spinneret/Spinneret/WebView.h: Added.
        * Spinneret/Spinneret/small.ico: Added.
        * Spinneret/Spinneret/stdafx.cpp: Added.
        * Spinneret/Spinneret/stdafx.h: Added.

2006-02-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main): add ability to dump render tree and read from a local file.

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/install-win-extras: fix dll permissions & download zlib too.

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Test new KConfig -> PlugInInfoStore change.
        http://bugs.webkit.org/show_bug.cgi?id=7498

        * DumpRenderTree/DumpRenderTree.m:
        (main): load test netscape plugin
        * Scripts/run-webkit-tests: style update

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Make DumpRenderTree link against icu.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Make DumpRenderTree link against libxml, etc.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:

2006-02-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Anders.

        Prevent rendering to the offscreen window. -[NSWindow displayIfNeeded] was
        getting called from the run loop, making the view render each test and thus slowing
        down the tests.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Set the offscreen window to not autodisplay.

2006-02-23  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - Turn http tests back on by default.
        - Wait for Apache to actually start serving requests.
        - Get user id from a built-in variable rather than an external command;
        don't pass the group.

        * Scripts/run-webkit-tests:

2006-02-23  Alexey Proskuryakov  <ap@nypop.com>

        Suggested by Mitz Pettel, reviewed by Darin Adler.

        * Scripts/run-webkit-tests: Pass User and Group directives, so that Apache
        can run CGIs even if the permissions are 700 or 600.

2006-02-23  Darin Adler  <darin@apple.com>

        Collaborating with Alexey.

        - turn off http tests by default until we figure out how to get them
          to run even when permissions on CGI files are 700 instead of 755

        * Scripts/run-webkit-tests: Set $testHTTP to 0 instead of 1 for now.

2006-02-23  Eric Seidel  <eseidel@apple.com>

        Add *.user to ignore list.

2006-02-23  Eric Seidel  <eseidel@apple.com>

        Remove binary file which shouldn't have been commited (and add to ignore list).

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.ncb: Removed.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo: Removed.

2006-02-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        * Scripts/run-webkit-tests: Put Apache log files in the right directory.

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by Tim Hatcher.

        Fix install-win-extras to not try to re-install setx if installed.

        * Scripts/install-win-extras:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        One more file possibly missing from previous commit?

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.ncb:
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Files missing from previous commit.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo:
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by justing.

        Corrected path for DumpRenderTree.intermediate files

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Fixed build-dumprendertree to exit with correct error codes.

        * Scripts/build-dumprendertree:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Update build scripts to generalize building on Win32, and allow
        building of DumpRenderTree on Win32 from build-dumprendertree.

        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp:
        (main):
        * Scripts/build-dumprendertree:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        * DumpRenderTree/DumpRenderTree.vcproj: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.ncb: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.sln: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree.suo: Added.
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.cpp: Added.
        (_tmain):
        * DumpRenderTree/DumpRenderTree.vcproj/DumpRenderTree/DumpRenderTree.vcproj: Added.
        * Scripts/build-webkit: make build-webkit cleanup after itself

2006-02-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=7409
          Some minor fixes to http tests.

        * Scripts/run-webkit-tests: Pass CustomLog and ErrorLog directives to httpd.

2006-02-21  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=6197
          Would like to use locally installed Apache for testing.

        Added two run-webkit-tests options:
          --http (--nohttp)  - whether to launch Apache (defaults to yes);
          --port - which port to listen on (defaults to 8000).

        Tests in LayoutTests/http are not run directly, and Apache is used instead.
        For example, http/tests/xmlhttprequest/post-content-type.html is loaded as
        http://127.0.0.1:8000/xmlhttprequest/post-content-type.html.

        Also added support for .shtml and .text files. Text files give an empty
        *-expected.txt, but a correct image.

        Apache only listens on the loopback interface. It writes logs to /tmp/WebKit.

        * Scripts/run-webkit-tests:

2006-02-21  Darin Adler  <darin@apple.com>

        Suggested by Mark Rowe.

        * Scripts/run-webkit-tests: Don't include the number of excluded leaks when
        reporting leak counts.

2006-02-18  Maciej Stachowiak <mjs@apple.com>

        Reviewed by Darin Adler.

        - Added install-win-extras script which installs some extra
        programs and libraries, and does Windows first-time setup.

        * Scripts/build-webkit: Add a newline between build results.
        * Scripts/install-win-extras: Added.

2006-02-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=7308
          DumpRenderTree should be able to load files via HTTP

        * DumpRenderTree/DumpRenderTree.m: (dumpRenderTree):
        Handle tests starting with "http://" as real URLs, not file system paths.

2006-02-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7357
          REGRESSION: Warnings from WebKit scripts if PBXProductDirectory is undefined

        * Scripts/webkitdirs.pm: only call chomp if PBXProductDirectory is configured.

2006-02-18  Darin Adler  <darin@apple.com>

        * Scripts/commit-log-editor: Added.

2006-02-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Make Win32 have the same default "WebKitBuild" directory behavior.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2006-02-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by Beth.

        * Scripts/build-webkit: make win32 actually report errors

2006-02-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        * Scripts/run-webkit-tests: Ignore quicktime plugin leaks

2006-02-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        * Scripts/run-webkit-tests: Ignore flash leaks

2006-02-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <http://bugs.webkit.org/show_bug.cgi?id=7148>
        Add drag and drop support to DumpRenderTree

        Intercept the drag start using the new UI delegate method, package an NSDraggingInfo,
        and send dragging updates.  Put DumpRenderTree's WebView into an offscreen window.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]):
        (-[WaitUntilDoneDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):
        (-[WaitUntilDoneDelegate webViewFocus:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setWindowIsKey:]):
        (-[LayoutTestController setMainFrameIsFirstResponder:]):
        (-[EventSendingController init]):
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (dumpRenderTree):
        (-[DumpRenderTreeWindow isKeyWindow]):
        (-[DumpRenderTreeDraggingInfo initWithImage:offset:pasteboard:source:]):
        (-[DumpRenderTreeDraggingInfo dealloc]):
        (-[DumpRenderTreeDraggingInfo draggingDestinationWindow]):
        (-[DumpRenderTreeDraggingInfo draggingSourceOperationMask]):
        (-[DumpRenderTreeDraggingInfo draggingLocation]):
        (-[DumpRenderTreeDraggingInfo draggedImageLocation]):
        (-[DumpRenderTreeDraggingInfo draggedImage]):
        (-[DumpRenderTreeDraggingInfo draggingPasteboard]):
        (-[DumpRenderTreeDraggingInfo draggingSource]):
        (-[DumpRenderTreeDraggingInfo draggingSequenceNumber]):
        (-[DumpRenderTreeDraggingInfo slideDraggedImageTo:]):
        (-[DumpRenderTreeDraggingInfo namesOfPromisedFilesDroppedAtDestination:]):
        * DumpRenderTree/TextInputController.m:
        (-[TextInputController firstRectForCharactersFrom:length:]):
        (-[TextInputController characterIndexForPointX:Y:]):

2006-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric.

        * DumpRenderTree/DumpRenderTree.m:
        (-[LayoutTestController invokeUndefinedMethodFromWebScript:withArguments:]):
        Added a dummy method for the sake of LayoutTests/plugins/
        undefined-property-crash.html. (It tests a crash due to fallback
        object use. WebCore won't create a fallback object if the method is
        not defined.)

2006-02-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        * Scripts/run-webkit-tests: added --results-directory (-o) option

2006-02-09  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by mjs.

        Renamed split-class to split-file-by-class.

        * Scripts/build-webkit: Updated copyright.
        * Scripts/split-class: Removed.
        * Scripts/split-file-by-class: Added.

2006-02-08  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by mjs.

        Adding new script for splitting multi-class files.
        Also adding supporting perl module with space removing heuristics.

        * Scripts/SpacingHeuristics.pm: Added.
        * Scripts/build-drawtest: updated copyright header
        * Scripts/split-class: Added.

2006-02-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher

        Changes to test fix for:
        <http://bugs.webkit.org/show_bug.cgi?id=3982>
        webViewDidBeginEditing, webViewDidEndEditing notification methods not called on delegate

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController setWindowHasFocus:]):
        (-[LayoutTestController setDisplaysWithFocusAttributes:]):

2006-02-07  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Timothy.

        Support automated testing of AppleScript "do JavaScript" command
        http://bugs.webkit.org/show_bug.cgi?id=7012

        * DumpRenderTree/AppleScriptController.h: Added.
        * DumpRenderTree/AppleScriptController.m: Added.
        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2006-02-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix build-webkit for use on win32 (unblocks buildbot usage).
        http://bugs.webkit.org/show_bug.cgi?id=7122

        * Scripts/build-webkit: use ifCygwin() to conditionalize builds
        * Scripts/webkitdirs.pm: add ifOSX() and ifCygwin()

2006-02-06  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by darin & mjs.

        Added new support directory for build slave scripts.
        Committing the first script, for use by the PLT's build slave.
        This script is used to kick of the PLT (Page Load Test) slave.

        * BuildSlaveSupport: Added.
        * BuildSlaveSupport/run-performance-tests: Added.

2006-02-06  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by darin.

        Adding setSourceDir for scripts stored in non-standard locations.

        * Scripts/webkitdirs.pm:

2006-02-04  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Add a compatibilty hack for people with old
        Configuration files that say Development or Deployment in them.

2006-02-04  Darin Adler  <darin@apple.com>

        * Scripts/make-js-test-wrappers: Don't create a wrapper if there's a disabled
        wrapper already in the directory.
        * Scripts/svn-apply: Handle additions and deletions properly -- I've been noticing
        these haven't been working at all.
        * Scripts/svn-unapply: Ditto.

2006-02-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Renamed configuration names to Debug, Release and Production.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * Scripts/set-webkit-configuration:
        * Scripts/webkitdirs.pm:

2006-02-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher

        Enabled spell checking for layout tests.

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2006-01-29  Darin Adler  <darin@apple.com>

        * Scripts/svn-apply: Added comments about things we should do to improve.
        * Scripts/svn-create-patch: Ditto.
        * Scripts/svn-unapply: Ditto.

2006-01-28  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.m: (dump): Dump the image if it's not
        already there, even if the checksum is correct.

2006-01-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        * Scripts/run-webkit-tests: make new tests use absolute urls

2006-01-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        make run-webkit-tests output total leaks count

        * Scripts/run-webkit-tests:

2006-01-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        run-webkit-test --leaks crashes (malloc logging runs out of memory)
        http://bugs.webkit.org/show_bug.cgi?id=6869

        * Scripts/run-webkit-tests: fix --leaks to not crash

2006-01-26  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        run-webkit-tests should produce a self-contained results directory
        http://bugs.webkit.org/show_bug.cgi?id=6864

        * Scripts/run-webkit-tests: copy failing items to results dir.

2006-01-23  Darin Adler  <darin@apple.com>

         - fix http://bugs.webkit.org/show_bug.cgi?id=3608
           need script to update localizable strings file in WebKit

        * Scripts/update-webkit-localizable-strings: Added.

2006-01-23  Darin Adler  <darin@apple.com>

        - added a couple of scripts -- more about these two soon

        * Scripts/extract-localizable-strings: Added.
        * Scripts/merge-changelog: Added.

2006-01-22  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Anders.

        Build fix.  build-webkit dies with "invalid build action: (empty string)"

        * Scripts/build-webkit:
        Use svgOptions in an array context so xcodebuild doesn't choke on an empty argument.

2006-01-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by anders.

        Fix --no-svg option to use XCode flags instead of gcc flags.

        * Scripts/build-webkit:

2006-01-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by anders.

        Update build-webkit to use -USVG_SUPPORT instead of -no-SVG target.

        * Scripts/build-webkit:

2006-01-20  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by eseidel.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=6682
        Call to checkWebCoreSVGSupport() broken in build-drawtest and run-drawtest

        * Scripts/build-drawtest: Changed bareword 'true' to 1.
        * Scripts/run-drawtest: Changed bareword 'true' to 1.

2006-01-19  Darin Adler  <darin@apple.com>

        * Scripts/report-include-statistics: Added a new script.

2006-01-19  Timothy Hatcher  <timothy@apple.com>

        * Scripts/build-webkit: include JavaScriptGlue in the build

2006-01-19  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Changed SVG check to work even if the path has
        spaces in it by using the form of open that treats each argument as a string
        rather than backtick syntax for reading the output of the nm tool.

2006-01-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - make prepare-ChangeLog way faster by using svn diff instead of svn status to
        detect if there are any new tests

        * Scripts/prepare-ChangeLog:

2006-01-12  Darin Adler  <darin@apple.com>

        - removed some of the cvs-specific scripts -- not needed for this project any more

        * Scripts/cvs-abandon: Removed.
        * Scripts/cvs-apply: Removed.
        * Scripts/cvs-create-patch: Removed.
        * Scripts/cvs-unapply: Removed.

2006-01-10  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by eseidel.  Committed by eseidel.

        - run-webkit-tests always launches Safari when tests fail
        http://bugs.webkit.org/show_bug.cgi?id=6456

        * Scripts/run-webkit-tests:
        Add a command-line flag to prevent Safari being launched to display failed
        tests.  Always exit with non-zero status when tests have failed.

2006-01-10  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by eseidel.  Committed by eseidel.

        - build-webkit should exit with non-zero status when build fails
        http://bugs.webkit.org/show_bug.cgi?id=6459

        * Scripts/build-webkit:
        Use correct bits of subprocess exit code when passing back through
        as build-webkit's exit code.

2006-01-10  Eric Seidel  <eseidel@apple.com>

        Restored corrupted nibs from TOT CVS.

        * DrawTest/English.lproj/DrawTestDocument.nib: Replaced.
        * DrawTest/English.lproj/DrawTestDocument.nib/classes.nib: Replaced.
        * DrawTest/English.lproj/DrawTestDocument.nib/info.nib: Replaced.
        * DrawTest/English.lproj/DrawTestDocument.nib/keyedobjects.nib: Replaced.
        * DrawTest/English.lproj/Inspector.nib: Replaced.
        * DrawTest/English.lproj/Inspector.nib/classes.nib: Replaced.
        * DrawTest/English.lproj/Inspector.nib/info.nib: Replaced.
        * DrawTest/English.lproj/Inspector.nib/keyedobjects.nib: Replaced.
        * DrawTest/English.lproj/MainMenu.nib: Replaced.
        * DrawTest/English.lproj/MainMenu.nib/classes.nib: Replaced.
        * DrawTest/English.lproj/MainMenu.nib/info.nib: Replaced.
        * DrawTest/English.lproj/MainMenu.nib/keyedobjects.nib: Replaced.
        * DrawTest/English.lproj/TestViewer.nib: Replaced.
        * DrawTest/English.lproj/TestViewer.nib/classes.nib: Replaced.
        * DrawTest/English.lproj/TestViewer.nib/info.nib: Replaced.
        * DrawTest/English.lproj/TestViewer.nib/keyedobjects.nib: Replaced.

2006-01-10  Nefaur Khandker  <nefaurk@gmail.com>

        Reviewed by eseidel.  Committed by eseidel.

        DrawTestView now subclasses WebView instead of DrawView.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * DrawTest/DrawTestDocument.h:
        * DrawTest/DrawTestDocument.m:
        (-[DrawTestDocument dealloc]):
        (-[DrawTestDocument readFromFile:ofType:]):
        (-[DrawTestDocument windowControllerDidLoadNib:]):
        (-[DrawTestDocument dumpSVGToConsole:]):
        (-[DrawTestDocument openSourceForSelection:]):
        (-[DrawTestDocument dataRepresentationOfType:]):
        * DrawTest/DrawTestToolbarController.h:
        * DrawTest/DrawTestToolbarController.m:
        (-[DrawTestToolbarController initWithDrawView:]):
        (-[DrawTestToolbarController clickedToolbarItem:]):
        (-[DrawTestToolbarController validateToolbarItem:]):
        * DrawTest/DrawTestView.h:
        * DrawTest/DrawTestView.m:
        (-[DrawTestView initWithFrame:]):
        (-[DrawTestView setDocument:]):
        * DrawTest/SVGTest.h:
        * DrawTest/SVGTest.m:
        (+[SVGTest sharedDrawView]):
        (-[SVGTest generateCompositeIfNecessary]):
        * DrawTest/TestController.h:
        * DrawTest/TestController.m:
        (-[TestController awakeFromNib]):
        (-[TestController setSelectedTest:]):
        (-[TestController openTestViewerForSelection:]):
        (-[TestController toggleViewersScaleRule:]):
        * DrawTest/TestViewerSplitView.m:
        (-[TestViewerSplitView drawRect:]):

2006-01-10  Anders Carlsson  <andersca@mac.com>

        Reviewed by Timothy.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Set the default language to "en", so language tests will work.

2006-01-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - script to generate HTML wrappers for JS tests
        http://bugs.webkit.org/show_bug.cgi?id=6441

        * Scripts/make-js-test-wrappers: Added.

2006-01-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        * Scripts/svn-create-patch: Fix to work when passed directory names.

2006-01-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric.

        - Added back/forward navigation support to DumpRenderTree. Hopefully we
        can start writing automated loader tests now. I have one in the works.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Construct global navigationController on entry, destroy on exit.
        Set frame to nil on exit too, to match all the other global objects.
        (Probably academic, since the process is exiting, anyway.)
        (-[WaitUntilDoneDelegate webView:didFinishLoadForFrame:]): Notify the
        navigationController, in case it wants to kick off a load.
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]): Expose
        the navigationController to scripting.

        New class, should be straightforward:

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/NavigationController.h: Added.
        * DumpRenderTree/NavigationController.m: Added.

        (+[NavigationController isSelectorExcludedFromWebScript:]):
        (+[NavigationController webScriptNameForSelector:]):
        (-[NavigationController setPendingScript:]):
        (-[NavigationController setPendingRequest:]):
        (-[NavigationController evaluateWebScript:afterBackForwardNavigation:]):
        (-[NavigationController webView:didFinishLoadForFrame:]):
        (-[NavigationController dealloc]):

2006-01-08  Timothy Hatcher  <timothy@apple.com>

        Removed this script, no longer needs with the Subversion switch.

        * checkout: Removed.

2006-01-08  Timothy Hatcher  <timothy@apple.com>

        Removes some stray tabs.

        * Scripts/update-webkit:

2005-01-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        build-webkit should pass on build arguments from command line
        http://bugs.webkit.org/show_bug.cgi?id=5854

        * Scripts/build-webkit:

2006-01-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs & xenon.

        * Scripts/update-webkit: support Internal updates as well

2006-01-06  Geoffrey Garen  <ggaren@apple.com>

        Temporarily rolling out plugin support from DumpRenderTree because it
        caused lots of layout test regressions.

        * DumpRenderTree/DumpRenderTree.m:
        (main): Remove invisible window added to support plugins.

2006-01-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6361
        Add plugin support to DumpRenderTree

        Also wrote first test plugin.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (1) Put the WebView in an invisible window, because PlugIns are
        optimized not to load if there's no parent window.
        (2) Tell WebKit to load any PlugIns in the directory from which we
        loaded. This means we can build nasty PlugIns alongside DumpRenderTree
        and they'll load automagically during layout testing, but they won't be
        added to the user's system, hosing apps like Safari.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added new
        test PlugIn to project.

        PlugIn added to project:

        * DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist: Added.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: Added.
        (getPluginClass):
        (initializeIdentifiers):
        (pluginHasProperty):
        (pluginHasMethod):
        (pluginGetProperty):
        (pluginSetProperty):
        (pluginInvoke):
        (pluginInvokeDefault):
        (pluginInvalidate):
        (pluginAllocate):
        (pluginDeallocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Added.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.c: Added.
        (NP_Initialize):
        (NP_GetEntryPoints):
        (NP_Shutdown):
        (NPP_New):
        (NPP_Destroy):
        (NPP_SetWindow):
        (NPP_NewStream):
        (NPP_DestroyStream):
        (NPP_WriteReady):
        (NPP_Write):
        (NPP_StreamAsFile):
        (NPP_Print):
        (NPP_HandleEvent):
        (NPP_URLNotify):
        (NPP_GetValue):
        (NPP_SetValue):

2006-01-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.
        Created by Eric.
        Tweaked and tested by me.

        New scripts to work with Subversion when the switch happens.
        These will replace cvs-apply, cvs-unapply, and cvs-create-patch.

        * Scripts/svn-apply: Added.
        * Scripts/svn-create-patch: Added.
        * Scripts/svn-unapply: Added.

2005-12-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Move WebView width/height logic into DumpRenderTree to support
        running the W3C SVG 1.1 tests along side other tests.  The W3C
        SVG 1.1 tests require a 480x360 view.

        * DumpRenderTree/DumpRenderTree.m:
        (main): don't accept width/height
        (dump): override width/height for SVG/W3C
        * Scripts/run-webkit-tests: don't pass width/height

2005-12-30  Eric Seidel  <eseidel@apple.com>

        No review, only removing dead code.

        * DumpKCanvasTree/DumpKCanvasTree.m: Removed.
        * DumpKCanvasTree/DumpKCanvasTree.xcodeproj/project.pbxproj: Removed.

2005-12-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        DumpRenderTree should set a consistent color profile while running
        http://bugs.webkit.org/show_bug.cgi?id=6155

        Creates consistent colormatched renderings on every test machine
        using the only way possible with Tiger APIs: by setting the
        system color profile on the test machine for the duration of the
        tests.  This will (unfortunately) cause colors to change while
        running DumpRenderTree.  This can also cause "permanent" color
        changes to occur if DRT is to crash (SIGSEGV, etc.) while running.
        This is far from ideal, but it's be best way we've found to deal
        with the issue for now.

        * DumpRenderTree/DumpRenderTree.m:
        (restoreColorSpace):
        (setDefaultColorProfileToRGB):
        (main):

2005-12-20  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5846
          cvs-create-patch --include produces incorrect paths

        * Scripts/cvs-create-patch: Handle newly-added directories using chdir.

2005-12-19  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: stop /etc/catalog warnings

2005-12-19  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4990
          WebKit needs to use a local pasteboard during testing

        * DumpRenderTree/DumpRenderTree.m:
        (main): Call poseAs to substitute our NSPasteboard class for the default one.
        Create a local pasteboard (really a global one with a unique name) and release
        it when exiting from the function so we don't leave it in the pasteboard server.
        (dumpRenderTree): Added an autorelease pool around one small bit of code that
        ddn't have one. Fixed a leak in an unlikely error case.
        (+[DumpRenderTreePasteboard generalPasteboard]): Override the default version
        of this method to return our local pasteboard.

2005-12-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by Tim Hatcher.

        * Scripts/build-webkit: --svg is now default!

2005-12-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Don't run svg test automatically if +SVG is built (yet).

        * Scripts/run-webkit-tests:

2005-12-15  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Don't run tests in directories named "svg" if SVG
        support is not compiled in. Report the 10 slowest tests if "--slowest" is
        passed on the command line.

2005-12-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        Remove special-case handling for nib files. This avoided trouble with cvs diff
        when we were using wrappers for nib files. Now that we aren't using wrappers,
        there's no reason to avoid adding the modified nib files to the file list that
        gets diffed.

2005-12-05  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Script updates for SVG files move (remove references to SVGSupport)

        * Scripts/build-webkit: remove SVGSupport
        * Scripts/run-webkit-tests: Resources -> resources for --svg
        * Scripts/update-webkit: remove SVGSupport

2005-12-05  Eric Seidel  <eseidel@apple.com>

        Reviewed mjs.

        * checkout: remove --svg support, SVG is now checked out by default

2005-11-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Update scripts to run SVG tests automatically (w/o --svg) if
        WebCore is built with SVG support.

        * Scripts/build-drawtest: SVG support required
        * Scripts/build-dumpkcanvastree: Removed.
        * Scripts/run-drawtest: SVG support required to run
        * Scripts/run-webkit-tests: pass *.svg files if WebCore has support
        * Scripts/webkitdirs.pm: changed CheckWebCoreSVGSupport

2005-11-28  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler. Committed by Maciej.

        - fixed "DumpRenderTree should test for Ahem before doing anything else"
        (http://bugs.webkit.org/show_bug.cgi?id=5838)

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2005-11-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by sullivan and GGAREN.

        Minor additions to make error messages more clear from cvs-apply.

        * Scripts/cvs-apply: make errors more clear

2005-11-27  Oliver Hunt  <ojh16@student.canterbury.ac.nz>

        Reviewed and committed by Maciej.

        - fixed cvs-create-patch --include produces incorrect paths
        (http://bugs.webkit.org/show_bug.cgi?id=5846)

        * Scripts/cvs-create-patch: produce proper paths for new files.

2005-11-21  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Some simple fixes to the build/test scripts now that SVG uses the
        WebCore DOM.  JSC+SVG is no longer needed, nor is RTTI support
        or symlinks for KDOM.

        * Scripts/build-webkit: No longer builds JavaScriptCore+SVG
        * Scripts/prepare-ChangeLog: handles missing LayoutTests directory
        * Scripts/run-webkit-tests: now runs SVG tests using DRT
        * Scripts/webkitdirs.pm: use SVG symbols instead of RTTI
        * checkout: no longer symlink kdom

2005-11-10  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        * Scripts/build-webkit: Pass through options to xcodebuild

2005-11-07  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Fix case where the patch has files at the top level.

2005-11-03  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        * Scripts/run-safari:
        changed message to say "Starting Safari" instead of odd "Start Safari"
        * Scripts/run-webkit-tests:
        changed the way we pass the file parameter to use -NSOpen rather than relying on
        unlabeled arguments being treated as files. This was failing on some machines that
        (mysteriously) had NSTreatUnknownArgumentsAsOpen set to NO in com.apple.Safari.plist.

2005-10-27  Geoffrey Garen  <ggaren@apple.com>

        Patch by Alexey Proskuryakov.

        Reviewed by Maciej.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=5303
        TextInputController should support attributed strings

        * DumpRenderTree/TextInputController.m:
        (+[NSMutableAttributedString isSelectorExcludedFromWebScript:]):
        (+[NSMutableAttributedString webScriptNameForSelector:]):
        (-[NSMutableAttributedString getLength]):
        (-[NSMutableAttributedString attributeNamesAtIndex:]):
        (-[NSMutableAttributedString valueOfAttribute:atIndex:]):
        (-[NSMutableAttributedString addAttribute:value:]):
        (-[NSMutableAttributedString addAttribute:value:from:length:]):
        (-[NSMutableAttributedString addColorAttribute:red:green:blue:alpha:]):
        (-[NSMutableAttributedString addColorAttribute:red:green:blue:alpha:from:length:]):
        (-[NSMutableAttributedString addFontAttribute:fontName:size:]):
        (-[NSMutableAttributedString addFontAttribute:fontName:size:from:length:]):
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController insertText:]):
        (-[TextInputController attributedSubstringFrom:length:]):
        (-[TextInputController attributedStringWithString:]):

2005-10-11  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Checks for leaks in ImageDiff too.

        * Scripts/run-webkit-tests:

2005-10-09  Darin Adler  <darin@apple.com>

        * Scripts/check-dom-results: Dump ".xhtml" for tests in the xhtml directory.
        * Scripts/cvs-apply: Handle added/deleted files in the current directory.
        * Scripts/cvs-unapply: Ditto.
        * Scripts/run-webkit-tests: Add a few more false-positive leaks.

2005-10-08  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed, rearranged and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4707
          Need a way to automatically test for regressions in NSTextInput implementation

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        Create a text input controller and put it in a property of the window object.

        * DumpRenderTree/TextInputController.h: Added.
        * DumpRenderTree/TextInputController.m: Added.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added files.

2005-10-06  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Fixed merge option to work better when not all directories
        are controlled by cvs, or when changes cross multiple repositories.
        * Scripts/update-webkit: Don't print messages if the "quiet" flag is set.

2005-10-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Make mouseDown and mouseUp force layout before acting.
        This is used by a new test case for 4233558.

        * DumpRenderTree/DumpRenderTree.m:
        (-[EventSendingController mouseDown]): force layout
        (-[EventSendingController mouseUp]): force layout

2005-09-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by xenon.

        Updated all the scripts for the move:
        WebCore/layout-tests -> LayoutTests

        * Scripts/check-dom-results:
        * Scripts/prepare-ChangeLog:
        * Scripts/run-webkit-tests:
        * Scripts/update-webkit: added --no-tests
        * checkout: added --no-tests

2005-09-28  Darin Adler  <darin@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=5144
          pixel test should run even if render trees differ

        * Scripts/run-webkit-tests: Don't check if the text dump matches.

2005-09-27  Eric Seidel  <eseidel@apple.com>

        No review needed, SVG build fix only.

        * DumpKCanvasTree/DumpKCanvasTree.m:
        Missed one in my previous checkin.
        http://bugs.webkit.org/show_bug.cgi?id=5141

2005-09-26  Eric Seidel  <eseidel@apple.com>

        No review needed, SVG build fix only.

        * DrawTest/DrawTestDocument.m:
        * DrawTest/DrawTestToolbarController.m:
        * DrawTest/DrawTestView.h:
        * DrawTest/DrawTestView.m:
        * DrawTest/SVGTest.m:
        * DrawTest/TestController.m:
        Updated for WebCore+SVG -> WebCore rename.
        http://bugs.webkit.org/show_bug.cgi?id=5141

2005-09-26  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        * DumpRenderTree/DumpRenderTree.m:
        (dump): updated error message
        * Scripts/check-dom-results: now includes xhtml
        Tool updates for xhtml.
        http://bugs.webkit.org/show_bug.cgi?id=4907

2005-09-22  Duncan Wilcox  <duncan@mclink.it>

        Reviewed by Maciej.
        Landed by Darin Adler.

        - patch for <http://bugs.webkit.org/show_bug.cgi?id=4963>
        "Would like to simulate human interaction with webview"

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController init]):
        (-[EventSendingController mouseDown]):
        (-[EventSendingController mouseUp]):
        (-[EventSendingController mouseMoveToX:Y:]):
        Add eventSender javascript object, that sends fake mouse events to the webview.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        link with Carbon.framework

2005-09-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Update tools for WebCore+SVG -> WebCore rename.
        Also fold several SVG specific tools into their original
        WebCore counterparts.
        http://bugs.webkit.org/show_bug.cgi?id=5003

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * DumpKCanvasTree/DumpKCanvasTree.xcodeproj/project.pbxproj:
        * Scripts/build-drawtest:
        * Scripts/build-dumpkcanvastree:
        * Scripts/build-webcore-svg: Removed.
        * Scripts/build-webkit: added --svg option
        * Scripts/run-drawtest:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm: various additions.
        * checkout: added --svg option
        * checkout-svg: Removed.

2005-09-19  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: added --guard-malloc option
        http://bugs.webkit.org/show_bug.cgi?id=4613

2005-09-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by geoff

        Removed a script that is only used by apple internal developers

        * Scripts/update-webkitsysteminterface: Removed.

2005-09-16  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        * Scripts/prepare-ChangeLog: Allow semicolons for protocols too.

2005-09-14  Darin Adler  <darin@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4291
          dumpAsText doesn't work with XHTML documents

        * DumpRenderTree/DumpRenderTree.m: (dump): Dump the innerText of the document element
        rather than of the body element. This works with typical XHTML documents. We can probably
        do something even better in the long run, but this fixes the immediate issue.

        - separate tweak

        * Scripts/run-webkit-tests: Show the results in the current built Safari by using
        run-safari instead of just using "open", which often runs another copy of Safari instead.

2005-09-11  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed, tweaked, and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4286
          .Mac prefpane crashes when Safari using CVS WebKit is running

        * Scripts/run-safari: Set WEBKIT_UNSET_DYLD_FRAMEWORK_PATH.
        * Scripts/run-webkit-app: Ditto.

2005-09-11  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Oops. Use spaces, not tabs.

2005-09-11  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        * Scripts/run-webkit-tests: Sort tests with a new "pathcmp" function that's better in
        two ways: 1) puts all files in a directory before any files in a subdirectory, and
        2) sort file names with numeric digits in them in a logical way, so test-33 will come
        before test-3.

2005-09-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        * Scripts/update-webkitsysteminterface: Added.
        Builds webkitsysteminterface and moves the built product and header into WebKitLibraries

2005-09-01  John Sullivan  <sullivan@apple.com>

        * Scripts/run-webkit-tests:
        Excluded a known system leak to reduce noise; added comments about which leaks
        are being excluded.

2005-09-01  Tim Omernick  <tomernick@apple.com>

        Change made by Darin, reviewed by John and myself.

        - Allow semicolons at the end of method declarations (this is for method implementations; the semicolon is required for interface declarations).

        * Scripts/prepare-ChangeLog:

2005-08-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - set color variant and font settings to a consistent value.
        (http://bugs.webkit.org/show_bug.cgi?id=4769)

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2005-08-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * Scripts/build-svg2png: Removed.
        * svg2png/ImageDiff.h: Removed.
        * svg2png/ImageDiff.m: Removed.
        * svg2png/svg2png.m: Removed.
        * svg2png/svg2png.xcodeproj/project.pbxproj: Removed.
        * svg2png/svg2png_Prefix.pch: Removed.
        svg2png is no longer needed.

2005-08-30  Darin Adler  <darin@apple.com>

        * Scripts/check-dom-results: Special case 100% to say something nice.
        * Scripts/cvs-apply: Added "--merge" which automatically rolls back the tree before
        applying the patch (need a better name).
        * Scripts/find-extra-includes: Added. Experimental tool to find unneeded includes.

2005-08-30  Darin Adler  <darin@apple.com>

        * Scripts/run-webkit-tests: Small formatting fix for leaks mode.

2005-08-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4723
        (some pixel tests fail when AA settings are changed)

        * DumpRenderTree/DumpRenderTree.m:
        (main): set AA settings to the default values

2005-08-29  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        * Scripts/run-webkit-tests: Added a mode where each test is run with a separate
        executable -- much slower but can help pinpoint leaks. Changed formatting of some
        messages too.

2005-08-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4720
        (webkit pixel tests don't give consistent results with changed scrollbar arrow setting)

        * DumpRenderTree/DumpRenderTree.m:
        (main): set scrollbar arrow setting to a consistent value

2005-08-27  Jussi Hagman  <juhagman@abo.fi>

        Reviewed and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4676
          output of update-webkit is too verbose

        * Scripts/update-webkit:
        Added option --quiet (-q) to decrease the amount of output.

2005-08-27  Darin Adler  <darin@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4596
          cvs-create-patch --include-unknowns should ignore hidden files

        * Scripts/cvs-create-patch: Add code to check for files starting with ".".

2005-08-25  Ben La Monica  <ben.lamonica@gmail.com>

        Reviewed, tweaked, and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4585
          update-webkit doesn't notice when you have SVGSupport and update properly

        * Scripts/update-webkit: Build SVGSupport directory if it's present.

2005-08-25  Anders Carlsson  <andersca@mac.com>

        Reviewed and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4572
          layout test machinery can't handle tests with applets that have code attributes

        * DumpRenderTree/DumpRenderTree.m: (main): Disable Java while running tests.

2005-08-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4625
          DumpRenderTree --pixel-tests crash
        - landed some other small changes I had sitting in my tree

        * DumpRenderTree/DumpRenderTree.m:
        (main): Don't bother saving and restoring the preferences. Not sure
        why this was ever done since the preferences are specific to DumpRenderTree.
        Clear delegates before releasing the WebView, because you can't count on the
        order of object deallocation.
        (dumpRenderTree): Fix code that releases a string before storing it in a
        global variable.

        * Scripts/run-webkit-tests: Use "-s" rather than a function to get the size
        of a file. Fix lots of cases that were using tabs for indenting to use spaces instead.

2005-08-23  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * Scripts/run-webkit-tests:
        Made --leaks option more readable by printing to a file.
        http://bugs.webkit.org/show_bug.cgi?id=4590

2005-08-22  Eric Seidel  <eseidel@apple.com>
        Fix by Tobias Lidskog <tobiaslidskog@mac.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: hides "expected actual diffs" links
        when they are not needed (for pixel-only failures)
        http://bugs.webkit.org/show_bug.cgi?id=4584

2005-08-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: Added the ability to display more than
        just two images as part of the image-diff "slideshow".
        Added display of "-w3c.png" baseline images for SVG.
        http://bugs.webkit.org/show_bug.cgi?id=4581

2005-08-20  Eric Seidel  <eseidel@apple.com>

        * Scripts/run-webkit-tests:
        "build" fix after committing incorrect version.

2005-08-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * DumpRenderTree/DumpRenderTree.m:
        (main): cleans up delegates
        (dumpRenderTree): closes CFString/CFURL leak
        * Scripts/run-webkit-tests:
        Adds --leaks option to run-webkit-tests
        http://bugs.webkit.org/show_bug.cgi?id=4542

2005-08-19  Ben La Monica  <ben.lamonica@gmail.com>

        Reviewed by Darin Adler.

        * Scripts/cvs-create-patch: Add an --include-unknowns option that will cause
        new files to be included in the patch even without "cvs add".

2005-08-19  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Fix to not garble patches that are mix of cvs-style and
        non-cvs-generated patches. Anders has been creating these, so it's bad that
        the script can't handle them.
        * Scripts/cvs-unapply: Ditto.

2005-08-18  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Fix version checking to work on Xcode versions with
        "." in them -- based on complaint by someone here at Apple.

2005-08-18  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * Scripts/run-webkit-tests:
        Made --svg imply --pixel-tests (pixel tests on-by-default for svg).

2005-08-17  Maciej Stachowiak  <mjs@apple.com>

        - add file that I forgot in the last checkin

        * DumpRenderTree/ImageDiff.m: Added.
        (main):
        (getImageFromStdin):
        (compareImages):
        (getDifferenceBitmap):
        (computePercentageDifferent):

2005-08-17  Maciej Stachowiak  <mjs@apple.com>

        Changes by Ben Lamonica and Eric Seidel, reviewed mostly by Eric and
        somewhat by me, and also tweaked by me a little bit.

        - better support for pixel-dumping
        - use checksums of the images so the tests are fast
        - change output format to make the tests run faster
        - don't dump pixel results for tests that dump as text

        * DumpKCanvasTree/DumpKCanvasTree.m:
        (main):
        (dumpRenderTree):
        (md5HashStringForBitmap):
        (dumpPixelTests):
        (constrainSizeToMaximum):
        (getBitmapImageRepForSVGDocument):
        * DumpKCanvasTree/DumpKCanvasTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.m:
        (main):
        (dump):
        (dumpRenderTree):
        (md5HashStringForBitmap):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * Scripts/run-webkit-tests:

2005-08-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - hacked DumpRenderTree to make the scrollbars appear and disappear properly.

        * DumpRenderTree/DumpRenderTree.m:
        (main):

2005-08-14  Oliver Hunt  <ojh16@student.canterbury.ac.nz>

        Reviewed and landed by Darin Adler.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4251
          Ideally would be able to pass arguments to apps using run-safari and run-webkit-app scripts

        * Scripts/run-safari: Pass arguments through to Safari on command line.
        * Scripts/run-webkit-app: Pass arguments through to "open" tool on command line.

2005-08-11  Eric Seidel  <eseidel@apple.com>
        Fix by Tobias Lidskog <tobiaslidskog@mac.com>

        Reviewed by eseidel.

        * DrawTest/TestController.m:
        (-[TestController imagePathForSVGPath:]):
        Fixed support for using TextViewer with the layout-tests.
        http://bugs.webkit.org/show_bug.cgi?id=4385

2005-08-11  Maciej Stachowiak  <mjs@apple.com>

        At Least Roughly Glanced At by Anders.

        - fix change with totally breaks the layout tests.

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didCommitLoadForFrame:]): Make tests unready if you start another
        load, to avoid dumping twice accidentally.

2005-08-10  Eric Seidel  <eseidel@apple.com>
        Fixed made by Mitz Pettel <opendarwin.org@mitzpettel.com>

        Reviewed by darin.

        * DumpRenderTree/DumpRenderTree.m:
        Added support for rendering to a PNG file.
        http://bugs.webkit.org/show_bug.cgi?id=3840

2005-08-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests: added --svg option
        * Scripts/run-webkit-tests-svg: Removed.
        http://bugs.webkit.org/show_bug.cgi?id=4300

2005-08-07  Eric Seidel  <eseidel@apple.com>
        Changes by Ben La Monica <ben.lamonica@gmail.com>

        Reviewed by darin.

        * svg2png/ImageDiff.h: Added.
        * svg2png/ImageDiff.m: Added.
        (getDifferenceBitmap):
        (computePercentageDifferent):
        (saveAnimatedGIFToFile):
        * svg2png/svg2png.m:
        (usage): added several new options
        (getBitmapForSVG): added NSBitmapImageRep generation
        (main): various argument changes.
        * svg2png/svg2png.xcodeproj/project.pbxproj:
        Several additions to provide image differencing functionality.
        http://bugs.webkit.org/show_bug.cgi?id=4193

2005-08-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/run-webkit-tests-svg: now uses WebCore/svg-tests
        * checkout-svg: links WebCore/svg-tests to SVGSupport/layout-tests
        Adding the first SVG layout tests:
        http://bugs.webkit.org/show_bug.cgi?id=4303

2005-08-07  Darin Adler  <darin@apple.com>

        * Scripts/cvs-create-patch: Do all the directories at once, for speed.

2005-08-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * DumpKCanvasTree/DumpKCanvasTree.m: Added.
        * DumpKCanvasTree/DumpKCanvasTree.xcodeproj/project.pbxproj: Added.
        * Scripts/build-dumpkcanvastree: Added.
        * Scripts/run-webkit-tests-svg: Added.
        Adds a DumpRenderTree-like tool for SVG which allows us to do
        text-based layout regression testing.  This (like most of the
        SVG specific stuff) is temporary and will be replaced by
        DumpRenderTree once the DOMs and RenderTrees merge.
        http://bugs.webkit.org/show_bug.cgi?id=3917

2005-08-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * DrawTest/DrawTestView.m:
        (-[DrawTestView toggleFilterSupport:]): missing negation.
        One half of fix for toggling filter support.
        http://bugs.webkit.org/show_bug.cgi?id=4252

2005-08-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * Scripts/build-drawtest:
        * Scripts/build-dumprendertree:
        * Scripts/build-svg2png:
        * Scripts/build-webcore-svg:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm: added checkRequiredSystemConfig()
        Added checkRequiredSystemConfig and made all the build-* scripts
        use it to print a pretty warning when trying to compile on an
        unsupported system (less than 10.4, Xcode 2.1).
        http://bugs.webkit.org/show_bug.cgi?id=4280

2005-08-04  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Bring this file back from
        the dead. It was removed by accident when someone was trying to work on the branch.

2005-07-31  Darin Adler  <darin@apple.com>

        - a little tools cleanup

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Moved options from target to
        project as a whole. Removed unused Default configuration.

        * Scripts/check-dom-results: Added license header, comment to explain purpose of tool.

2005-07-31  Duncan Wilcox  <duncan@mclink.it>

        Reviewed and landed by Darin Adler.

        Add logging of editing delegate calls for regression checking.

        * DumpRenderTree/DumpRenderTree.m:
        (main):
          setup editing delegate

        (-[DOMNode dumpPath]):
        (-[DOMRange dump]):
          utility for editing delegate logging

        (-[EditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldEndEditingInDOMRange:]):
        (-[EditingDelegate webView:shouldInsertNode:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]):
        (-[EditingDelegate webView:shouldDeleteDOMRange:]):
        (-[EditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[EditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[EditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        (-[EditingDelegate webViewDidBeginEditing:]):
        (-[EditingDelegate webViewDidChange:]):
        (-[EditingDelegate webViewDidEndEditing:]):
        (-[EditingDelegate webViewDidChangeTypingStyle:]):
          log corresponding editing delegate methods

        (-[EditingDelegate webViewDidChangeSelection:]):
          log selection except when clearing selection after end of test (uses existing "done" flag)

        (dumpRenderTree):
          added clearing of selection after test

2005-07-31  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        * Scripts/build-drawtest: Added.
        * Scripts/build-svg2png: Added.
        * Scripts/build-webcore-svg: Added.
        * Scripts/run-drawtest: Added.
        * Scripts/webkitdirs.pm: added checkSVGFrameworks
        Made it much easier to build WebCore+SVG.
        http://bugs.webkit.org/show_bug.cgi?id=4208

2005-07-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by vicki.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        Build fix.  Removed bad path.

2005-07-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by sullivan.

        * DrawTest/AppDelegate.h: Added.
        * DrawTest/AppDelegate.m: Added.
        * DrawTest/DrawTest.xcodeproj/project.pbxproj: Added.
        * DrawTest/DrawTestDocument.h: Added.
        * DrawTest/DrawTestDocument.m: Added.
        * DrawTest/DrawTestInspectorController.h: Added.
        * DrawTest/DrawTestInspectorController.m: Added.
        * DrawTest/DrawTestToolbarController.h: Added.
        * DrawTest/DrawTestToolbarController.m: Added.
        * DrawTest/DrawTestView.h: Added.
        * DrawTest/DrawTestView.m: Added.
        * DrawTest/DrawTest_Prefix.pch: Added.
        * DrawTest/English.lproj/DrawTestDocument.nib/classes.nib: Added.
        * DrawTest/English.lproj/DrawTestDocument.nib/info.nib: Added.
        * DrawTest/English.lproj/DrawTestDocument.nib/keyedobjects.nib: Added.
        * DrawTest/English.lproj/InfoPlist.strings: Added.
        * DrawTest/English.lproj/Inspector.nib/classes.nib: Added.
        * DrawTest/English.lproj/Inspector.nib/info.nib: Added.
        * DrawTest/English.lproj/Inspector.nib/keyedobjects.nib: Added.
        * DrawTest/English.lproj/MainMenu.nib/classes.nib: Added.
        * DrawTest/English.lproj/MainMenu.nib/info.nib: Added.
        * DrawTest/English.lproj/MainMenu.nib/keyedobjects.nib: Added.
        * DrawTest/English.lproj/TestViewer.nib/classes.nib: Added.
        * DrawTest/English.lproj/TestViewer.nib/info.nib: Added.
        * DrawTest/English.lproj/TestViewer.nib/keyedobjects.nib: Added.
        * DrawTest/Info.plist: Added.
        * DrawTest/SVGTest.h: Added.
        * DrawTest/SVGTest.m: Added.
        * DrawTest/ScalingImageView.h: Added.
        * DrawTest/ScalingImageView.m: Added.
        * DrawTest/TestController.h: Added.
        * DrawTest/TestController.m: Added.
        * DrawTest/TestViewerSplitView.h: Added.
        * DrawTest/TestViewerSplitView.m: Added.
        * DrawTest/main.m: Added.
        Adding simple cocoa app for testing SVG rendering, interaction.
        http://bugs.webkit.org/show_bug.cgi?id=4157

2005-07-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        * svg2png/svg2png.m: Added.
        * svg2png/svg2png.xcodeproj/project.pbxproj: Added.
        * svg2png/svg2png_Prefix.pch: Added.
        Added a simple test tool which dumps a PNG from an SVG using
        WebCore+SVG's SVG rendering support.
        http://bugs.webkit.org/show_bug.cgi?id=4156

2005-07-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - new script to review the DOM layout test results and see where we stand
        on actual success and failure

        * Scripts/check-dom-results: Added.

2005-07-25  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Check in missing line of code.

2005-07-25  Darin Adler  <darin@apple.com>

        - fixed problem that was causing JavaScriptCore test to fail
          (except for people who had set DYLD_FRAMEWORK_PATH)

        * Scripts/run-javascriptcore-tests: Add code to set DYLD_FRAMEWORK_PATH.
        Add code to parse configuration parameter so you can pass --deployment if you like.
        * Scripts/run-webkit-tests: Add code to parse configuration parameter.

        * Scripts/update-javascriptcore-test-results: Add license header.

        * Scripts/webkitdirs.pm: Change code that reads configuration option to remove it
        from @ARGV. This lets us use this option in commands that take other options and
        pass them along to a subsequent tool.

2005-07-25  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        - Fixed run-safari and gdb-safari to use the Safari application in the build results
          directory, if any, falling back to the one in the Applications directory otherwise.
          Does no harm for open source contributors who don't build Safari, and helps out the
          Safari team, since we do build Safari.

        * Scripts/webkitdirs.pm: Added safariPath function that uses WEBKIT_SAFARI environment
        variable, and if that's not present, looks in either the build results directory or
        /Applications; factors code that was in both scripts before into a shared function.
        Also removed some Xcode 2.0 support which is no longer relevant since our projects are
        now in Xcode 2.1 format and incompatible with older versions of Xcode.

        * Scripts/gdb-safari: Use safariPath.
        * Scripts/run-safari: Use safariPath.

2005-07-22  Geoffrey Garen  <ggaren@apple.com>

        Moved Tools/Scripts/run-mozilla-tests to WebKitTools/Scripts/run-javascriptcore-tests.
        run-javascriptcore-tests now passes its command-line arguments to jsDriver.pl

        Moved Tools/Scripts/update-mozilla-js-test-results to
        WebKitTools/Scripts/update-javascriptcore-test-results.

        Reviewed by darin.

        * Scripts/run-javascriptcore-tests: Added.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        * Scripts/build-dumprendertree: changed XCode 2.0 project file reference to 2.1

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * DumpRenderTree/DumpRenderTree.xcode/.cvsignore: Removed.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Removed.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * DumpRenderTree/DumpRenderTree.xcodeproj/.cvsignore: Added.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * Scripts/build-webkit:

2005-07-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * checkout-svg: Fixed error with symlink creation.

2005-07-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * checkout-svg: Added.
        Script to check out WebCore+SVG

2005-06-30  Darin Adler  <darin@apple.com>

        Changes based on input from Michael Kahl.

        * Scripts/cvs-create-patch: Use "-f" so we are compatible with .cvsrc files that
        specify different style of "diff".
        * Scripts/webkitdirs.pm: Add missing call to determineBaseProductDir, so that
        determineConfigurationProductDir works in all cases.

2005-06-29  Darin Adler  <darin@apple.com>

        - fixed bug which would result in multiple unwanted dumps in a single layout test

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:locationChangeDone:forDataSource:]): Set new
        "readyToDump" flag.
        (-[LayoutTestController waitUntilDone]): Update for name change.
        (-[LayoutTestController notifyDone]): Dump only if ready.
        (dumpRenderTree): Set up new boolean and update for name change.

2005-06-29  Darin Adler  <darin@apple.com>

        Changes by Timothy Hatcher.
        Reviewed by me.

        * Scripts/run-webkit-app: Added script to open an arbritrary application with
        a CVS built WebKit. Example: ./run-webkit-app Colloquy

        * Scripts/gdb-safari: Added support for WEBKIT_SAFARI environment variable to specify
        a custom location to the Safari.app bundle. This is optional, script defaults to the stock location.
        * Scripts/run-safari: Ditto.

2005-06-26  Darin Adler  <darin@apple.com>

        * Scripts/build-dumprendertree: Pass -project option so that having a second
        copy of the project (like the one Xcode 2.1 offers to make for you) that's
        out of date won't screw you up.
        * Scripts/build-webkit: Ditto.

2005-06-23  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Fixed a regular expression in the code I just landed.

2005-06-23  Darin Adler  <darin@apple.com>

        Changes based on input from Michael Kahl.

        * Scripts/cvs-create-patch: Added code to handle getting changes in the top-level
        directory passed in.

        * Scripts/webkitdirs.pm: Eliminate use of changing the current directory and using
        getcwd() in the code to find the base product dir. Added code to handle unusual
        base product directory values that use SRCROOT.

2005-06-22  Darin Adler  <darin@apple.com>

        Change by Anders Carlsson.

        - added support for dumping title changes

        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:didReceiveTitle:forFrame:]): Added. Dump title change
        if requested by JavaScript.
        (+[LayoutTestController isSelectorExcludedFromWebScript:]): Added dumpTitleChanges.
        (-[LayoutTestController dumpTitleChanges]): Added, sets flag.
        (dumpRenderTree): Start flag as NO.

2005-06-20  Darin Adler  <darin@apple.com>

        Reviewed by Justin Garcia.

        * Scripts/run-webkit-tests: Report number of tests when they succeed.

2005-06-18  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.m: (dumpRenderTree): Add more auto-release pools
        in the hope of making the tool use less memory and run faster.

2005-06-18  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Improve handling of patches with CR characters in them.
        * Scripts/cvs-unapply: Ditto.

2005-06-17  Maciej Stachowiak  <mjs@apple.com>

        - added prepare-ChangeLog script which we use internally to make ChangeLogs, for
        benefit of all WebKit hackerdom

        * Scripts/prepare-ChangeLog: Added.

2005-06-16  Darin Adler  <darin@apple.com>

        - recent changes to XcodeOptions made it depend on the current directory
          The intent was to have the WebKitBuild directory be next to WebKitTools,
          not inside the various build directories. Workaround for now is to call
          XcodeOptions when the directory is set to the WebKit directory.

        * Scripts/build-dumprendertree: Use a local variable for XcodeOptions and get it
        at the start of the script.
        * Scripts/build-webkit: Ditto.

2005-06-15  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Recognize all 1.X versions of Xcode as old too, not just 2.0.

2005-06-14  Darin Adler  <darin@apple.com>

        Changes by Anders Carlsson.
        Reviewed by me.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3496>
          Add gdb-safari script to launch Safari under gdb

        * Scripts/gdb-safari: Added.

2005-06-12  Darin Adler  <darin@apple.com>

        Changes by Stuart Morgan.
        Reviewed by me.

        * Scripts/cvs-abandon: Use cwd instead of `pwd`.
        * Scripts/cvs-apply: Ditto.
        * Scripts/cvs-create-patch: Ditto.
        * Scripts/cvs-unapply: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/webkitdirs.pm: Ditto. Also improve handling when there's no "Configuration" file.

2005-06-12  Darin Adler  <darin@apple.com>

        * Scripts/cvs-apply: Handle case of an empty patch better.
        * Scripts/cvs-unapply: Ditto.

2005-06-12  Darin Adler  <darin@apple.com>

        Changes by Michael Gaiman.
        Reviewed by me.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3487>
          WebKit no longer builds after configuration supporting build changes

        * Scripts/webkitdirs.pm: Chomp off the result of `pwd`, and don't die when no Configuration file.

2005-06-12  Darin Adler  <darin@apple.com>

        * Scripts/update-webkit: Make this script work when called from any directory.

2005-06-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.
        Includes changes by Stuart Morgan as well as my own.

        * Scripts/build-dumprendertree: Call the new setConfiguration function, and use XcodeOptions instead of
        symrootXcodeOptions to set the -buildstyle option.
        * Scripts/build-webkit: Ditto. Also remove the old way of supporting Xcode 2.1 and the old --debug option.
        The new --development option does the same thing.
        * Scripts/run-safari: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/update-webkit: Ditto.
        * Scripts/set-webkit-configuration: Added. Sets the default configuration to Development or Deployment.

        * Scripts/webkitdirs.pm: use FindBin to find the WebKit directory; works no matter what the current
        directory is when invoking a script. Add code to determine the Xcode version so we can do the right
        thing for 2.0 and 2.1. Change the productDir function to return the appropriate per-configuration
        product directory. Read the default configuration from a file, overridable by a passed-in command-line
        option.

2005-06-11  Darin Adler  <darin@apple.com>

        * Scripts/cvs-create-patch: Improve handling of directories with mixed CVS roots by going into each directory
        to execute the cvs diff commands.

2005-06-11  Darin Adler  <darin@apple.com>

        - added first cuts at some cvs scripts

            cvs-abandon is for throwing away changes; discards any local changes, reverting to the state in CVS
            cvs-create-patch is for making patches; runs cvs diff with all the right options and handles added/deleted files
            cvs-apply is for applying patches; runs patch and cvs add and cvs rm
            cvs-unapply is for unapplying patches; does the opposite of cvs-apply

          An argument against these is "waste of time if we switch to Subversion", but they should be good for a while.

        * Scripts/cvs-abandon: Added.
        * Scripts/cvs-apply: Added.
        * Scripts/cvs-create-patch: Added.
        * Scripts/cvs-unapply: Added.

2005-06-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3397
          Build DumpRenderTree fails with unresolved NSAutoreleasePool, etc

        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Change type from "folder" to "wrapper.framework"
        for Foundation.framework. How was it ever wrong?

        - finally, I tested making the default build directory work; it works now

        * Scripts/webkitdirs.pm: Changed structure of the code a little bit, added symrootXcodeOptions function
        that sets SYMROOT on the command line in case there's no product directory set in Xcode preferences.
        * Scripts/build-webkit: Pass symrootXcodeOptions when invoking Xcode.
        * Scripts/build-dumprendertree: Ditto.

2005-06-09  Darin Adler  <darin@apple.com>

        * Scripts/webkitdirs.pm: Another try at making the default build directory of ~/WebKitBuild
        work. Someone should try building without setting the Xcode build product directory now,
        and let me know if it works.

2005-06-08  Darin Adler  <darin@apple.com>

        - quick fix to try to get build scripts working again

        * Scripts/build-dumprendertree: Add FindBin.
        * Scripts/build-webkit: Ditto.
        * Scripts/run-safari: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/update-webkit: Ditto.

2005-06-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - some build script enhancements

        * Scripts/build-dumprendertree: Changed to use webkitdirs.
        * Scripts/build-webkit: Changed to use webkitdirs, also only copy files from WebKitLibraries if
        they are newer.
        * Scripts/run-safari: Reduce number of log messages, change to respect "-d" flag and get Development
        before Deplyment in that case.
        * Scripts/run-webkit-tests: Changed to use webkitdirs.
        * Scripts/update-webkit: Changed to use webkitdirs.

        * Scripts/webkitdirs.pm: Added.

2005-06-08  Maciej Stachowiak  <mjs@apple.com>

        Code change by Toby Peterson <toby@opendarwin.org>
        Reviewed by me.

        * Scripts/run-safari: Fix to work with Xcode 2.0 again. The script would
        get confused because build-webkit now makes even 2.0 build directories look
        like 2.1.

2005-06-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Added Deployment build style.
        * Scripts/build-dumprendertree: For now, always use Deployment build style. This may fix things
        so we can run tests with Xcode 2.1.

2005-06-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        * Scripts/run-webkit-tests: Pass -L to find command to follow symlinks. This allows symlinks in the
        layout-tests directory to include additional sets of tests.

2005-06-07  Darin Adler  <darin@apple.com>

        * checkout: Added license.
        * Scripts/build-dumprendertree: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/update-webkit: Ditto.

2005-06-07  Darin Adler  <darin@apple.com>

        Change by Toby Peterson <toby@opendarwin.org>.
        Reviewed by me.

        * Scripts/build-webkit: Changes so you can build with Xcode 2.1. (I also added a license to this file.)
        * Scripts/run-safari: Ditto.

2005-06-06  Maciej Stachowiak  <mjs@apple.com>

        * Scripts/build-webkit: run ranlib on libWebKitSystemInterface.a

2005-06-06  Maciej Stachowiak  <mjs@apple.com>

        * Scripts/build-webkit: Chop newline off of $productDir to avoid problems with logic to copy files ther.

2005-06-06  Maciej Stachowiak  <mjs@apple.com>

        * Scripts/build-webkit: Install WebKitSystemInterface stuff into build products dir.

2005-06-05  Darin Adler  <darin@apple.com>

        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Tweak, simplify.
        * Scripts/build-dumprendertree: Added.
        * Scripts/build-webkit: Build All in the JavaScriptCore directory.
        * Scripts/run-webkit-tests: Build DumpRenderTree before running.

2005-06-05  Darin Adler  <darin@apple.com>

        * Scripts/run-safari: Fix path to Safari executable. Add check for frameworks.

2005-06-05  Darin Adler  <darin@apple.com>

        - add run-webkit-tests script; not working yet but the pieces are there

        * Scripts/run-webkit-tests: Added.

        * DumpRenderTree/DumpRenderTree.m: Added.
        * DumpRenderTree/DumpRenderTree.xcode/.cvsignore: Added.
        * DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Added.
        * DumpRenderTree/DumpRenderTreePrefix.h: Added.

2005-06-05  Darin Adler  <darin@apple.com>

        - created module, first cut at Web Kit Open Source Project scripts

        * ChangeLog: Added.
        * Scripts/build-webkit: Added.
        * Scripts/run-safari: Added.
        * Scripts/update-webkit: Added.
        * checkout: Added.

=== creation of WebKitTools module ===
