2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r48365.

    2009-09-14  Brady Eidson  <beidson@apple.com>

        Windows build fix.

        * DumpRenderTree/LayoutTestController.cpp:
        (setAuthenticationPasswordCallback):
        (setAuthenticationUsernameCallback):
        
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):

2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r48374.

    2009-09-14  Brady Eidson  <beidson@apple.com>

        Not reviewed, maybe should've been:

        Cleaning up more Windows-specific fallout from the fix for:
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):  Correct printf() formatter, 
          and call the correct method to get the Sender.

2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r48363.

    2009-09-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Safari 4 cannot be used to update firmware on Linksys routers.
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        Add the ability for DRT to handle authentication challenges.

        * DumpRenderTree/LayoutTestController.cpp:
        (setAuthenticationPasswordCallback):
        (setAuthenticationUsernameCallback):
        (setHandlesAuthenticationChallengesCallback):
        (LayoutTestController::staticFunctions):

        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::handlesAuthenticationChallenges):
        (LayoutTestController::setHandlesAuthenticationChallenges):
        (LayoutTestController::authenticationUsername):
        (LayoutTestController::setAuthenticationUsername):
        (LayoutTestController::authenticationPassword):
        (LayoutTestController::setAuthenticationPassword):

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        * DumpRenderTree/win/ResourceLoadDelegate.h:

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

        Merge r50470.

    2009-11-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson and Beth Dakin.

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

        Added an 'ondestroy' parameter to the test plug-in. When the plug-in is
        destroyed, it executes the value of the 'ondestroy' parameter as a
        script.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginAllocate): Initialize onDestroy.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Define
        onDestroy.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New): Set onDestroy to the value of the 'ondestroy' parameter, if
        specified.
        (NPP_Destroy): Execute the value of 'ondestroy' as a script.

2010-01-27  Mark Rowe  <mrowe@apple.com>

        Merge r53567.

    2010-01-20  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: accSelect() is not implemented

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

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (takeFocusCallback):
        Call the object's takeFocus() function.
        (takeSelectionCallback):
        Call its takeSelection() function.
        (addSelectionCallback):
        Call its addSelection() function.
        (removeSelectionCallback):
        Call its removeSelection() function.
        (AccessibilityUIElement::getJSClass):
        Add new functions to the JS class definition.

        * DumpRenderTree/AccessibilityUIElement.h:
        Declare new functions.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::takeFocus):
        Stubbed.
        (AccessibilityUIElement::takeSelection):
        Stubbed.
        (AccessibilityUIElement::addSelection):
        Stubbed.
        (AccessibilityUIElement::removeSelection):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::takeFocus):
        Stubbed.
        (AccessibilityUIElement::takeSelection):
        Stubbed.
        (AccessibilityUIElement::addSelection):
        Stubbed.
        (AccessibilityUIElement::removeSelection):
        Stubbed.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::takeFocus):
        Call the object's accSelect() function, passing the appropriate flag.
        (AccessibilityUIElement::takeSelection):
        Ditto.
        (AccessibilityUIElement::addSelection):
        Ditto.
        (AccessibilityUIElement::removeSelection):
        Ditto.

2010-01-27  Mark Rowe  <mrowe@apple.com>

        Merge r53368.

    2010-01-15  Jon Honeycutt  <jhoneycutt@apple.com>

        get_accParent should try to retrieve parent AccessibilityObject, before
        calling upon window

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

        Reviewed by Darin Adler.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::parentElement):
        Get the object's parent. Query it for IAccessible, and return it.

2010-01-27  Mark Rowe  <mrowe@apple.com>

        Merge r53512.

    2010-01-17  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: The child <option> elements of a non-multiple <select> are not
        exposed

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

        Reviewed by Alice Liu.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsVisibleCallback):
        Call the object's isVisible() function.
        (getIsOffScreenCallback):
        Ditto, for isOffScreen().
        (getIsCollapsedCallback):
        Ditto, for isCollapsed().
        (getHasPopupCallback):
        Ditto, for hasPopup().
        (AccessibilityUIElement::getJSClass):
        Add isVisible and isOffScreen attributes.

        * DumpRenderTree/AccessibilityUIElement.h:
        Declare new functions.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isVisible):
        Stubbed.
        (AccessibilityUIElement::isOffScreen):
        Stubbed.
        (AccessibilityUIElement::isCollapsed):
        Stubbed.
        (AccessibilityUIElement::hasPopup):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isVisible):
        Stubbed.
        (AccessibilityUIElement::isOffScreen):
        Stubbed.
        (AccessibilityUIElement::isCollapsed):
        Stubbed.
        (AccessibilityUIElement::hasPopup):
        Stubbed.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::showMenu):
        Call the object's accDoDefaultAction() to show its popup menu.
        (AccessibilityUIElement::isEnabled):
        Check that the object does not have the "unavailable" state.
        (AccessibilityUIElement::isVisible):
        Check that the object does not have the "invisible" state.
        (AccessibilityUIElement::isOffScreen):
        Check whether the object has the "offscreen" state.
        (AccessibilityUIElement::isCollapsed):
        Check whether the object has the "collapsed" state.
        (AccessibilityUIElement::hasPopup):
        Check whether the object has the "has popup" state.

2010-01-27  Mark Rowe  <mrowe@apple.com>

        Merge r53220.

    2010-01-12  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: selected, selectable, extended selectable, and multiple
        selectable states are not reported

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

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsSelectableCallback):
        Return the result of calling isSelectable().
        (getIsMultiSelectableCallback):
        Return the result of calling isMultiSelectable().
        (AccessibilityUIElement::getJSClass):
        Add isSelected and isMultiSelectable properties to the JSClass
        definition.

        * DumpRenderTree/AccessibilityUIElement.h:
        Declare isSelectable() and isMultiSelectable().

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isSelectable):
        Stubbed.
        (AccessibilityUIElement::isMultiSelectable):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isSelectable):
        Stubbed.
        (AccessibilityUIElement::isMultiSelectable):
        Stubbed.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (accessibilityState):
        Get the object's state, and return it.
        (AccessibilityUIElement::isSelected):
        Check the object's selected state.
        (AccessibilityUIElement::isSelectable):
        Check the object's selectable state.
        (AccessibilityUIElement::isMultiSelectable):
        Check the object's extended/multiple selectable state.

2010-01-27  Mark Rowe  <mrowe@apple.com>

        Merge r52773.

    2010-01-04  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: <select> elements should broadcast value change events

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

        <rdar://problem/7332364>

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityController.cpp:
        (logValueChangeEventsCallback):
        Start logging value change events.
        (AccessibilityController::getJSClass):
        Add a "logValueChangeEvents" to the AccessibilityController's JS class
        definition.
        (AccessibilityController::resetToConsistentState):
        Disable logging of value change events.

        * DumpRenderTree/AccessibilityController.h:
        Declare setLogValueChangeEvents(), and add a member variable for the
        value change event hook.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::setLogValueChangeEvents):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::setLogValueChangeEvents):
        Stubbed.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        Initialize new member var.
        (AccessibilityController::~AccessibilityController):
        Disable logging of value change events.
        (logEventProc):
        When we receive an EVENT_OBJECT_VALUECHANGE, log the name of the object
        and its value.
        (AccessibilityController::setLogValueChangeEvents):
        If disabling logging, unhook the event, and clear the event hook
        member var. Otherwise, query for the root element to enable
        accessibility, and hook EVENT_OBJECT_VALUECHANGE.

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

        Merge r50356.

    2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Test for MSAA: Accessibility of headings is not correct

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

        Reviewed by Adam Roben.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::role):
        Allow the role returned to be a BSTR.
        (AccessibilityUIElement::description):
        Fix a copy/paste error.

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

        Merge r50355.

    2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Test for MSAA: Accessibility of links is wrong

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

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getAccessibilityValueCallback):
        Return the accessibility value.
        (AccessibilityUIElement::getJSClass):
        Added "accessibilityValue" value.

        * DumpRenderTree/AccessibilityUIElement.h:

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::accessibilityValue):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::accessibilityValue):
        Stubbed.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::accessibilityValue):
        Get the object's value, and return it as a JS string.

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

        Merge r47551.

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

        Reviewed by Dan Bernstein.

        Fix <http://webkit.org/b/28484> Plug-in-related leaks seen on the build bot

        Update check-for-global-initializers to accommodate the new uses of RefCountedLeakCounter in WebKit.

        * Scripts/check-for-global-initializers:

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

        Merge r48361.

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

        Reviewed by Dan Bernstein.

        Test for <rdar://problem/6954546> and <rdar://problem/7090444>.

        Add a flag on the test plug-in that asks it to clear the document during the call to NPP_New.
        This is the trigger for both <rdar://problem/6954546> and <rdar://problem/7090444>.

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):

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

        Merge r48368.

    2009-09-11  Jon Honeycutt  <jhoneycutt@apple.com>

        DRT/test part of
        <rdar://problem/7197644> WebKit should broadcast an MSAA event when
        jumping to a named anchor

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

        Reviewed by Adam Roben.

        * DumpRenderTree/AccessibilityController.cpp:
        (logScrollingStartEventsCallback):
        Turn on logging of scrolling start events.
        (AccessibilityController::getJSClass):
        Add a "logScrollingStartEvents" to the AccessibilityController's JS
        class definition.
        (AccessibilityController::resetToConsistentState):
        Turn off logging of scrolling start events.

        * DumpRenderTree/AccessibilityController.h:
        Declare setLogScrollingStartEvents(). Add a member for the scrolling
        start event hook.

        * DumpRenderTree/mac/AccessibilityControllerMac.cpp:
        (AccessibilityController::setLogScrollingStartEvents):
        Stubbed.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        Initialize the handle to 0.
        (logEventProc):
        Renamed from logFocusEventProc; now logs scrolling start events, too.
        Removed the assertion that the event is a focus event. Added a switch
        to print a message for focus, scrolling start, and other, unknown
        events.
        (AccessibilityController::setLogFocusEvents):
        Changed to use logEventProc.
        (AccessibilityController::setLogScrollingStartEvents):
        If turning logging off, unhook the scrolling start event hook, and clear
        the member holding the handle. If turning on, query for the root
        accessible, so that accessibility is enabled for the WebView, and call
        SetWinEventHook to setup an event hook using logEventProc as the
        callback function.

2009-08-17  Steve Falkenburg  <sfalken@apple.com>

        Merge r47320.

    2009-08-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix layout test failures after r47312.

        Reviewed by Cameron Zwarich.

        * DumpRenderTree/AccessibilityController.h:
        Replaced logFocusEvents() with setLogFocusEvents(), which takes a
        boolean argument to turn logging of focus events on or off.
        Added a function to reset the AccessibilityController to a consistent
        state.

        * DumpRenderTree/AccessibilityController.cpp:
        (logFocusEventsCallback):
        Call setLogFocusEvents() to enable logging.
        (AccessibilityController::resetToConsistentState):
        Call setLogFocusEvents() to disable logging.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::setLogFocusEvents):
        Update stub.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::setLogFocusEvents):
        Update stub.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        Call the FrameLoadDelegate's resetToConsistentState method.

        * DumpRenderTree/mac/FrameLoadDelegate.h:
        Declare the resetToConsistentState method.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate resetToConsistentState]):
        Call the AccessibilityController's resetToConsistentState() function.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::~AccessibilityController):
        Turn off focus event logging when the controller is destroyed.
        (AccessibilityController::setLogFocusEvents):
        If the caller passes false, unhook the focus event, and clear
        m_focusEventHook.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        Call the FrameLoadDelegate's resetToConsistentState function.

        * DumpRenderTree/win/FrameLoadDelegate.h:
        Declare the resetToConsistentState() function.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::resetToConsistentState):
        Call the AccessibilityController's resetToConsistentState() function.


2009-08-17  Steve Falkenburg  <sfalken@apple.com>

        Merge r47312.

    2009-08-14  Jon Honeycutt  <jhoneycutt@apple.com>

        Add a mechanism for logging MSAA focus events.

        Part of <rdar://problem/6218721> No MSAA focus events fired for Webkit
        nightly (20866)

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

        Reviewed by Oliver Hunt.

        * DumpRenderTree/AccessibilityController.cpp:
        (logFocusEventsCallback):
        Call the AccessibilityController's logFocusEvents() function.
        (AccessibilityController::getJSClass):
        Add a "logFocusEvents" function to the AccessibilityController's JS
        class definition.

        * DumpRenderTree/AccessibilityController.h:
        On Windows, include windows.h, and add a member variable to hold the
        handle to the event hook for focus events. Add a declaration for a
        function that enables logging of focus events.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::logFocusEvents):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::logFocusEvents):
        Stubbed.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        If we hooked the focus event, unhook it.
        (logFocusEventProc):
        When we receive a focus event, get the accessible object for the event,
        and log its name to stdout.
        (AccessibilityController::logFocusEvents):
        Setup the focus event hook to listen for events in the current process.

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

        Merge r45892.
    
    2009-07-14  Steve Falkenburg  <sfalken@apple.com>

        Reorganize JavaScriptCore headers into:
        API: include/JavaScriptCore/
        Private: include/private/JavaScriptCore/

        Reviewed by Darin Adler.

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

2009-07-09  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

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

        Turned on CHANNEL_MESSAGING by default because the MessageChannel API
        can now be implemented for Web Workers and is reasonably stable.

        * Scripts/build-webkit:

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

        <http://webkit.org/b/27114> bugzilla-tool: Parse short bug URL from commit log messages

        Reviewed by Adam Roben.

        * Scripts/bugzilla-tool:
        (bug_id_from_commit_message): Check for the short bug URL before
        checking for the longer bugs.webkit.org URL.

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

        Bug 27062: bugzilla-tool: post-commits should read bug id from commit log and actually work

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

        Reviewed by Eric Seidel.

        Removed the required BUGID argument from the "post-commits"
        command and replaced it with a -b|--bug-id switch or parsing the
        commit log message for the bug URL.  Fixed a bug in the
        "post-commits" that would ignore the COMMITISH used and post a
        patch of local changes against HEAD.  Added --no-commit switch
        to disable using the bulk of the ChangeLog entry as the comment
        for the new patch.

        * Scripts/bugzilla-tool:
        (bug_id_from_commit_message): Added.  Returns a bug id from the
        commit log message, thus enforcing the need for a bug URL in the
        message.
        (PostCommitsAsPatchesToBug.__init__): Updated help description
        to match new behavior of pulling bug ids from commit log
        messages instead of from the command line.  Added -b|--bug-id
        switch and --no-comment switch.
        (PostCommitsAsPatchesToBug.execute): Updated to use
        bug_id_from_commit_message() to pull bug ids from commit log
        messages.  Also switched from SCM.create_patch() to use
        SCM.create_patch_from_local_commit() to fix a bug where local
        repository changes were posted as a patch instead of the
        specific COMMITISH.  Fall back to -b|--bug-id if no URL is found
        in the commit log message.  Don't specify a comment for the
        patch if --no-comment is used.  Set cherry_pick argument to True
        for Git.commit_ids_from_range_arguments() since we don't want
        implicit commit range behavior for this command.

        * Scripts/modules/bugzilla.py: Import datetime module.
        (timestamp): Added.  Returns a timestamp in the form of
        "YYYYMMDDhhmmss".
        (Bugzilla.bug_server_regex): Added static attribute.
        (Bugzilla.add_patch_to_bug): Construct a more meaningful patch
        file name using the bug_id and timestamp().

        * Scripts/modules/scm.py:
        (SCM.create_patch_from_local_commit): Added.
        (Git.create_patch_from_local_commit): Added.  Runs "git diff" to
        return a patch for the given commit_id.

2009-07-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        Make prepare-ChangeLog less shouty
        https://bugs.webkit.org/show_bug.cgi?id=27098

        * Scripts/prepare-ChangeLog:

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

        Bug 27083: bugzilla.py: Clean up bug_server use

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

        Reviewed by Darin Adler.

        * Scripts/modules/bugzilla.py:
        (Bugzilla.fetch_bug_ids_from_commit_queue): Use bug_server
        instead of hard-coding the URL.
        (Bugzilla.authenticate): Remove extra '/' before URL path.
        (Bugzilla.add_patch_to_bug): Ditto.

2009-07-08  Brent Fulgham  <bfulgham@webkit.org>

        Build fix for Windows Cairo.

        Cairo build was incorrectly #including the PixelDumpSupportCG.h
        instead of PixelDumpSupportCairo.h

        * DumpRenderTree/win/PixelDumpSupportWin.cpp: Correct #include

2009-07-08  David Faure  <faure@kde.org>

        Reviewed by Ariya Hidayat.

        Small documentation improvement for build-webkit --help

        * Scripts/build-webkit: mention --debug option

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

        Tiger build fix, work around missing NSString API.

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

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

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27049 - In dumpBackForwardList() mode, DRT should normalize file urls.

        Make the dump of a history item agnostic to the layout of filesystem on the testing machine.

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

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

        Rubber-stamped by Simon Hausmann.

        Correct git url of the Qt test-fonts.

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

2009-07-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Clear the main frame's name between loading pages, like in r36652. This
        reduces the side-effects between test cases.

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

2009-07-06  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Fix various layout tests with Qt's DRT.

        Remember to set the focus on the web page before
        loading.

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

2009-07-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø and Holger Freyther.

        Fix timeout timer handling in Qt DRT.

        Use QBasicTimer instead of startTimer/killTimer, to fix the
        problem that starting the timeout timer did not stop a
        previously started timer, causing multiple emissions of timeout.
        The timerEvent() implementation now also checks the timer id, to
        protect against double timeouts.

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

2009-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        bugzilla-tool fails to close bugs with bugzilla 3.0
        https://bugs.webkit.org/show_bug.cgi?id=27008

        Update bugzilla.py to match changes in the bug page "changeform"
        Update scm.py to add bug_ids to attachments to make error reporting nicer.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/scm.py:

2009-07-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric Seidel.

        bugzilla-tool forgot how to obsolete patches
        https://bugs.webkit.org/show_bug.cgi?id=26951

        * Scripts/modules/bugzilla.py:

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

        Unreviewed build fix (Cairo this time) for DumpRenderTree.
        Put Cairo code back in, but use original include order
        for the CG stuff to avoid compile issues.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):

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

        Correct blatant typo (missing []), no review.

        * Scripts/modules/scm.py:

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

        Windows build fix, no review.


        Reverting PixelDumpSupportWin.cpp change to avoid strange
        error on the build-bot.
 
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):

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

        Build fix, no review.

        * DumpRenderTree/config.h:

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

        Reviewed by David Levin.

        bugzilla-tool needs to handle login failure
        https://bugs.webkit.org/show_bug.cgi?id=26913

        We now exit(1) on login failure.

        * Scripts/modules/bugzilla.py:

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

        Reviewed by Adam Roben.

        Add build support for a Windows Cairo version of
        DumpRenderTree.  Share as much logic between the
        CG and Cairo builds as possible.
        https://bugs.webkit.org/show_bug.cgi?id=26457

        * DumpRenderTree/PixelDumpSupport.cpp: Added.
        (dumpWebViewAsPixelsAndCompareWithExpected): Moved common logic
          from CG-specific file.
        (printPNG): Moved common logic from CG-specific file.
        * DumpRenderTree/PixelDumpSupport.h: Add declaration for new
          common printPNG function.
        * DumpRenderTree/cairo: Added.
        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp: Added.
          Implement cairo-specific logic for dealing with Cairo surfaces.
        (writeFunction):
        (printPNG): Cairo-specific PNG handling logic.
        (computeMD5HashStringForBitmapContext): New Cairo routine using
          the generic BitmapContext signature.
        (dumpBitmap): New function containing Cairo-specific portions of
          the dumping routine.
        * DumpRenderTree/cairo/PixelDumpSupportCairo.h: Added.
          Provide Cairo version of the BitmapContext structure so that
          dumping routines can work on an abstract type.
        (BitmapContext::createByAdoptingBitmapAndContext):
        (BitmapContext::~BitmapContext):
        (BitmapContext::cairoContext):
        (BitmapContext::BitmapContext):
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG): CG-specific PNG handling logic.
        (computeMD5HashStringForBitmapContext): Revised to use generic
          BitmapContext signature.
        (dumpBitmap): New function containing CG-specific portions of
          the dumping routine.
        * DumpRenderTree/cg/PixelDumpSupportCG.h: Add new signatures.
        * DumpRenderTree/win/DumpRenderTree.cpp: Disable CFNetwork logic
          when building the non-CFNetwork version.
        (main):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Provide parallel Cairo implementation
          of CG bitmap/context setup.

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

        No review, just adding Antti as a reviewer.

        * Scripts/modules/bugzilla.py:

2009-07-02  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

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

        [Qt] Set DRT's default fontsize to 13.

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

2009-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool fails for SVN users
        https://bugs.webkit.org/show_bug.cgi?id=26914

        To fix this I moved svn from -F - to using -m
        In order for -m to work I had to move us off of shell=True
        To move off of shell=True all call sites for run_command
        which take args, need to pass their args as an list instead of a string.

        In order for the final bug update to work correctly, I had to
        abstract the way that we parse out revision numbers from the commit text.

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        prepare-ChangeLog should have a --bug= argument and use it for url autofill
        https://bugs.webkit.org/show_bug.cgi?id=26383

        prepare-ChangeLog now knows how to grab the bug title from bugs.webkit.org
        I also added a bit more template text in an effort to get better ChangeLogs
        from casual contributers.

        * Scripts/prepare-ChangeLog:

2009-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        prepare-ChangeLog should fail when EMAIL_ADDRESS or REAL_NAME are missing:
        https://bugs.webkit.org/show_bug.cgi?id=26692

        I also made prepare-ChangeLog sanity-check names and email addresses a little.
        Names must contain a space, and email addresses must contain '@'

        Also "fixed" $email_address to $emailAddress.  This script uses mixed variable name styles.

        * Scripts/prepare-ChangeLog:

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

        Reviewed by Beth Dakin.

        Bug 26900: AX: Manual spell check with Command-; does not bring up suggestions
        https://bugs.webkit.org/show_bug.cgi?id=26900

        Expose the ability to get the click point of an element through accessibility.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getClickPointXCallback):
        (getClickPointYCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):

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

        Reviewed by Simon Fraser.

        Change how WebKitNightlyEnabler.dylib lies about Safari's identity to LaunchServices.
        This makes WebKit.app behave as expected when set as the default web browser on a wider
        range of OS versions.

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

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

        Reviewed by Simon Fraser.

        Shuffle some code around in preparation for a change to how poseAsWebKitApp works.

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (systemVersion):
        (webKitLauncherBundle):
        (insideSafari4OnTigerTrampoline):

2009-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26877
        [GTK] DRT fixes to pass new plugin test

        Silence compiler warnings.

        Newer GCC don't like using or returning a static string where a
        'char*' is expected. Ideally we'd change the function signatures
        to return or take 'const char*' I suppose, but since we can't do
        that just cast the strings to 'char*'.

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

2009-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26877
        [GTK] DRT fixes to pass new plugin test

        Use the common pluginLog function instead of a local copy.

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

2009-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26877
        [GTK] DRT fixes to pass new plugin test

        Modify our DRT as done in bug #15457 to log logSrc as src in order
        to pass test plugins/netscape-plugin-map-data-to-src.html.

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

2009-06-30  Adrien Nader  <camaradetux@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] GtkLauncher depends on gtk+2-2.15 because of gtk_orientable_set_orientation()
        https://bugs.webkit.org/show_bug.cgi?id=26835

        * GtkLauncher/main.c:
        (create_toolbar):

2009-06-30  Eric Seidel  <eric@webkit.org>

        Typo fix only, no review.

        Fix typo causing failure during land-diff

        * Scripts/bugzilla-tool:

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

        Reviewed by Dan Bernstein.
        
        Fix drawing of view background in pixel snapshots when using compositing.
        We still need to call -displayIfNeeded to ensure that the NSView drawing
        has happened.

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

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

        Reviewed by Mark Rowe.

        createBitmapContextFromWebView() incorrectly used #ifdef BUILDING_ON_LEOPARD,
        and thus failed on SnowLeopard.
        
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):

2009-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Make bugzilla tool print a message explaining how to get help on failure:
        https://bugs.webkit.org/show_bug.cgi?id=26861

        % bugzilla-tool
        Usage: bugzilla-tool [options] command [command-options] [command-arguments]

        bugzilla-tool: error: No command specified

        Type 'bugzilla-tool --help' to see usage.

        * Scripts/bugzilla-tool:

2009-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        Include a built copy of BeautifulSoup 3.1.0.1 so that
        bugzilla-tool users do not need to install it manually.
        https://bugs.webkit.org/show_bug.cgi?id=26833

        BeautifulSoup is BSD-licensed (thus WebKit compatible) and available from:
        http://www.crummy.com/software/BeautifulSoup

        * Scripts/bugzilla-tool: fixed a typo in a log message.
        * Scripts/modules/BeautifulSoup.py: Added.
        * Scripts/modules/bugzilla.py:

2009-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Hausmann.

        Fix our create_patch handling to not
        hang when creating large patches.
        https://bugs.webkit.org/show_bug.cgi?id=26834

        We're now using StringIO to make an in-memory buffer for the patch
        instead of piping from the patch command directly to the upload.
        The previous hang was caused by calling wait() when the process had already
        filed the stdout buffer.

        * Scripts/modules/scm.py:

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

        Reviewed by Mark Rowe.

        Remove more unused scons support.

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

2009-06-26  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        Rename land-and-update to land-diff and make it awesome.
        https://bugs.webkit.org/show_bug.cgi?id=26734

        Renamed land-and-update to land-diff
        Made the BUGID argument optional.
        Added optional support for building and testing before landing.

        land-diff [options] [BUGID]    Lands the current working directory diff and updates the bug if provided.
          Options:
            -r REVIEWER, --reviewer=REVIEWER
                              Update ChangeLogs to say Reviewed by REVIEWER.
            --no-close        Leave bug open after landing.
            --no-build        Commit without building first, implies --no-test.
            --no-test         Commit without running run-webkit-tests.

        * Scripts/bugzilla-tool:

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

        Gtk build fix - include stdarg.h for va_start/va_end.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:

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

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

        Modify NPAPI test plugin to verify that "src" paramater is added when
        it's missing but "data" is present.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginLog):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_Destroy):
        (NPP_SetWindow):
        (handleEventCarbon):
        (handleEventCocoa):
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_New):

2009-06-27  Emilio Pozuelo Monfort  <pochu27@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Don't use deprecated GTK+ symbols.
        https://bugs.webkit.org/show_bug.cgi?id=26583

        * GtkLauncher/main.c:
        (create_toolbar):

2009-06-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make SVN work (again?).

        * Scripts/modules/scm.py:

2009-06-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Add ability to query isEnabled

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

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

        Reviewed by Sam Weinig

        <rdar://problem/6961578> REGRESSION (r43511): Opening .fdf files from Acrobat Professional fails

        Add a dumpResourceResponseMIMETypes() mode so the ResourceLoadDelegate will dump the mime type from
        the NSURLResponse.  Needed for the test for this bug fix.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpResourceResponseMIMETypesCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpResourceResponseMIMETypes):
        (LayoutTestController::setDumpResourceResponseMIMETypes):

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):

2009-06-26  David Kilzer  <ddkilzer@apple.com>

        Update build-dumprendertree to use buildXCodeProject()

        Reviewed by Adam Roben.

        * Scripts/build-dumprendertree: Updated to use
        buildXCodeProject() when building for isAppleMacWebKit().  This
        provides additional command-line switch parsing for free.  Also
        added --clean and --help switches.  Updated copyright.

2009-06-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Remove non-sense --update option to land-patches
        and make land-patches update before every patch application.
        This makes it slightly less likely that multi-patch landings will fail.

        Also updated git diff command to include staged modifications.

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Jan Alonzo.

        Fix obsolete_attachment to work when passed a comment.
        https://bugs.webkit.org/show_bug.cgi?id=26745

        * Scripts/modules/bugzilla.py:

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

        Reviewed by Mark Rowe.

        bugzilla-tool apply-patch throws exception in Linux
        https://bugs.webkit.org/show_bug.cgi?id=26738

        HEAD is case-sensitive in Linux. Convert uses of head to HEAD in
        the scm module.

        * Scripts/modules/scm.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Jan Alonzo.

        bugzilla-tool post-diff needs to obsolete old patches before posting
        https://bugs.webkit.org/show_bug.cgi?id=26740

        I've also added a --no-obsolete to disable this behavior.
        
        I also finally updated the bug page parsing to use XML. So much less code!

        * Scripts/bugzilla-tool:
        * Scripts/modules/bugzilla.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Call WebKitTools/Scripts scripts by their absolute paths
        https://bugs.webkit.org/show_bug.cgi?id=26704

        bugzilla-tool used to use whatever build-webkit was in your path.
        That could end up building the wrong copy of WebKit.

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

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

        Reviewed by Dave Levin.

        Use unicode() instead of str when reading from bugzilla.
        Also add Simon Fraser as a reviewer.
        https://bugs.webkit.org/show_bug.cgi?id=26719

        * Scripts/modules/bugzilla.py:

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

        Reviewed by Simon Hausmann.

        Use Q_ASSERT in Qt's DumpRenderTree instead of JSC's ASSERT
        
        The WTFReportAssertionFailure function in JSC is not exported when
        building QtWebKit in both debug and release on Mac, so DRT fails to
        link.
        
        We can revert this patch once the Qt port builds JSC as a separate
        library, and we add the proper export macros to Assertions.cpp

        * DumpRenderTree/qt/WorkQueue.cpp:
        (WorkQueue::queue):
        (WorkQueue::dequeue):

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

        Reviewed by Jan Alonzo.

        bugzilla-tool: Add Simon Hausmann as reviewer

        * Scripts/modules/bugzilla.py:

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

        Reviewed by Dave Levin.

        Support local commits during apply-patches
        and let land-patches take multiple bug ids.
        https://bugs.webkit.org/show_bug.cgi?id=26703

        I also restructured parts of land-patches into
        class methods and static methods in preparation
        for future code sharing with other commands.

        * Scripts/bugzilla-tool:
        * Scripts/modules/bugzilla.py:
        * Scripts/modules/scm.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Make svn-apply work with Git too
        https://bugs.webkit.org/show_bug.cgi?id=26299
        
        Add an --force option to svn-apply and otherwise make svn-apply
        exit non-zero when patch application fails.
        https://bugs.webkit.org/show_bug.cgi?id=26300

        I did not update svn-unapply, because it makes no sense in a Git world.
        You don't roll in and out patch files.  You make commits and deal with those.
        Git users can just git reset --hard to get the same functionality.

        * Scripts/svn-apply:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Remove use of os.system to fix reviewers with unicode chars in their names
        https://bugs.webkit.org/show_bug.cgi?id=26713

        Also change to latin1 encoding of ø to make python happy.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/scm.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Add Adam Roben and Tor Arne Vestbø to the reviewers list.

        * Scripts/modules/bugzilla.py:

2009-06-24  Chris Fleizach  <cfleizach@apple.com>

        Windows build fix.

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

2009-06-24  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26668: AX: need a way to retrieve the language for an element
        Support ability to retrieve AXLanguage for testing

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getLanguageCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::language):

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

        Reviewed by Maciej Stachowiak.
        
        Spell Maciej's name right and add Brady Eidson.

        * Scripts/modules/bugzilla.py:

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

        Reviewed by Dave Levin.

        Fix missing comment message during land-patches and SVN.commit_with_message respecting --dry-run
        https://bugs.webkit.org/show_bug.cgi?id=26669

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-06-23  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Mark Rowe.

        Bug 26537: Builds from command-line fail if custom build product directory is set and ~/Library/Preferences/xcodebuild.plist exists
        https://bugs.webkit.org/show_bug.cgi?id=26537

        Let determineBaseProductDir subroutine remove
        ~/Library/Preferences/xcodebuild.plist. It can prevent xcodebuild from
        respecting global settings such as a custom build products directory
        (<rdar://problem/5585899>).

        * Scripts/webkitdirs.pm:

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

        Reviewed by Dave Levin.

        Make SCM.run_command smarter, and make all previous
        os.system and subprocess.popen use SCM.run_command instead.
        https://bugs.webkit.org/show_bug.cgi?id=26666

        This makes it easier to handle errors in a standard way throughout all the code.
        Since this new code raises by default when the exit_code != 0,
        we should prevent future problems of bugzilla-tool continuing after
        a git or svn command failed.

        * Scripts/modules/scm.py:

2009-06-23  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=26664
        * Scripts/prepare-ChangeLog: Added --git-index mode to list only the
        changes which are already staged in the index.  Useful to create an
        entry for what you're about to commit while ignoring unstaged changes.

2009-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.
        
        Update for WebKit changes.
        
        * DumpRenderTree/win/UIDelegate.h:
        (UIDelegate::willPerformDragSourceAction):

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

        Reviewed by Mark Rowe.

        * Scripts/modules/scm.py: Fix commit_with_message to return the commit output.

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

        Reviewed by Mark Rowe.

        * Scripts/modules/scm.py: Fix error seen when commiting r44979.

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

        Reviewed by Dave Levin.

        WebKit needs a script to interact with bugzilla and automate
        parts of the patch posting and commit processes.
        https://bugs.webkit.org/show_bug.cgi?id=26283

        This is really a first-draft tool.
        It's to the point where it's useful to more people than just me now though.
        Git support works.  SVN support is written, but mostly untested.

        This tool requires BeautifulSoup and mechanize python modules to run:
        sudo easy_install BeautifulSoup
        sudo easy_install mechanize

        More important than the tool itself are the Bugzilla, Git and SVN class abstractions
        which I hope will allow easy writing of future tools.

        The tool currently implements 10 commands, described below.

        Helpers for scripting dealing with the commit queue:
        bugs-to-commit                 Bugs in the commit queue
        patches-to-commit              Patches attached to bugs in the commit queue

        Dealing with bugzilla:
        reviewed-patches BUGID         r+'d patches on a bug
        apply-patches BUGID            Applies all patches on a bug to the local working directory without committing.
        land-and-update BUGID          Lands the current working directory diff and updates the bug.
        land-patches [options] BUGID   Lands all patches on a bug optionally testing them first
        obsolete-attachments BUGID     Marks all attachments on a bug as obsolete.
        commit-message                 Prints a commit message suitable for the uncommitted changes.

        These effectively replace git-send-bugzilla:
        post-diff BUGID                Attaches the current working directory diff to a bug as a patch file.
        post-commits BUGID COMMITISH   Attaches a range of local commits to a bug as patch files.

        post-diff works for SVN and Git, post-commits only works for SCMs with local-commit support (like Git)

        land-* commands in a Git environment only work with simple patches due to svn-apply bugs:
        https://bugs.webkit.org/show_bug.cgi?id=26299
        https://bugs.webkit.org/show_bug.cgi?id=26300

        This script follows python style (similar to how for Obj-C we follow AppKit style)
        http://www.python.org/doc/essays/styleguide.html
        The Python community has a strong style culture and the WebKit style guide is silent re: Python.

        I've filed a bug to update the WebKit style guide to mention python:
        https://bugs.webkit.org/show_bug.cgi?id=26524

        * Scripts/bugzilla-tool: Added.

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

        Remove errant line of code mistakenly checked in.

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

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

        Pass correct value to setShouldPaintNativeControls.
        
        Rubber stamped by Mark Rowe.

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

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

        Fix last DumpRenderTree change to correctly set preferences flag without crashing.
        
        Reviewed by Mark Rowe.

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

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

        Set up global native controls flag before creating the first WebView.
        
        Reviewed by Darin Adler.

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

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

        Reviewed by Sam Weinig.

        Set a sensible user agent string for the HTTP requests that Sparkle makes (checking for and downloading updates).

        * WebKitLauncher/WebKitNightlyEnablerSparkle.m:
        (userAgentStringForSparkle):
        (initializeSparkle):

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

        Reviewed by Sam Weinig.

        Add a hook to the WebKit launcher application to allow a link on the nightly build start page to
        trigger an update via the built-in software update mechanism.

        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncherURLProtocol.h: Added.
        * WebKitLauncher/WebKitLauncherURLProtocol.m: Added.
        (+[WebKitLauncherURLProtocol load]):
        (+[WebKitLauncherURLProtocol canInitWithRequest:]): Only allow use of the x-webkit-launcher scheme from .webkit.org subdomains.
        (+[WebKitLauncherURLProtocol canonicalRequestForRequest:]):
        (-[WebKitLauncherURLProtocol startLoading]):
        (-[WebKitLauncherURLProtocol stopLoading]):
        (-[WebKitLauncherURLProtocol handleIsWebKitLauncherAvailableJS]): Return a brief JavaScript snippet that can be used to programatically
        determine whether the x-webkit-launcher is available and working.
        (-[WebKitLauncherURLProtocol handleCheckForUpdates]): Trigger a software update on the main thread.
        (-[WebKitLauncherURLProtocol resourceNotFound]): Fail with a generic "File does not exist" error.

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

        Reviewed by Gustavo Noronha and Xan Lopez.

        [Gtk] Implement DRT XSS auditor support
        https://bugs.webkit.org/show_bug.cgi?id=26571

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

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

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

2009-06-15  Andre Pedralho  <andre.pedralho@openbossa.org>

        Reviewed by Tor Arne Vestbø.

        Only pass --makeargs along if an argument is given.

        * Scripts/build-webkit:

2009-06-19  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix Windows build.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setXSSAuditorEnabled):

2009-06-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

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

        Add support for testing the XSSAuditor.

        * DumpRenderTree/LayoutTestController.cpp:
        (setXSSAuditorEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setXSSAuditorEnabled):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setXSSAuditorEnabled):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setXSSAuditorEnabled):
        (LayoutTestController::setPopupBlockingEnabled):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setXSSAuditorEnabled):

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

        Rubber stamped by Mark Rowe.

        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow close]): Resolved crashes seen during regression
        tests. The close method can be called on a window that's already closed
        so we can't assert here.

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

        Updated for consolidated WebKit COM interfaces.
        
        Reviewed by Adam Roben.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * WinLauncher/WinLauncher.h:

2009-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

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

        Make the commit-log-editor match the ambient line endings in commit
        messages.

        * Scripts/commit-log-editor:

2009-06-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update GtkLauncher to recent API changes in the progress property,
        which now goes from 0.0 to 1.0.

        * GtkLauncher/main.c:

2009-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

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

        Teach prepare-ChangeLog to match the line ends that are already present
        in ChangeLog files.  This helps folks whose use cygwin perl with CR LF
        line endings on Windows.

        Also, teach prepare-ChangeLog to normalize backslashes in paths.  This
        helps folks who use Windows SVN prepare correct ChangeLogs.

        * Scripts/prepare-ChangeLog:

== Rolled over to ChangeLog-2009-06-16 ==
