2008-09-29  David Hyatt  <hyatt@apple.com>

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

        Accidentally removed a check to see if the scrollbar modes were equal.  This caused a crash on Windows.
        It's silly that the code was this fragile, but for now just put the check back in.

        Reviewed by Dan Bernstein

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollbarModes):

2008-09-29  David Hyatt  <hyatt@apple.com>

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

        Make setScrollPosition and scroll() cross-platform.

        Reviewed by Anders

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):
        (WebCore::ScrollView::scroll):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetScrollPosition):
        (WebCore::ScrollView::platformScroll):
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetScrollPosition):
        (WebCore::ScrollView::platformScroll):

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

        Reviewed by Oliver.

        Bug 21139: Profiler log message is wrong
        - Because _format was called twice the number in the log was incremented
        too many times, but we were passing it around in the link the whole time

        * page/inspector/ProfilesPanel.js:
        * page/inspector/inspector.js:

2008-09-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Autogenerate EventListeners, addEventListener and removeEventListener
        for JSDOMWindow.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::onwebkitanimationstart):
        (WebCore::JSDOMWindow::setOnwebkitanimationstart):
        (WebCore::JSDOMWindow::onwebkitanimationiteration):
        (WebCore::JSDOMWindow::setOnwebkitanimationiteration):
        (WebCore::JSDOMWindow::onwebkitanimationend):
        (WebCore::JSDOMWindow::setOnwebkitanimationend):
        (WebCore::JSDOMWindow::onwebkittransitionend):
        (WebCore::JSDOMWindow::setOnwebkittransitionend):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        (WebCore::JSDOMWindow::setListener):
        (WebCore::JSDOMWindow::getListener):
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

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.

        * bindings/js/JSMimeTypeArrayCustom.cpp:
        * bindings/js/JSNavigatorCustom.cpp:
        * bindings/js/JSPluginArrayCustom.cpp:
        * bindings/js/JSPluginCustom.cpp:
        * bindings/js/ScriptControllerMac.mm:
        * bindings/js/ScriptControllerQt.cpp:
        * bridge/qt/qt_class.cpp:
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.cpp:
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        * bridge/qt/qt_runtime.h:
        * bridge/testqtbindings.cpp:
        * css/makegrammar.pl:
        * css/makeprop.pl:
        * css/makevalues.pl:
        * dom/Node.cpp:
        * dom/TagNodeList.cpp:
        * dom/TagNodeList.h:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        * dom/XMLTokenizerLibxml2.cpp:
        * dom/XMLTokenizerQt.cpp:
        * editing/Editor.cpp:
        * editing/EditorCommand.cpp:
        * html/CanvasRenderingContext2D.cpp:
        * html/CanvasStyle.cpp:
        * html/HTMLAppletElement.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLObjectElement.cpp:
        * loader/FrameLoader.cpp:
        * page/Chrome.cpp:
        * page/EditorClient.h:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/Navigator.cpp:
        * page/Navigator.h:
        * page/Navigator.idl:
        * page/mac/FrameMac.mm:
        * page/qt/EventHandlerQt.cpp:
        * platform/graphics/qt/FontCacheQt.cpp:
        * platform/graphics/qt/FontCustomPlatformData.cpp:
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontPlatformData.h:
        * platform/graphics/qt/FontQt.cpp:
        * platform/graphics/qt/GlyphPageTreeNodeQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        * platform/gtk/MIMETypeRegistryGtk.cpp:
        * platform/mac/MIMETypeRegistryMac.mm:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/network/qt/ResourceRequestQt.cpp:
        * platform/qt/ClipboardQt.cpp:
        * platform/qt/EventLoopQt.cpp:
        * platform/qt/KURLQt.cpp:
        * platform/qt/LoggingQt.cpp:
        * platform/qt/MIMETypeRegistryQt.cpp:
        * platform/qt/PasteboardQt.cpp:
        * platform/qt/PlatformScreenQt.cpp:
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/QWebPopup.cpp:
        * platform/qt/QWebPopup.h:
        * platform/qt/RenderThemeQt.cpp:
        * platform/qt/ScrollbarQt.cpp:
        * platform/qt/ScrollbarThemeQt.cpp:
        * platform/qt/WheelEventQt.cpp:
        * platform/qt/html4-adjustments-qt.css:
        * platform/wx/MimeTypeRegistryWx.cpp:
        * plugins/MimeType.cpp:
        * plugins/MimeType.h:
        * plugins/MimeType.idl:
        * plugins/MimeTypeArray.cpp:
        * plugins/MimeTypeArray.h:
        * plugins/MimeTypeArray.idl:
        * plugins/Plugin.cpp:
        * plugins/Plugin.h:
        * plugins/Plugin.idl:
        * plugins/PluginArray.cpp:
        * plugins/PluginArray.h:
        * plugins/PluginArray.idl:
        * plugins/PluginData.cpp:
        * plugins/PluginData.h:
        * plugins/gtk/PluginDataGtk.cpp:
        * plugins/mac/PluginDataMac.mm:
        * plugins/qt/PluginDataQt.cpp:
        * plugins/win/PluginDataWin.cpp:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableCol.h:

2008-09-26  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 5727: We want to evaluate scripts in viewless documents
        https://bugs.webkit.org/show_bug.cgi?id=5727

        Add the posibility to evaluate script or fetch resources on viewless
        document using the EmptyClient workaround.

        Test: fast/loader/viewless-document.html

        * dom/Document.h:
        (WebCore::Document::setFrame): Method to set the Document's
        Frame, added a warning that it should be used under special
        circumstances.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::requestScript): If the
        frame is empty (viewless document), get a dummy Frame to be
        able to evalute the script.
        (WebCore::ScriptElementData::evaluateScript): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init): Take a bool to toogle
        empty Document creation.

        (WebCore::FrameLoader::fakeLoad): Fake remote resource load.

        (WebCore::FrameLoader::createDummyFrame):
        * loader/FrameLoader.h:
        * page/Frame.cpp:
        (WebCore::Frame::isDummyFrame):
        (WebCore::Frame::setIsDummyFrame):
        (WebCore::Frame::setDocument):

        (WebCore::FramePrivate::FramePrivate): Added m_isDummyFrame.
        (WebCore::FramePrivate::~FramePrivate): We have to free the Page if it is a dummyFrame
        (a dummyFrame own its Page).

        * page/Frame.h:
        * page/FramePrivate.h:

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::SVGImage):
        (WebCore::SVGImage::dataChanged): Use the dummy Frame
        work-around.

        * svg/graphics/SVGImage.h: Removed unused members.

2008-09-29  Thiago Macieira  <thiago.macieira@trolltech.com>

        Reviewed by Simon

        Fix compilation with gcc 4.3

         gcc 4.3 is stricter and ctype.h isn't getting included
        automatically here by dependencies. So do it directly.

        * platform/qt/PlatformKeyboardEventQt.cpp:

2008-09-29  Morten Sørvig  <msorvig@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt/Mac without plugins.

        * platform/qt/TemporaryLinkStubs.cpp:

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

        Reviewed by Sam Weinig.

        Apply the ASCII fast path optimization from StringImpl::lower to StringImpl::upper.
        In the few places that we call .upper() in WebCore the strings represent things like
        tag and attribute names, which are nearly always going to be ASCII.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::lower): If we have to resize the buffer, be sure to pass the new length
        in to Unicode::toLower the second time.
        (WebCore::StringImpl::upper):

2008-09-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Speed up getPropertyValue('clip') by 25% by using a Vector<UChar> for building a string,
        rather than String::operator+=.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):

2008-09-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Speed up computedStyle.getPropertyValue('color') by 4.5x.

        Using a Vector<UChar> while building up the property's cssText is substantially cheaper than using String::operator+=
        as it avoids many memory reallocations.

        This also speeds up the jQuery .offset() benchmark at <http://dev.jquery.com/~john/speed/1.2.6/offset-1.2.6.html>
        by 20% due to jQuery's strange need to call getPropertyValue('color') when retrieving the computed styles for
        unrelated properties on an element.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText): Build the result for the color types into a Vector<UChar>
        and use appendNumber rather than the String::number in order to cut down on memory allocations.
        * platform/text/PlatformString.h:
        (WebCore::appendNumber): A helper function for formatting an unsigned character as a number
        into a Vector<UChar>.

2008-09-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove spurious call to lower().

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator):

2008-09-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Use a CaseFoldingHash instead of calling lower on family strings.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontData):
        * css/CSSFontSelector.h:

2008-09-28  Timothy Hatcher  <timothy@apple.com>

        Remove the scrollIntoViewIfNeeded() call when drawing the
        Inspector node highlight.

        <rdar://problem/6115804> Don't scroll when highlighting (21000)
        https://bugs.webkit.org/show_bug.cgi?id=21000

        Reviewed by Dan Bernstein.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight):

2008-09-28  David Hyatt  <hyatt@apple.com>

        Fix crash when WebKit has no instantiated Scrollbars and the appearance prefs for scrollbars are
        changed.

        Reviewed by Dan Bernstein

        * platform/mac/ScrollbarThemeMac.mm:
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]):

2008-09-28  Timothy Hatcher  <timothy@apple.com>

        Clear the current search results in the Inspector when
        the search query is less than 3 characters long. Incremental
        searches only occur for 3 characters or longer, but deleting
        under this limit would not clear the results unless the whole
        query was deleted.

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

        Reviewed by Dan Bernstein.

        * page/inspector/inspector.js:
        (WebInspector.performSearch): Check for short queries in the
        if statement that triggers the clear.

2008-09-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6202962> "Tibetan Machine Uni" font does not work as a web font on Windows because TTLoadEmbeddedFont fails with E_NAMECHANGEFAILED

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::EOTStream::EOTStream): Added overlayDst, overlaySrc and
        overlayLength parameters.
        (WebCore::EOTStream::read): Added code to overlay the
        m_overlayLength bytes starting at m_overlayDst with the same number of
        bytes from m_overlaySrc.
        (WebCore::createFontCustomPlatformData): Changed to get overlay
        parameters from getEOTHeader.
        * platform/graphics/win/GetEOTHeader.cpp:
        (WebCore::getEOTHeader): Added code to specify overlaying of the
        family name with the prefix of the full name if they differ, because
        that such a difference causes TTLoadEmbeddedFont to fail.
        * platform/graphics/win/GetEOTHeader.h:

2008-09-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20366
        Reproducible test failure for editing/undo/undo-iframe-location-change.html

        * ChangeLog-2006-05-10: Added bug URLs for a fix that included this test.

2008-09-28  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig (except for a few comment and header tweaks).

        - https://bugs.webkit.org/show_bug.cgi?id=21158
          reduce use of virtual functions in Node for speed

        Speeds up Dromaeo a bit less than 1%.

        * bindings/js/JSNamedNodesCollection.cpp: Include Element.h instead of
        Node.h now that some inlines are in there.

        * dom/Attr.h: Override both the virtual and non-virtual name functions.

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::nodeMatches): Updated to take an Element.
        * dom/ChildNodeList.h: Ditto.
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::nodeMatches): Ditto.
        * dom/ClassNodeList.h: Ditto.

        * dom/Document.h: Put the Node::isDocumentNode() function's inline
        definition here where it can see the Document class definition.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::length): Changed to pass an Element.
        (WebCore::DynamicNodeList::itemForwardsFromCurrent): Ditto.
        (WebCore::DynamicNodeList::itemBackwardsFromCurrent): Ditto.
        (WebCore::DynamicNodeList::itemWithName): Ditto.
        * dom/DynamicNodeList.h: Ditto.

        * dom/Element.cpp: Removed virtualHasTagName.
        * dom/Element.h: Made localName, prefix, namespaceURI, and
        styleForRenderer non-virtual. Added virtualPrefix, virtualLocalName,
        virtualNamespaceURI, and removed virtualHasTagName. Put the
        Node::hasTagName, Node::hasAttributes, and Node::attributes
        functions' inline definitions here where they can see the Element
        class definition.

        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::nodeMatches): Updated to take an Element.
        * dom/NameNodeList.h: Ditto.

        * dom/Node.cpp:
        (WebCore::Node::virtualPrefix): Renamed from prefix.
        (WebCore::Node::virtualLocalName): Renamed from localName.
        (WebCore::Node::virtualNamespaceURI): Renamed from namespaceURI.
        (WebCore::Node::styleForRenderer): Handle the Element case here.

        * dom/Node.h: Removed definition of hasTagName that calls virtual,
        since we now have a non-virtual version. Made hasAttributes,
        attributes, remove, localName, namespaceURI, prefix, isDocumentNode,
        and styleForRenderer non-virtual. Added virtualPrefix,
        virtualLocalName, and virtualNamespaceURI. Removed isMalformed
        and setMalformed, which are used only on HTMLFormElement objects.

        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::nodeMatches): Updated to take an Element.
        * dom/TagNodeList.h: Ditto.

        * html/HTMLAnchorElement.cpp: Added a comment.
        * html/HTMLFormControlElement.cpp: Ditto.

        * html/HTMLAnchorElement.h: Removed unused, unimplemented setTabIndex
        function. Marked tabIndex function virtual explicitly for clarity.

        * html/HTMLAreaElement.h: Removed unused, unimplemented setTabIndex
        function. Marked isFocusable function virtual explicitly for clarity.

        * html/HTMLElement.h: Marked tabIndex function virtual explicitly for
        clarity.
        * html/HTMLFormControlElement.h: Ditto.

        * html/HTMLFormElement.h: Made isMalformed non-virtual.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Use the already-cast-to-HTMLElement
        pointer to call localName since that one does not need to call a virtual
        function.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Cast to HTMLFormElement before
        calling isMalformed. We already did a tag name check so we know it's
        an HTMLFormELement.

        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode): Rewrote to not make so many calls
        to nodeType(), since it's a virtual function.

2008-09-28  David Hyatt  <hyatt@apple.com>

        Make frameRectsChanged() cross-platform on ScrollView.

        Reviewed by Oliver Hunt

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::frameRectsChanged):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-09-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21141: REGRESSION: Exception messages for user entered commands are poor
        <https://bugs.webkit.org/show_bug.cgi?id=21141>

        The bug repsonsible for this was the the JSInspectedObjectWrapper instances
        were not initialising their StructureID's to indicate that the wrapper
        overrides hasInstance, etc.  The solution is simply to use the createStructureID
        helper on JSQuarantinedObjectWrapper to create a correct StructureID.

        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):

2008-09-28  David Hyatt  <hyatt@apple.com>

        Make sure pixel wheel scrolls (formerly "continuous" wheel events) send deltas to DOM wheel events in
        terms of lines.

        Reviewed by Oliver Hunt

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchWheelEvent):

2008-09-28  David Hyatt  <hyatt@apple.com>

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

        Rework mouse wheeling significantly to make the platform event less messy and to enable wheelEvent
        on ScrollView to be cross-platform.

        Give the wheel event a concept of granularity (pixel, line or page).  What used to be called continuous
        events are now pixel wheel events.

        Page scrolling as implemented in bug 17589 was completely broken.  It had the following problems:
        (1) Page scrolling has been corrected to be properly detected (on Windows
        page wheeling is only done in the vertical direction and it is keyed off a special return value of -1).  The
        old code had some bizarre incorrect heuristic for "guessing" that you should page scroll and also thought
        you could page scroll horizontally.
        (2) Page scrolling a layer used the enclosing ScrollView's width/height instead of the layer's width/height.
        This caused the scroll amount for page scrolling to be way too large on layers.

        Bug 17589 got the default horizontal scrolling value wrong.  It assumed 1, when the Vista default is 3.

        Incorporate WebCore's line multiplier right into the deltas of the event.  This eliminates the need
        for separate multiplier fields (or for the need to ask if you're looking for line sensitivity).

        Reviewed by Oliver Hunt

        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent):
        (WebCore::EventHandler::handleWheelEvent):
        * platform/PlatformWheelEvent.h:
        (WebCore::):
        (WebCore::PlatformWheelEvent::pos):
        (WebCore::PlatformWheelEvent::globalPos):
        (WebCore::PlatformWheelEvent::deltaX):
        (WebCore::PlatformWheelEvent::deltaY):
        (WebCore::PlatformWheelEvent::granularity):
        (WebCore::PlatformWheelEvent::x):
        (WebCore::PlatformWheelEvent::globalX):
        (WebCore::PlatformWheelEvent::ignore):
        (WebCore::PlatformWheelEvent::horizontalLineMultiplier):
        (WebCore::PlatformWheelEvent::verticalLineMultiplier):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/Scrollbar.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/mac/ScrollViewMac.mm:
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/qt/WheelEventQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::horizontalLineMultiplier):
        (WebCore::PlatformWheelEvent::verticalLineMultiplier):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::OnScrollWinEvents):
        (WebCore::ScrollView::wheelEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2008-09-27  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig.

        fix https://bugs.webkit.org/show_bug.cgi?id=20994
        <rdar://problem/6171023> HTMLVideoElement width and height attributes are now unsigned
        
        HTML5 spec says HTMLVideoElement width and height attributes should be unsigned. Convert
        all unsigned media attributes from string with toUInt() instead of toInt().
        
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playCount): convert from attribute with toUInt().

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::videoWidth):
        (WebCore::HTMLVideoElement::videoHeight): return unsigned to match idl.
        (WebCore::HTMLVideoElement::width): convert from attribute with toUInt() and return
          unsigned value.
        (WebCore::HTMLVideoElement::height): Ditto.
        (WebCore::HTMLVideoElement::setWidth): take unsigned value.
        (WebCore::HTMLVideoElement::setHeight): Ditto.

        * html/HTMLVideoElement.h: width, height, videoWidth, and videoHeight are unsigned.

        * html/HTMLVideoElement.idl: make width and height unsigned to match HTML5 spec.

2008-09-27  Timothy Hatcher  <timothy@apple.com>

        Fixes an exception when typing a command in the Console.

        Reviewed by Oliver Hunt.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype.addMessage): Null check
        this.previosMessage.

2008-09-27  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where the Profiles panel sidebar would be empty
        after closing and reopening the Web Inspector.

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

        Reviewed by Sam Weinig.

        * page/inspector/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.reset): Don't call
        populateInterface, it is called automatically.
        (WebInspector.ProfilesPanel.prototype._populateProfiles):
        Return early if the sidebar is already populated.

2008-09-27  Dave Hyatt  <hyatt@apple.com>

        Bug 21190.  The line scroll amount on Windows is way too small.  A patch for bug 17589 for wheel sensitivity
        incorrectly applied the tinier wheel step delta (unmultiplied) to line scrolling.  Line scrolling with the
        scrollbar has nothing to do with mouse wheeling.  This patch reverts the scrollbars to use the same line
        step as other platforms while leaving the wheel delta alone for use with wheel scrolling.

        There was a lot wrong with 17589, so more patches will be coming to deal with the fallout of this patch
        (which should never have landed in the first place).
       
        Reviewed by Tim Hatcher, Sam Weinig

        * platform/win/ScrollViewWin.cpp:
        (WebCore::adjustDeltaForPageScrollMode):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):

2008-09-27  David Hyatt  <hyatt@apple.com>

        Make the scrollbarUnderMouse method cross-platform.

        Reviewed by Sam Weinig

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-09-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Gtk+ build fix.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):

2008-09-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=20287
        [Gtk] disable plugins for gtk/directfb target

        Introduce WTF_PLATFORM_X11 for X11 builds.
        Also use target-specific packages when building the port

        * platform/gtk/PlatformScreenGtk.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::init):

2008-09-27  David Hyatt  <hyatt@apple.com>

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

        Make scrollbar suppression and resizer avoidance cross-platform.

        Reviewed by Anders

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::clear):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::restoreScrollbar):
        (WebCore::FrameView::windowResizerRect):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::init):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustScrollbarsAvoidingResizerCount):
        (WebCore::ScrollView::setParent):
        (WebCore::ScrollView::setScrollbarsSuppressed):
        (WebCore::ScrollView::platformSetScrollbarsSuppressed):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollbarsSuppressed):
        (WebCore::ScrollView::windowResizerRect):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setFrameRect):
        (WebCore::Scrollbar::setParent):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::adjustmentChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::platformSetScrollbarsSuppressed):
        (WebCore::ScrollView::setScrollPosition):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::frameRectsChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):

2008-09-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Anders Carlsson.

        Compile fix.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2008-09-27  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=21184>.
        Bug 21184: REGRESSION: Reproducible crash below StringImpl::hash while running editing/deleting/5408255.html

        Remove an assertion that was incorrect and that if made correct would have duplicated a check that occurred earlier in the function.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource):

2008-09-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qt] Use QImageReader to figure out which image formats are supported
        - Qt can have many different plugins for different image formats. Instead
        of checking only for a few in WebCore use Qt to determine if this data
        can be treated as an image.

        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::canHandleImage):
        (WebCore::createDecoder):

2008-09-27  Holger Hans Peter Freyther  <zecke@selfish.org>


        [qt] Clean the pattern code
        - Use save/restore on the painter after manipulating the
        pen/brush
        - Make the context and object null checking consistent. CG is using
        the object unconditionally so the Qt webkit platform can do the
        same.
        - Move code below the early exit. Only use the m_ownerElement before
        the early exit as the CG code is doing it.

        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/qt/SVGPaintServerPatternQt.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::teardown):

2008-09-27  Keishi Hattori  <casey.hattori@gmail.com>

        Added support for console.trace.

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

        Reviewed by Kevin McCullough and Tim Hatcher.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::trace):
        * page/Console.cpp:
        (WebCore::Console::trace): Calls Machine::retrieveCaller to
        get a stack trace.
        * page/Console.h:
        (WebCore::): Added TraceMessageLevel.
        * page/Console.idl: Added console.trace.
        * page/inspector/Console.js:
        (ConsoleMessage): Added case for TraceMessageLevel.

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

        Reviewed by Sam Weinig.

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

        Check if the plug-in is allowed to load the resource. This matches Firefox.

        Test: http/tests/plugins/local-geturl-from-remote.html

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2008-09-22  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Added SVG pattern support to Qt.

        [Qt] SVG patterns are missing
        https://bugs.webkit.org/show_bug.cgi?id=20973

        * svg/graphics/qt/SVGPaintServerPatternQt.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2008-09-27  Keishi Hattori  <casey.hattori@gmail.com>

        Fixed a bug in the JS syntax highlighter with multiple line tokens.

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

        Reviewed by Tim Hatcher.

        * page/inspector/SourceFrame.js:
        (syntaxHighlightJavascriptLine): Initialize previousMatchLength.

2008-09-27  Timothy Hatcher  <timothy@apple.com>

        Change searching in the Profiles panel to not match the
        Self and Total columns when there are no units. The only
        column that is matched for unitless number searches is
        now the Calls column.

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

        Reviewed by Sam Weinig.

        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView.prototype.performSearch):

2008-09-27  David Hyatt  <hyatt@apple.com>

        Rename boundsGeometry -> boundsRect.  Rename geometryChanged -> frameRectsChanged.

        Reviewed by Sam Weinig

        * platform/ScrollView.h:
        * platform/Widget.h:
        (WebCore::Widget::boundsRect):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::frameRectsChanged):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollViewScrollbar::frameRectsChanged):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::frameRectsChanged):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::setFrameRect):
        (ScrollbarGtk::frameRectsChanged):
        * platform/gtk/ScrollbarGtk.h:
        * platform/gtk/WidgetGtk.cpp:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::frameRectsChanged):
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::frameRectsChanged):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::frameRectsChanged):
        * plugins/PluginView.h:

2008-09-27  Simon Hausmann  <hausmann@webkit.org>

        Refix the previous build fix to compile on non-Qt platforms, too.

        * WebCore.pro: Don't pass -i to create_hashtable, added missing -n
        WebCore to generate the PrototypeTable in the WebCore namespace
        * bindings/js/JSEventTargetBase.h: Revert previous fix, the Prototype
        table remains in the Webcore namespace
        (WebCore::JSEventTargetBasePrototype::getOwnPropertySlot):

2008-09-27  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation with gcc 4.3 (probably > 4.0)

        * bindings/js/JSDOMWindowBase.cpp: Don't define static property
        get/put functions inside the WebCore namespace.
        * bindings/js/JSEventTargetBase.cpp: Ditto.
        * bindings/js/JSEventTargetNode.cpp: Ditto.
        * bindings/js/JSEventTargetSVGElementInstance.cpp: Ditto.
        * bindings/js/JSEventTargetBase.h: Forward declare
        JSEventTargetPrototypeTable in the JSC namespace as the lut.h file
        defines it in the JSC namespace.
        (WebCore::JSEventTargetBasePrototype::getOwnPropertySlot): Add JSC::
        prefix for PrototypeTable symbol.

2008-09-27  David Hyatt  <hyatt@apple.com>

        Rename frameGeometry to frameRect.  Rename setFrameGeometry to setFrameRect.

        Reviewed by Dan Bernstein

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::updateControlTints):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::paint):
        (WebCore::Scrollbar::setFrameRect):
        * platform/Scrollbar.h:
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/Widget.h:
        (WebCore::Widget::x):
        (WebCore::Widget::y):
        (WebCore::Widget::width):
        (WebCore::Widget::height):
        (WebCore::Widget::size):
        (WebCore::Widget::pos):
        (WebCore::Widget::resize):
        (WebCore::Widget::move):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollViewScrollbar::geometryChanged):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::setFrameRect):
        (ScrollbarGtk::geometryChanged):
        * platform/gtk/ScrollbarGtk.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::trackRect):
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::invalidateItem):
        (WebCore::PopupMenu::valueChanged):
        (WebCore::PopupWndProc):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::trackRect):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::init):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintMissingPluginIcon):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::init):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::positionOverflowControls):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintScrollbar):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::updateWidgetPosition):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetPosition):

2008-09-27  David Hyatt  <hyatt@apple.com>

        <rdar://problem/6252041> REGRESSION (4dp-TOT): Crash in Widget::platformWidget() when closing a PDF

        This crash was lurking for a while and basically got exposed by my changes to visibleContentRect() to
        access an actual member variable.

        Reviewed by Dan Bernstein

        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedFrame):

2008-09-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Attempt to fix QT Build. Not reviewed.

        * WebCore.pro: add -n WebCore parameter to create_hash_table

2008-09-26  Gwenole Beauchesne  <gbeauchesne@splitted-desktop.org>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=18905
        [GTK] Fix build with older pango (1.14.8)

        * platform/graphics/gtk/FontGtk.cpp:
        * platform/gtk/Language.cpp:
        (_pango_get_lc_ctype):
        (pango_language_get_default):

2008-09-26  David Hyatt  <hyatt@apple.com>

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

        Make contentsToWindow/windowToContents cross-platform.

        Reviewed by Oliver Hunt

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-09-26  Sam Weinig  <sam@webkit.org>

        GTK build fix.

        * GNUmakefile.am:

2008-09-26  David Hyatt  <hyatt@apple.com>

        Eliminate shouldUpdateWhileOffscreen from ScrollView.  Make the concept of not invalidating while
        offscreen cross-platform.  Rename the inWindow method to isOffscreen (which flips the boolean), since that
        more clearly conveys the intent of the method.  Make isOffscreen also check NSWindow visibility on Mac.

        Reviewed by Oliver Hunt

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::isOffscreen):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::isOffscreen):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::isOffscreen):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::isOffscreen):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::isOffscreen):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willRenderImage):

2008-09-26  David Hyatt  <hyatt@apple.com>

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

        Rework concept of allowsScrolling/setAllowsScrolling to be cross-platform.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::setAllowsScrolling):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setAllowsScrolling):
        * platform/ScrollView.h:
        (WebCore::ScrollView::allowsScrolling):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::wheelEvent):

2008-09-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after Widget/ScrollView changes.

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::show):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetContentsSize):
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::wheelEvent):
        * platform/wx/TemporaryLinkStubs.cpp:
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::containingWindow):

2008-09-26  Timothy Hatcher  <timothy@apple.com>

        Allow searching for paths by always performing the
        three search methods in the Elements panel and not
        assume a search with a "/" is a XPath query.

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

        Reviewed by Geoff Garen.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.performSearch):

2008-09-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=21152
        Speedup static property get/put

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::getDOMConstructor):
        (WebCore::jsDOMWindowBaseCrypto):
        (WebCore::jsDOMWindowBaseEvent):
        (WebCore::jsDOMWindowBaseImage):
        (WebCore::jsDOMWindowBaseMessageChannel):
        (WebCore::jsDOMWindowBaseOption):
        (WebCore::jsDOMWindowBaseXMLHttpRequest):
        (WebCore::jsDOMWindowBaseAudio):
        (WebCore::jsDOMWindowBaseXSLTProcessor):
        (WebCore::jsDOMWindowBaseOnabort):
        (WebCore::jsDOMWindowBaseOnblur):
        (WebCore::jsDOMWindowBaseOnchange):
        (WebCore::jsDOMWindowBaseOnclick):
        (WebCore::jsDOMWindowBaseOndblclick):
        (WebCore::jsDOMWindowBaseOnerror):
        (WebCore::jsDOMWindowBaseOnfocus):
        (WebCore::jsDOMWindowBaseOnkeydown):
        (WebCore::jsDOMWindowBaseOnkeypress):
        (WebCore::jsDOMWindowBaseOnkeyup):
        (WebCore::jsDOMWindowBaseOnload):
        (WebCore::jsDOMWindowBaseOnmousedown):
        (WebCore::jsDOMWindowBaseOnmousemove):
        (WebCore::jsDOMWindowBaseOnmouseout):
        (WebCore::jsDOMWindowBaseOnmouseover):
        (WebCore::jsDOMWindowBaseOnmouseup):
        (WebCore::jsDOMWindowBaseOnMouseWheel):
        (WebCore::jsDOMWindowBaseOnreset):
        (WebCore::jsDOMWindowBaseOnresize):
        (WebCore::jsDOMWindowBaseOnscroll):
        (WebCore::jsDOMWindowBaseOnsearch):
        (WebCore::jsDOMWindowBaseOnselect):
        (WebCore::jsDOMWindowBaseOnsubmit):
        (WebCore::jsDOMWindowBaseOnbeforeunload):
        (WebCore::jsDOMWindowBaseOnunload):
        (WebCore::jsDOMWindowBaseOnWebKitAnimationStart):
        (WebCore::jsDOMWindowBaseOnWebKitAnimationIteration):
        (WebCore::jsDOMWindowBaseOnWebKitAnimationEnd):
        (WebCore::jsDOMWindowBaseOnWebKitTransitionEnd):
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):
        (WebCore::JSDOMWindowBase::put):
        (WebCore::setJSDOMWindowBaseOnabort):
        (WebCore::setJSDOMWindowBaseOnblur):
        (WebCore::setJSDOMWindowBaseOnchange):
        (WebCore::setJSDOMWindowBaseOnclick):
        (WebCore::setJSDOMWindowBaseOndblclick):
        (WebCore::setJSDOMWindowBaseOnerror):
        (WebCore::setJSDOMWindowBaseOnfocus):
        (WebCore::setJSDOMWindowBaseOnkeydown):
        (WebCore::setJSDOMWindowBaseOnkeypress):
        (WebCore::setJSDOMWindowBaseOnkeyup):
        (WebCore::setJSDOMWindowBaseOnload):
        (WebCore::setJSDOMWindowBaseOnmousedown):
        (WebCore::setJSDOMWindowBaseOnmousemove):
        (WebCore::setJSDOMWindowBaseOnmouseout):
        (WebCore::setJSDOMWindowBaseOnmouseover):
        (WebCore::setJSDOMWindowBaseOnmouseup):
        (WebCore::setJSDOMWindowBaseOnMouseWheel):
        (WebCore::setJSDOMWindowBaseOnreset):
        (WebCore::setJSDOMWindowBaseOnresize):
        (WebCore::setJSDOMWindowBaseOnscroll):
        (WebCore::setJSDOMWindowBaseOnsearch):
        (WebCore::setJSDOMWindowBaseOnselect):
        (WebCore::setJSDOMWindowBaseOnsubmit):
        (WebCore::setJSDOMWindowBaseOnbeforeunload):
        (WebCore::setJSDOMWindowBaseOnunload):
        (WebCore::setJSDOMWindowBaseOnWebKitAnimationStart):
        (WebCore::setJSDOMWindowBaseOnWebKitAnimationIteration):
        (WebCore::setJSDOMWindowBaseOnWebKitAnimationEnd):
        (WebCore::setJSDOMWindowBaseOnWebKitTransitionEnd):
        (WebCore::setJSDOMWindowBaseEvent):
        (WebCore::setJSDOMWindowBaseAudio):
        (WebCore::setJSDOMWindowBaseImage):
        (WebCore::setJSDOMWindowBaseMessageChannel):
        (WebCore::setJSDOMWindowBaseOption):
        (WebCore::setJSDOMWindowBaseXMLHttpRequest):
        (WebCore::setJSDOMWindowBaseXSLTProcessor):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticCloseFunctionGetter):
        (WebCore::nonCachingStaticBlurFunctionGetter):
        (WebCore::nonCachingStaticFocusFunctionGetter):
        (WebCore::nonCachingStaticPostMessageFunctionGetter):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSEventTargetBase.cpp:
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetBasePrototype::getOwnPropertySlot):
        (WebCore::JSEventTargetBasePrototype::classInfo):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::):
        (WebCore::JSEventTargetNode::getOwnPropertySlot):
        (WebCore::JSEventTargetNode::put):
        * bindings/js/JSEventTargetNode.h:
        (WebCore::JSEventTargetNode::classInfo):
        (WebCore::JSEventTargetNode::prototypeClassName):
        * bindings/js/JSEventTargetSVGElementInstance.cpp:
        (WebCore::):
        (WebCore::JSEventTargetSVGElementInstance::getOwnPropertySlot):
        (WebCore::JSEventTargetSVGElementInstance::put):
        * bindings/js/JSEventTargetSVGElementInstance.h:
        (WebCore::JSEventTargetSVGElementInstance::classInfo):
        (WebCore::JSEventTargetSVGElementInstance::prototypeClassName):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::customGetOwnPropertySlot):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        (WebCore::JSHistory::customGetOwnPropertySlot):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        (WebCore::JSLocation::customGetOwnPropertySlot):
        (WebCore::JSLocation::customPut):
        * bindings/scripts/CodeGeneratorJS.pm:

2008-09-26  David Hyatt  <hyatt@apple.com>

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

        Make the concept of scroll modes cross-platform.  Move the scrollbars up into ScrollView as well.
        Eliminate the unused isScrollable() method.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::initScrollbars):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * page/mac/WebCoreFrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::init):
        (WebCore::ScrollView::setScrollbarModes):
        (WebCore::ScrollView::scrollbarModes):
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::platformScrollbarModes):
        * platform/ScrollView.h:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        (WebCore::ScrollView::isScrollViewScrollbar):
        (WebCore::ScrollView::setHorizontalScrollbarMode):
        (WebCore::ScrollView::setVerticalScrollbarMode):
        (WebCore::ScrollView::horizontalScrollbarMode):
        (WebCore::ScrollView::verticalScrollbarMode):
        (WebCore::ScrollView::convertSelfToChild):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::isScrollViewScrollbar):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::scroll):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::platformScrollbarModes):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        (WebCore::ScrollView::invalidateScrollbars):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::scroll):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::setAllowsScrolling):
        (WebCore::ScrollView::ScrollViewPrivate::allowsScrolling):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::scroll):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::platformScrollbarModes):

2008-09-26  David Kilzer  <ddkilzer@apple.com>

        Fix Mac build with XPATH and XSLT disabled

        Reviewed by Alexey.

        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper): Conditionalize code with ENABLE(XPATH).
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::errorFunc): Conditionalize method with ENABLE(XSLT) to
        prevent an unused code warning.

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

        Rubber stamped by Tim Hatcher.

        Bug 21098: Crashing under Console::log
        - Speculative ASSERT to help find the problem.

        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::isEqual):

2008-09-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        [gtk+] Build fix for the latest ScrollView changes

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::adjustmentChanged):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):

2008-09-26  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where the console message repeat count would be wrong
        when typing commands in between repeated messages.

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

        Reviewed by Kevin McCullough.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::clearConsoleMessages): Reset m_groupLevel.
        (WebCore::InspectorController::didCommitLoad): Call clearConsoleMessages.
        * page/inspector/Console.js:
        (WebInspector.Console.prototype.addMessage): Remember the original repeat count
        for each message as totalRepeatCount, since we now modify repeatCount to mean
        repeats since previous console command. If repeatCountBeforeCommand is a number,
        subtract that value from the repeatCount.
        (WebInspector.Console.prototype.clearMessages): Delete the repeatCountBeforeCommand
        and commandSincePreviousMessage properties.

2008-09-26  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti

        https://bugs.webkit.org/show_bug.cgi?id=21116
        <rdar://problem/5726325> Audio from <video> can still be heard after navigating 
        back to page with <video>, then closing tab

        Rename willSaveToCache/didRestoreFromCache callbacks to documentWillBecomeInactive/
        documentDidBecomeActive, and post documentWillBecomeInactive when a page is marked for
        deletion.

        * dom/Document.cpp:
        (WebCore::Document::documentWillBecomeInactive):
        (WebCore::Document::documentDidBecomeActive):
        (WebCore::Document::registerForDocumentActivationCallbacks):
        (WebCore::Document::unregisterForDocumentActivationCallbacks):
        * dom/Document.h:
        * dom/Element.h:
        (WebCore::Element::documentWillBecomeInactive):
        (WebCore::Element::documentDidBecomeActive):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        (WebCore::HTMLFormElement::documentDidBecomeActive):
        (WebCore::HTMLFormElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLFormElement::didMoveToNewOwnerDocument):
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::needsActivationCallback):
        (WebCore::HTMLInputElement::registerForActivationCallbackIfNeeded):
        (WebCore::HTMLInputElement::unregisterForActivationCallbackIfNeeded):
        (WebCore::HTMLInputElement::documentDidBecomeActive):
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLInputElement::didMoveToNewOwnerDocument):
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::documentWillBecomeInactive):
        (WebCore::HTMLMediaElement::documentDidBecomeActive):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::inActiveDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::opened):
        * page/Page.cpp:
        (WebCore::Page::~Page):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::~SVGSVGElement):
        (WebCore::SVGSVGElement::documentWillBecomeInactive):
        (WebCore::SVGSVGElement::documentDidBecomeActive):
        * svg/SVGSVGElement.h:

2008-09-26  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon

        Fix the build inside Qt, don't create faulty prl files for now.

        * WebCore.pro:

2008-09-26  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation on Qt/Windows

        * Add WebCore/ to the include path so that config.h is found that enables JSC
        * Link against winmm for the multimedia timer functions
        * Include DateMath.h instead of JavaScriptCore/DateMath.h as file is in the kjs/
        subdirectory
        * In PluginViewWin.cpp don't use setPlatformWidget with the HWND for the Qt/Windows port
        but set m_window directly as setPlatformWidget takes a QWidget*.

        * WebCore.pro:
        * platform/win/SystemTimeWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::init):

2008-09-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21054: Construction of certain DOM objects is heavily regressed by r36675
        <https://bugs.webkit.org/show_bug.cgi?id=21054>

        This performance regression is actually just a symptom of a correctness
        bug.  The constructor objects for a number of properties that have security
        checks on access were returning new objects each time.  The most obvious
        symptom of this bug is that window.Image != window.Image, etc.

        The solution to this is to make sure we cache these constructors
        in the same way as all the other DOM constructors.  To achieve this
        without causing any refcount cycles it is necessary to replace the
        refcounted document pointer in the Image, MessageChannel, Option, 
        XMLHttpRequest, and Audio constructor objects with a reference to 
        the document's JS wrapper.

        Tests: fast/dom/constructors-cached-navigate.html
               fast/dom/constructors-cached.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::mark):
        * bindings/js/JSAudioConstructor.h:
        (WebCore::JSAudioConstructor::document):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::getDOMConstructor):
        (WebCore::JSDOMWindowBase::getValueProperty):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::mark):
        * bindings/js/JSHTMLOptionElementConstructor.h:
        (WebCore::JSHTMLOptionElementConstructor::document):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::mark):
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::document):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::mark):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        (WebCore::JSXMLHttpRequestConstructor::document):

2008-09-26  Simon Hausmann  <hausmann@webkit.org>

        Unreviewed one-liner build fix for the Qt/Windows build.

        The build requires NPAPI support to be enabled, fix the condition in
        the .pro file for that.

        * WebCore.pro:

2008-09-26  Trenton Schulz <twschulz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with the Qt/Cocoa port.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):

2008-09-26  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix compilation with VC9SP1, work around bug in TR1 library by
        disabling it.

        * WebCore.pro:

2008-09-26  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix an lupdate() warning.

        Don't use tr() in a class that is not a QObject, use
        QCoreApplication::translate() directly.

        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::handleContextMenuEvent):

2008-09-25  David Hyatt  <hyatt@apple.com>

        Remove the scrollTo() method from FrameView, since it is not used by anyone.

        Reviewed by Oliver Hunt

        * page/FrameView.cpp:
        * page/FrameView.h:

2008-09-25  David Hyatt  <hyatt@apple.com>

        Make scrollRectIntoViewRecursively cross-platform.

        Reviewed by Oliver Hunt

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-09-25  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21133
        
        Rename resizeContents method on ScrollView to setContentsSize (to match contentsSize()).  Make it
        cross-platform.

        Reviewed by Oliver Hunt

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setContentsSize):
        * platform/ScrollView.h:
        (WebCore::ScrollView::updateScrollbars):
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetContentsSize):
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetContentsSize):

2008-09-25  David Hyatt  <hyatt@apple.com>

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

        Clean up the methods that actually do the scrolling in ScrollView.

        Reviewed by Oliver Hunt

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::setScrollTop):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::restoreScrollPositionAndViewState):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::imageClicked):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollBy):
        (WebCore::DOMWindow::scrollTo):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::setScrollPosition):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::maximumScrollPosition):
        * platform/ScrollView.h:
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::scrollBy):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setScrollPosition):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::setScrollPosition):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setScrollPosition):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setScrollPosition):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::setScrollPosition):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):
        (WebCore::RenderLayer::scrollRectToVisible):

2008-09-25  Dan Bernstein  <mitz@apple.com>

        - attempted Windows build fix

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::setContentsPos):
        (WebCore::ScrollView::paint):

2008-09-25  Timothy Hatcher  <timothy@apple.com>

        Revert the padding changes done in r36905 to prevent the
        scrollbar from overlapping the URLs in the Console.

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

        * page/inspector/inspector.css:

2008-09-25  David Hyatt  <hyatt@apple.com>

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

        Refactor contents size and scroll offset to be cross-platform.  Reduce further the number
        of platform-specific methods required of ScrollView implementations.

        Reviewed by Tim Hatcher

        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsX):
        (WebCore::contentsY):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::windowClipRect):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::contentsSize):
        (WebCore::ScrollView::platformContentsSize):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollPosition):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::scrollX):
        (WebCore::ScrollView::scrollY):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::adjustmentChanged):
        (WebCore::ScrollView::setGtkAdjustments):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::updateScrollbars):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformContentsSize):
        (WebCore::ScrollView::scrollBy):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertToContainingWindow):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::setAllowsScrolling):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::updateScrollbars):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformVisibleContentRect):
        (WebCore::ScrollView::platformContentsSize):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absolutePosition):
        (WebCore::RenderView::computeAbsoluteRepaintRect):

2008-09-25  David Smith  <catfish.man@gmail.com>

        Reviewed by Dave Hyatt.

        Fix a nasty regression I introduced in the previous commit, which caused infinite recursion on facebook.

        * dom/Element.cpp:
        (WebCore::Element::rareData):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::rareData):
        * dom/Node.h:

2008-09-25  David Smith  <catfish.man@gmail.com>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=20980
        Split off uncommonly used data from Node similar to ElementRareData
        
        Saves an OwnPtr and a short on Node, as well as providing room for an isContainer bit,
        which in turn allows inlining firstChild(), lastChild(), childNodeCount(), and childNode()
        for a 5-10+% performance win on SlickSpeed and assorted speedups on other tests.

        * WebCore.base.exp: 
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ChildNodeList.cpp: Include ContainerNode to pick up its definitions for childNodeCount(), etc...
        * dom/ContainerNode.cpp: Set isContainer to true
        (WebCore::ContainerNode::ContainerNode):
        * dom/ContainerNode.h: These Node inlines are here to avoid including ContainerNode.h in Node.h
        (WebCore::Node::containerChildNodeCount): Use ContainerNode's definition, having proved that the Node is a container
        (WebCore::Node::containerChildNode): ditto
        (WebCore::Node::containerFirstChild): ditto
        (WebCore::Node::containerLastChild): ditto
        * dom/Element.cpp: Most of the changes here are moving ElementRareData to ElementRareData.h and NodeRareData.h
        (WebCore::Element::Element): 
        (WebCore::Element::~Element):
        (WebCore::Element::rareData):
        (WebCore::Element::ensureRareData): Renamed from createRareData
        (WebCore::Element::createRareData): Used by ensureRareData to get the correct rareData type
        (WebCore::Element::attach): Check hasRareData rather than null-checking rareData()
        (WebCore::Element::detach): ditto
        (WebCore::Element::recalcStyle): ditto
        (WebCore::Element::focus):
        (WebCore::Element::minimumSizeForResizing): ditto
        (WebCore::Element::setMinimumSizeForResizing): ditto
        (WebCore::Element::computedStyle):
        (WebCore::Element::cancelFocusAppearanceUpdate): ditto
        * dom/Element.h:
        * dom/ElementRareData.h: Added; everything copied from Element.cpp
        (WebCore::defaultMinimumSizeForResizing):
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::resetComputedStyle):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::EventTargetNode): Pass the isContainer flag up the chain
        * dom/EventTargetNode.h:
        * dom/Node.cpp:
        (WebCore::Node::Node):
        (WebCore::Node::~Node): rareData cleanup code moved from Element and changed to use hasRareData
        (WebCore::Node::rareData):
        (WebCore::Node::ensureRareData):
        (WebCore::Node::createRareData):
        (WebCore::Node::tabIndex): nonzero tab indexes are now in rareData
        (WebCore::Node::setTabIndexExplicitly):
        (WebCore::Node::childNodes): NodeLists are now in rareData
        (WebCore::Node::setFocus):
        (WebCore::Node::rareDataFocused):
        (WebCore::Node::isFocusable):
        (WebCore::Node::isKeyboardFocusable):
        (WebCore::Node::registerDynamicNodeList): NodeLists are now in rareData
        (WebCore::Node::unregisterDynamicNodeList): ditto
        (WebCore::Node::notifyLocalNodeListsAttributeChanged): ditto
        (WebCore::Node::notifyLocalNodeListsChildrenChanged): ditto
        (WebCore::Node::getElementsByName): ditto
        (WebCore::Node::getElementsByClassName): ditto
        * dom/Node.h:
        (WebCore::Node::firstChild): Use isContainerNode() to devirtualize
        (WebCore::Node::lastChild): ditto
        (WebCore::Node::isContainerNode): Take advantage of a newly freed bit to store whether we're a container
        (WebCore::Node::focused): focus is in rareData if set
        (WebCore::Node::childTypeAllowed):
        (WebCore::Node::childNodeCount): Use isContainerNode() to devirtualize
        (WebCore::Node::childNode): ditto
        (WebCore::Node::hasRareData): Use another newly freed bit to store whether we have rare data; avoids doing hash lookups in the common case
        * dom/NodeRareData.h: Added. Most of this is just properties moved from Node
        (WebCore::NodeListsNodeData::~NodeListsNodeData): Moved from Node.cpp since we NodeRareData needs to put them in a HashTable :(
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::rareDataMap):
        (WebCore::NodeRareData::rareDataFromMap):
        (WebCore::NodeRareData::clearNodeLists):
        (WebCore::NodeRareData::setNodeLists):
        (WebCore::NodeRareData::nodeLists):
        (WebCore::NodeRareData::tabIndex):
        (WebCore::NodeRareData::setTabIndex):
        (WebCore::NodeRareData::tabIndexSetExplicitly):
        * dom/TreeWalker.cpp: Include ContainerNode to pick up its definitions for childNodeCount(), etc...
        * xml/XPathUtil.cpp: Include ContainerNode to pick up its definitions for childNodeCount(), etc...

2008-09-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qt] ImageBuffer::toDataURL implementation

        There needs to be a Qt specific test result for the above mentioned
        implementation.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::toDataURL):

2008-09-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qt] Implement SharedBuffer for Qt.

        * WebCore.pro:
        * platform/qt/SharedBufferQt.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/qt/TemporaryLinkStubs.cpp:

2008-09-25  Feng Qian <feng@chromium.org>

        Fix bug: https://bugs.webkit.org/show_bug.cgi?id=21032
        <rdar://problem/6243032>

        Reviewed by Dave Hyatt.

        Test: fast/dom/attribute-downcast-right.html

        Add isMappedAttribute function to Attribute for checking if an object
        is an instance of MappedAttribute. Removed attributeItem,
        getAttributeItem functions from NamedMappedAttrMap, and callers
        expecting MappedAttribute have to check isMappedAttribute before
        downcasting the return value to MappedAttribute.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        * dom/Attribute.h:
        (WebCore::Attribute::isMappedAttribute):
        * dom/MappedAttribute.h:
        (WebCore::MappedAttribute::isMappedAttribute):
        * dom/NamedMappedAttrMap.cpp:
        (WebCore::NamedMappedAttrMap::declCount):
        (WebCore::NamedMappedAttrMap::mapsEquivalent):
        * dom/NamedMappedAttrMap.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::addCSSPropertyAndNotifyAttributeMap):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

2008-09-25  David Hyatt  <hyatt@apple.com>

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

        Make visibleContentRect cross-platform.  Note this does add new horizontal/verticalScrollbar accessors
        to a bunch of platforms.  This is a temporary evil until the scrollbars get made cross-platform (and I
        didn't want to mix that change in with this patch).

        Reviewed by Sam Weinig

        * page/Frame.cpp:
        (WebCore::Frame::markAllMatchesForText):
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::updateControlTints):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::platformVisibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        (WebCore::ScrollView::platformVisibleContentRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformVisibleContentRect):
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::frameVisibleRect):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::viewRect):

2008-09-25  David Smith  <catfish.man@gmail.com>

        Reviewed by Timothy Hatcher

        https://bugs.webkit.org/show_bug.cgi?id=21052
        Generalize id selector special case for querySelectorAll
        
        By checking the element we get with getElementById against the selector, we can use the special case in many more circumstances.
        Changes results on http://native.khan.mozilla.org 
        from
            #title: 2ms
            h1#title: 55ms
            div #title: 55ms

        to:
            #title: 1ms
            h1#title: 2ms
            div #title: 5ms
        
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList):

2008-09-25  David Hyatt  <hyatt@apple.com>

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

        Make the concept of whether you can blit on scroll cross-platform on ScrollView.

        Reviewed by Sam Weinig

        * page/FrameView.cpp:
        (WebCore::FrameView::clear):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::setUseSlowRepaints):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::init):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::setCanBlitOnScroll):
        * platform/ScrollView.h:
        (WebCore::ScrollView::canBlitOnScroll):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollView):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):
        (WebCore::ScrollView::platformSetCanBlitOnScroll):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollView):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollView):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::scrollBy):

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

        Reviewed by Tim Hatcher.

        Bug 21109: Console should right-align urls

        * page/inspector/Console.js: Re-order the message elements so that when
        it overflows it doesn't get mixed in with the next message.
        * page/inspector/inspector.css:

2008-09-25  David Hyatt  <hyatt@apple.com>

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

        Putting r36771 back in with a fix to the addPendingSheet check in CSSImportRule::insertedIntoParent.

        Reviewed by Darin Adler

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::parentStyleSheet):
        (WebCore::CSSRule::parentRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:

2008-09-25  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21115
          <rdar://problem/6245773> REGRESSION (r34702): Safari no longer zips
          bundled documents

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData): Use files() instead of value()
        to get the path, since value() now returns just the basename.

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

        Rubberstamped by Mark Rowe

        Roll out 36771 as it caused <rdar://problem/6246554>
        "nytimes.com doesn't display after returning to it with back/forward"

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::parentStyleSheet):
        (WebCore::CSSRule::parentRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::docLoader):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::doc):

2008-09-25  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Add ScrollView.cpp to the project.

2008-09-25  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):

2008-09-25  Timothy Hatcher  <timothy@apple.com>

        Fixes a leak of ConsoleMessage seen when repeated console
        messages occur.

        Reviewed by Mark Rowe.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::addConsoleMessage): Delete the repeat
        since we don't add it to m_consoleMessages.

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

        Reviewed by Dan Bernstein.

        Bug 21105: XHRs logged in the console may show the wrong URL for the
        source
        - Get the url at the time of the send() and pass it on to the XHR.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::setLastSendURL):

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

        Reviewed by Geoff and Tim.

        Bug 20322: XHRs logged in the console do not have line numbers
        - Get the line number at the time of the send and pass it on to the XHR.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::setLastSendLineNumber):

2008-09-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.
        
        <rdar://problem/6171047> HTMLMediaElement "begin" event is now "loadstart"
        https://bugs.webkit.org/show_bug.cgi?id=21003

        * dom/EventNames.h: remove "begin" event
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load): Post "loadstart" event instead of "begin"

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

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=21097
        Calling a MessageChannel constructor from a destroyed document results in a crash

        Test: fast/events/message-port-constructor-for-deleted-document.html

        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::construct):
        * bindings/js/JSMessageChannelConstructor.h:
        Made m_document a RefPtr.

2008-09-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig, Anders Carlsson, and (unofficially) Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=20879
        Implement HTML5 channel messaging

        Tests: fast/events/message-channel-gc.html
               fast/events/message-port-deleted-document.html
               fast/events/message-port-deleted-frame.html
               fast/events/message-port-inactive-document.html
               fast/events/message-port.html
               http/tests/security/MessagePort/event-listener-context.html

        * Configurations/WebCore.xcconfig:
        Removed unused  ENABLE_CROSS_DOCUMENT_MESSAGING macro.

        * DerivedSources.make:
        Added MessageChannel and MessagePort.

        * WebCore.pro: Made MessageEvent compilation unconditional, as it could not possibly be
        turmed off anyway. Added new files.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added new files.

        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::getValueProperty):
        Added suport for window.MessageChannel constructor.

        * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::postMessage):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        Added support for three-argument postMessage (that posts a MessagePort).

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toMessagePort):
        * dom/EventTarget.h:
        * bindings/js/JSEventTargetBase.cpp: (WebCore::toJS): Added MessagePort as yet another
        EventTarget variant.

        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSMessageChannelConstructor.cpp: Added a custom constructor, so that it could
        take a browsing context (document) parameter.

        * bindings/js/JSMessageChannelCustom.cpp: Added.
        (WebCore::JSMessageChannel::mark): JSMessageChannel uses a custom mark function to mark
        port1 and port2 that it owns.

        * bindings/js/JSMessagePortCustom.cpp: Added.
        (WebCore::JSMessagePort::startConversation):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        (WebCore::JSMessagePort::dispatchEvent):
        (WebCore::JSMessagePort::setOnmessage):
        (WebCore::JSMessagePort::onmessage):
        (WebCore::JSMessagePort::setOnclose):
        (WebCore::JSMessagePort::onclose):
        (WebCore::JSMessagePort::mark):
        * dom/MessagePort.cpp: Added.
        * dom/MessagePort.h: Added.
        * dom/MessagePort.idl: Added.
        Added a MessagePort implementation. Currently, it is not thread-safe at all, and only works
        with Documents as contexts, but in the future, it will be used for communication with worker
        threads.

        * bindings/objc/DOMInternal.h: Include "DOMMessagePortInternal.h". The new APIs do not
        really have Obj-C bindings, as they are far from being final, but a MessagePort stub is
        needed for MessageEvent.

        * bindings/scripts/CodeGeneratorJS.pm: Include PlatformString.h for MessagePort happiness.

        * dom/Document.cpp:
        (WebCore::MessagePortTimer::MessagePortTimer):
        (WebCore::MessagePortTimer::fired):
        (WebCore::Document::processMessagePortMessagesSoon):
        (WebCore::Document::~Document):
        (WebCore::Document::dispatchMessagePortEvents):
        (WebCore::Document::createdMessagePort):
        (WebCore::Document::destroyedMessagePort):
        * dom/Document.h:
        Document keeps track of all MessagePort objects that were created when it was fully active
        in its context.

        * dom/EventNames.h: Added closeEvent.

        * dom/MessageChannel.cpp: Added.
        (WebCore::MessageChannel::MessageChannel):
        (WebCore::MessageChannel::~MessageChannel):
        * dom/MessageChannel.h: Added.
        (WebCore::MessageChannel::create):
        (WebCore::MessageChannel::port1):
        (WebCore::MessageChannel::port2):
        * dom/MessageChannel.idl: Added.
        Addded JSMessageChannel implementation.

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::messagePort):
        * dom/MessageEvent.idl:
        MessageEvent has a MessagePort member now, making it possible to pass ports across
        documents.

2008-09-25  David Smith  <catfish.man@gmail.com>

        Reviewed by Eric Seidel
        
        fix https://bugs.webkit.org/show_bug.cgi?id=21091
        Regression: querySelector matches tag names case sensitively
        
        Tests: fast/dom/SelectorAPI/caseTag.html
               fast/dom/SelectorAPI/caseTagX.xhtml

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSelector): Add a Document argument, since tag case sensitivity is different for HTML documents
        * css/CSSParser.h:
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):

2008-09-24  David Hyatt  <hyatt@apple.com>

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

        Make the m_children member of ScrollView cross-platform.  Consolidate children add/remove
        functionality.  Add platform stubs for connecting/disconnecting the platform widgets.

        Reviewed by Sam Weinig

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/ScrollView.h:
        (WebCore::ScrollView::children):
        * platform/Widget.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):
        (WebCore::ScrollView::geometryChanged):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::setParentVisible):
        (WebCore::ScrollView::show):
        (WebCore::ScrollView::hide):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):

2008-09-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21024
          <rdar://problem/6240821> Scrollbar not painted until hovered

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry): Replaced resizeWidget with
        this method, which sets both the location and the size.
        (WebCore::RenderWidget::setWidget): Replaced the call to resizeWidget
        with a call to the new method setWidgetGeometry. Positioning the
        widget correctly ensures that the scroll bars invalidate correctly when
        they are created and resized.
        * rendering/RenderWidget.h:

2008-09-24  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        - create a "style" subfolder under "rendering" and move style files to that folder

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Maciej Stachowiak.

        Remove staticFunctionGetter.  There is only one remaining user of
        staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):

2008-09-24  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dan Bernstein.

        Test: editing/spelling/inline_spelling_markers.html
        
        - https://bugs.webkit.org/show_bug.cgi?id=20092
        Spelling markers positioned incorrectly in RTL text

        Measure spelling markers with selectionRectForText() to fix RTL.

        This patch also fixes hit-testing for spelling marker tool tips,
        which used to work only on the first line.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):

2008-09-24  David Hyatt  <hyatt@apple.com>

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

        Make sure the viewless scrollbar knows how to paint properly when transformed.

        Reviewed by Sam Weinig

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::paint):

2008-09-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Try to fix win build.

        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::toJS):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::removeAllChildrenInContainer):
        (WebCore::appendChildToContainer):
        (WebCore::Private::addChildNodesToDeletionQueue):

2008-09-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add ContainerNodeAlgorithms.h, as central place to share algorithms
        operating on TreeShared-derived classes with a Node-style interface.

        This allows SVGElementInstance & ContainerNode to share code.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildren):
        (WebCore::ContainerNode::addChild):
        * dom/ContainerNode.h:
        * dom/ContainerNodeAlgorithms.h: Added.
        (WebCore::removeAllChildrenInContainer):
        (WebCore::appendChildToContainer):
        (WebCore::Private::NodeRemovalDispatcher::dispatch):
        (WebCore::Private::addChildNodesToDeletionQueue):

2008-09-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Wrap up dirtying the z-order list of the stacking context
        RenderLayer into a method.
        https://bugs.webkit.org/show_bug.cgi?id=21072

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasVisibleContent):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::dirtyStackingContextZOrderLists):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):

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

        Reviewed by Tim.

        Bug 21070: REGRESSION Repeated messages with arguments are not repeated
        or displayed multiple times
        - The Insepctor Controller was comparing JSValue pointers so thought the
        message was not a repeat, but the JS of the inspector compared the
        strings and so knew it was the same message and so overwrote the old
        message.

        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::isEqual):
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::endGroup):
        * page/InspectorController.h:

2008-09-24  David Hyatt  <hyatt@apple.com>

        Make sure the viewless Mac scrollbar responds properly to system preference changes (including the
        arrow placement preference and the thumb jump preference).

        Reviewed by Adam Roben

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::~Scrollbar):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::registerScrollbar):
        (WebCore::ScrollbarTheme::unregisterScrollbar):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]):
        (+[ScrollbarPrefsObserver behaviorPrefsChanged:]):
        (+[ScrollbarPrefsObserver registerAsObserver]):
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::preferencesChanged):

2008-09-24  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=20557
        getScreenCTM() returns wrong values

        Use the absolute position of the svg root when
        determining the screen ctm.

        Test: svg/custom/getscreenctm-in-mixed-content2.xhtml

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getScreenCTM):

2008-09-24  David Hyatt  <hyatt@apple.com>

        Turn off support for CSS variables.

        * ChangeLog:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createVariablesRule):
        (WebCore::CSSParser::addVariable):
        (WebCore::CSSParser::addVariableDeclarationBlock):

2008-09-24  David Hyatt  <hyatt@apple.com>

        Back out the alternate forms of CSS variable call syntax (leaving only the -webkit-var version).

        * css/CSSGrammar.y:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::isVariable):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        (WebCore::CSSPrimitiveValue::isVariable):

2008-09-24  Timothy Hatcher  <timothy@apple.com>

        Fixes a regression where the "incorrect MIME-type" warning would not
        show up correctly in the Console or the resources sidebar.

        Reviewed by Kevin McCullough.

        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype._addTip): Add the repeat count argument
        to the WebInspector.ConsoleMessage constructor call.
        (WebInspector.Resource.prototype._checkWarning): Ditto.

2008-09-23  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Remove deprecated JS Qt bindings object call/construct code and fix autotests

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::QtInstance):
        * bridge/qt/qt_instance.h:

2008-09-23  Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Alp Toker. Landed by Jan Alonzo.

        Bug 20883: [CURL] Add deferred loading
        https://bugs.webkit.org/show_bug.cgi?id=20883

        Implement deferred loading for the libcURL backend using curl_easy_pause.
        As the method was introduced in version 7.18.0, all the code checks for libcURL
        version.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback): Add an assertion that deferred loading is not
        activated.
        (WebCore::headerCallback): Ditto.
        (WebCore::readCallback): Ditto.
        (WebCore::ResourceHandleManager::dispatchSynchronousJob): Force
        defersLoading to be false in order to avoid triggering an assertion.
        (WebCore::ResourceHandleManager::initializeHandle): If deferred loading is
        activated, pause the easy handle.

2008-09-23  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Inspector search field style tweaks.

        * page/inspector/inspector.css:

2008-09-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=21046 (Several LayoutTests crash)

        Fix missing negation in EventTargetNode::insertedIntoDocument.
        Made handleLocalEvents() virtual again, HTMLFormElement overrides it.
        Remove code, that wasn't supposed to go in in dispatchGenericEvent().

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::insertedIntoDocument):
        (WebCore::EventTargetNode::dispatchGenericEvent):
        * dom/EventTargetNode.h:

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Adds search support to the Profiles panel.

        The Profiles panel supports a few types of queries:
         * Standard string matching for function names and file URLs.
         * Greater than and less than search for numeric columns.
           So a query of ">24" will match all rows that have calls
           greater than 24. Or "<=42" will match all 42 or less.
         * Percent and time units. Adding a unit of "s", "ms" or "%"
           is supported and will match only the Self and Total columns.
           So a query of ">1.25s" will match all rows that took longer
           than 1.25 seconds.

        Reviewed by Oliver Hunt.

        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView.prototype.hide): Reset _currentSearchResultIndex to -1. So the next time
        it will start at the first result.
        (WebInspector.ProfileView.prototype.refreshShowAsPercents): Moved from the bottom of the file.
        (WebInspector.ProfileView.prototype.searchCanceled): Clear the search properties and refresh highlighted
        data grid nodes.
        (WebInspector.ProfileView.prototype.performSearch): Search the profile nodes.
        (WebInspector.ProfileView.prototype.jumpToFirstSearchResult): Does what the function says. Calls _jumpToSearchResult.
        (WebInspector.ProfileView.prototype.jumpToLastSearchResult): Ditto.
        (WebInspector.ProfileView.prototype.jumpToNextSearchResult): Ditto.
        (WebInspector.ProfileView.prototype.jumpToPreviousSearchResult): Ditto.
        (WebInspector.ProfileView.prototype.showingFirstSearchResult): Does what the function says.
        (WebInspector.ProfileView.prototype.showingLastSearchResult): Ditto.
        (WebInspector.ProfileView.prototype._jumpToSearchResult): Select and reveal the profile node.
        Expand all the ancestors first so the profile node will have a DataGridNode.
        (WebInspector.ProfileView.prototype._changeView): Perform the search again on the new tree.
        (WebInspector.ProfileDataGridNode.prototype.createCell): Add the highlight class to cells that
        have search matches.
        * page/inspector/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.reset): Call searchCanceled and delete the currentQuery.
        (WebInspector.ProfilesPanel.prototype.showProfile): Use profileViewForProfile.
        (WebInspector.ProfilesPanel.prototype.showView): Call showProfile. Used by Panel to show a view.
        (WebInspector.ProfilesPanel.prototype.profileViewForProfile): Create the ProfileView if needed.
        (WebInspector.ProfilesPanel.prototype.closeVisibleView): Renamed visibleProfileView  to visibleView.
        (WebInspector.ProfilesPanel.prototype.get searchableViews): Return all the views.
        (WebInspector.ProfilesPanel.prototype.searchMatchFound): Update the sidebar search matches.
        (WebInspector.ProfilesPanel.prototype.searchCanceled): Clear all the sidebar search matches.
        (WebInspector.ProfileSidebarTreeElement.prototype.set searchMatches): Set the class and bubbleText.
        * page/inspector/inspector.css: New style rules for the cell highlight color.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Adds search support to the Resources and Scripts panels.

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

        Reviewed by Oliver Hunt.

        * page/inspector/Images/searchSmallBlue.png: Added.
        * page/inspector/Images/searchSmallBrightBlue.png: Added.
        * page/inspector/Images/searchSmallGray.png: Added.
        * page/inspector/Images/searchSmallWhite.png: Added.
        * page/inspector/ResourceView.js:
        (WebInspector.ResourceView.prototype.attach): Attempt to attach to "resource-views"
        or "script-resource-views" since one might not be created yet.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show): Hide any views that are visible that
        are not this panel's current visible view. This can happen when a ResourceView is
        visible in the Scripts panel then switched to the this panel.
        (WebInspector.ResourcesPanel.prototype.get searchableViews): Return all views, with the
        visibleView first.
        (WebInspector.ResourcesPanel.prototype.searchResultsSortFunction): Return a sort function
        that uses the current graph search function. So cycling through results will be in the order
        things appear in the sidebar.
        (WebInspector.ResourcesPanel.prototype.searchMatchFound): Update the search matches on the
        resource's sidebar tree element.
        (WebInspector.ResourcesPanel.prototype.searchCanceled): Restore the error and warning bubbles
        in the sidebar. Calls the Panel prototype's searchCanceled.
        (WebInspector.ResourcesPanel.prototype.performSearch): Hide all the error and warning bubbles
        in the sidebar. Calls the Panel prototype's performSearch.
        (WebInspector.ResourcesPanel.prototype.reset): Call searchCanceled and delete the currentQuery.
        (WebInspector.ResourcesPanel.prototype.addMessageToResource): Don't call updateErrorsAndWarnings
        if there is a current search query.
        (WebInspector.ResourcesPanel.prototype.clearMessages): Ditto.
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded): Ditto.
        (WebInspector.ResourcesPanel.prototype.showView): Call showResource. Used by Panel to show a view.
        (WebInspector.ResourceSidebarTreeElement.prototype.resetBubble): Clear all the classes and content.
        (WebInspector.ResourceSidebarTreeElement.prototype.set searchMatches): Set the bubbleText and class.
        (WebInspector.ResourceSidebarTreeElement.prototype.updateErrorsAndWarnings): Call resetBubble.
        * page/inspector/ScriptView.js:
        (WebInspector.ScriptView): Set _sourceFrameSetup to flase.
        (WebInspector.ScriptView.prototype.hide): Reset _currentSearchResultIndex to -1. So the next time
        it will start at the first result.
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded): Add an event listener for "syntax
        highlighting complete".
        (WebInspector.ScriptView.prototype): Share many methods with SourceView.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show): Hide any views that are visible that are not this
        This can happen when a ResourceView is visible in the Resources panel then switched to the this panel.
        (WebInspector.ScriptsPanel.prototype.get searchableViews): Return all views, with the visibleView first.
        (WebInspector.ScriptsPanel.prototype.reset): Call searchCanceled and delete the currentQuery.
        (WebInspector.ScriptsPanel.prototype.showView): Call _showScriptOrResource. Used by Panel to show a view.
        (WebInspector.ScriptsPanel.prototype._sourceViewForScriptOrResource): Added helper.
        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.syntaxHighlightJavascript): Dispatch a "syntax highlighting complete" event.
        * page/inspector/SourceView.js:
        (WebInspector.SourceView.prototype.hide):
        (WebInspector.SourceView.prototype.detach):
        (WebInspector.SourceView.prototype._resourceLoadingFinished): Moved from the bottom of the file.
        (WebInspector.SourceView.prototype._addBreakpoint): Ditto.
        (WebInspector.SourceView.prototype.searchCanceled): Delete search properties.
        (WebInspector.SourceView.prototype.performSearch): Search the frame if it is loaded, otherwise
        store the worker function as _delayedFindSearchMatches and call it later in _sourceFrameSetupFinished.
        (WebInspector.SourceView.prototype.jumpToFirstSearchResult):
        (WebInspector.SourceView.prototype.jumpToLastSearchResult):
        (WebInspector.SourceView.prototype.jumpToNextSearchResult):
        (WebInspector.SourceView.prototype.jumpToPreviousSearchResult):
        (WebInspector.SourceView.prototype.showingFirstSearchResult):
        (WebInspector.SourceView.prototype.showingLastSearchResult):
        (WebInspector.SourceView.prototype._jumpToSearchResult): Selects the found Range.
        (WebInspector.SourceView.prototype._sourceFrameSetupFinished): Calls _delayedFindSearchMatches.
        (WebInspector.SourceView.prototype._syntaxHighlightingComplete): Call _sourceFrameSetupFinished.
        * page/inspector/inspector.css:

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Rename some properties of ResourcesPanel and ScriptsPanel to be the same,
        so future code can be shared.

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

        Reviewed by Oliver Hunt.

        * page/inspector/ResourcesPanel.js: Renamed resourceViews to viewsContainerElement.
        And visibleResourceView to visibleView.
        * page/inspector/ScriptsPanel.js: Renamed scriptResourceViews to viewsContainerElement.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Highlight all matched search results in the Elements panel DOM tree.

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

        Reviewed by Oliver Hunt.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled): Clear the highlight
        on all previous search results.
        (WebInspector.ElementsPanel.prototype.performSearch): Set the hihglight
        on all new search results.
        * page/inspector/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement): Delay setting the title until onattach.
        (WebInspector.ElementsTreeElement.prototype.get/set highlighted): Sets or removes
        the highlighted class on the listItemElement.
        (WebInspector.ElementsTreeElement.prototype.onattach): Set the highlighted class
        if needed. Calls _updateTitle.
        (WebInspector.ElementsTreeElement.prototype._updateTitle): Adds a span with the highlight
        class so it can be styled when the highlighted class is present.
        * page/inspector/inspector.css: New style rules for the hihglight.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Add search support to the Elements panel.

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

        Reviewed by Oliver Hunt.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled): Call updateSearchMatchesCount
        with a 0 match count to rest. Reset the other search properties.
        (WebInspector.ElementsPanel.prototype.performSearch): Evaluates the search as an XPath
        query and a CSS selector on all the Documents in the page. Remembers the found nodes
        and avoids duplicates. Focuses the first result.
        (WebInspector.ElementsPanel.prototype.jumpToNextSearchResult): Focuses the next result.
        (WebInspector.ElementsPanel.prototype.jumpToPreviousSearchResult): Focuses the previous result.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Add support to Panel that allows easy searching of sub-views.

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

        Reviewed by Oliver Hunt.

        * page/inspector/Panel.js:
        (WebInspector.Panel.prototype.searchCanceled): Call searchCanceled on all the
        views in the search results and delete the currentQuery property. Call
        WebInspector.updateSearchMatchesCount wit ha 0 match count to rest. Reset the
        other search properties.
        (WebInspector.Panel.prototype.performSearch): Call searchCanceled since it will
        reset everything we need before doing a new search. Get an array of searchableViews
        from the panel, implemented by sub-classes. Iterate over the views one-by-one
        with an interval to prevent blocking the UI for large lists of searchableViews.
        This keeps the interface really responsive. Pass a finishedCallback function to
        the performSearch on each view so it can notify the panel of results.
        (WebInspector.Panel.prototype.jumpToNextSearchResult): Finds the index in the
        searchResults of the visibleView, so we know where in the results we are.
        This is done every time incase the user manually navigates to a new view.
        If the view is showing the last result, jump to the next view and show it's
        first result. Otherwise jump to the next result in the current view.
        (WebInspector.Panel.prototype.jumpToPreviousSearchResult): Ditto, but in reverse.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Add support for asking the current panel to perform a search, find next/previous and clear.
        A search is performed on the new new current panel when switching between panels. The search
        label/placeholder in the toolbar now includes the panel name to make it clear that panel will
        be searched. The search field contents are selected when Command/Control-F or Enter/Return
        is pressed, so the user can easily type an entirely new query. The search match count shows
        up in the toolbar next to the search field.

        Also changed:
         * Rename lastQuery to currentQuery since it better matches the truth.
         * Set the search field "results" attribute to zero since results arn't saved for
           how we use the search field.
         * Make repeated presses of the Return key jump to the next search result instead
           of doing nothing.
         * Increased the search field width.

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

        Reviewed by Oliver Hunt.

        * English.lproj/localizedStrings.js: New strings.
        * page/inspector/inspector.css: New styles.
        * page/inspector/inspector.html: Add the search-results-matches element. Add the
        incremental attribute to the search field and set the results attribute to zero.
        * page/inspector/inspector.js:
        (WebInspector.set currentPanel): perform the search on the new panel.
        (WebInspector.loaded): Change the event listeners and remove code that changes
        the search label text.
        (WebInspector.documentKeyDown): Add support for Command/Control-G and
        Command/Control-Shift-G. To jump to the next and previous search results.
        (WebInspector.updateSearchLabel): Added. Update the search placeholder/label.
        This does different things depending on the attached state.
        (WebInspector.searchKeyDown): Call preventDefault since this was the Enter key.
        This prevents a "search" event from firing for key down. We handle the Enter key
        on key up in searchKeyUp. This stops performSearch from being called twice in a row.
        (WebInspector.searchKeyUp): Calls performSearch when it is the Enter key.
        (WebInspector.performSearch): Delete the currentQuery property and call searchCanceled
        on all the panels. Call jumpToNextSearchResult when this is the same query or a forced search.
        Call updateSearchMatchesCount to reset the matches count in the toolbar.
        (WebInspector.updateSearchMatchesCount): Added. Updates the matches count in the toolbar.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Remove the previous Inspector search code to make room for the new stuff.

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

        Reviewed by Oliver Hunt.

        * page/inspector/inspector.css:
        * page/inspector/inspector.html:
        * page/inspector/inspector.js:
        (WebInspector.get/set showingSearchResults): Removed.
        (WebInspector.searchResultsKeyDown): Removed.
        (WebInspector.searchResultsResizerDragStart): Removed.
        (WebInspector.searchResultsResizerDragEnd): Removed.
        (WebInspector.searchResultsResizerDrag): Removed.
        (WebInspector.performSearch): Removed searching parts.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Use the Array.remove helper function in more places.

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

        Reviewed by Kevin McCullough.

        * page/inspector/ResourceCategory.js:
        (WebInspector.ResourceCategory.prototype.removeResource): Use Array.remove.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.removeResource): Ditto.
        * page/inspector/inspector.js:
        (WebInspector.removeResource): Ditto.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where inspecting a node after reloading the page
        would not reveal the node in the DOM tree. The TreeOutline
        was not being told to forget decendants of a removed child.
        So old TreeElements would be found that are not in the tree.

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

        Reviewed by Kevin McCullough.

        * page/inspector/treeoutline.js:
        (TreeOutline._removeChildAtIndex): Call _forgetChildrenRecursive
        in addition to _forgetTreeElement.
        (TreeOutline._removeChildren): Call _forgetChildrenRecursive
        in addition to _forgetTreeElement.
        (TreeOutline._rememberTreeElement): Use Array.indexOf to quickly
        search for known elements.
        (TreeOutline._forgetTreeElement): Use Array.remove to remove elements.
        (TreeOutline._forgetChildrenRecursive): Recursively traverse the
        descendants and call _forgetTreeElement.
        * page/inspector/utilities.js:
        (Array.prototype.remove): Speed up this function by using Array.indexOf
        when onlyFirst is true.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where inspecting some short text nodes does
        not reveal them in the Elements panel DOM tree.

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

        Reviewed by Oliver Hunt.

        * page/inspector/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode):
        The revealAndSelectNode() method might find a different element
        if there is inlined text, and the select() call would change the
        focusedDOMNode and reenter this setter. So to avoid calling
        focusedNodeChanged() twice, first check if _focusedDOMNode is
        the same node as the one passed in.
        (WebInspector.ElementsTreeOutline.prototype.update): Remove use of
        this.treeOutline, since this is the TreeOutline.
        (WebInspector.ElementsTreeOutline.prototype.findTreeElement): Added.
        Provides default functions for isAncestor, getParet and equal.
        Calls the base protoype's findTreeElement. If that returns null
        and the node is a text node, try finding it's parent.
        (WebInspector.ElementsTreeOutline.prototype.revealNode): Removed.
        Renamed to revealAndSelectNode.
        (WebInspector.ElementsTreeOutline.prototype.revealAndSelectNode):
        Selects and reveals the node passed in. Use the simple findTreeElement.
        (WebInspector.ElementsTreeOutline.prototype._treeElementFromEvent):
        Remove use of this.treeOutline, since this is the TreeOutline.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Fixes an exception that happened when removing a Resource
        from the ResourcesPanel.

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

        Reviewed by Kevin McCullough.

        * page/inspector/ResourcesPanel.js:
        (WebInspctor.ResourcesPanel.prototype.removeResource):
        Remove the graphElement.

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

        Fixed "Time" to "Tim"

        * ChangeLog:

2008-09-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Move mapInstanceToElement/removeInstanceMapping/instancesForElement
        from SVGDocumentExtensions to SVGElement. It's more useful to store
        the list of SVGElementInstances per SVGElement, instead of using
        a document-wide hash for this purpose.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::mapInstanceToElement):
        (WebCore::SVGElement::removeInstanceMapping):
        (WebCore::SVGElement::instancesForElement):
        * svg/SVGElement.h:
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::~SVGElementInstance):
        (WebCore::SVGElementInstance::updateAllInstancesOfElement):
        * svg/SVGElementInstance.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::svgAttributeChanged):
        (WebCore::SVGStyledElement::childrenChanged):
        * svg/SVGStyledElement.h:

2008-09-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix.

        * WebCoreSources.bkl:

2008-09-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Sam.

        Move code from EventTarget to EventTargetNode.

        I refactored most parts to live in EventTarget, a year ago,
        though the implementation of EventTargetSVGElementInstance is
        done in another way, that obsoletes this.

        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        (WebCore::allowEventDispatch):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::insertedIntoDocument):
        (WebCore::EventTargetNode::removedFromDocument):
        (WebCore::EventTargetNode::willMoveToNewOwnerDocument):
        (WebCore::EventTargetNode::didMoveToNewOwnerDocument):
        (WebCore::EventTargetNode::addEventListener):
        (WebCore::EventTargetNode::removeEventListener):
        (WebCore::EventTargetNode::removeAllEventListeners):
        (WebCore::EventTargetNode::handleLocalEvents):
        (WebCore::setCurrentEventTargetRespectingSVGTargetRules):
        (WebCore::EventTargetNode::dispatchEvent):
        (WebCore::EventTargetNode::dispatchGenericEvent):
        (WebCore::EventTargetNode::dispatchWindowEvent):
        (WebCore::EventTargetNode::removeEventListenerForType):
        * dom/EventTargetNode.h:
        * svg/EventTargetSVGElementInstance.cpp:
        (WebCore::EventTargetSVGElementInstance::dispatchEvent):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        * svg/SVGElement.h:
        (WebCore::SVGElement::supplementalTransform):

2008-09-23  Dave Hyatt  <hyatt@apple.com>

        Fix for bug 21012.  The Aqua scrollbar was returning the wrong track rect on Windows Aqua theme.  Make
        sure to not accidentally fall into the vertical scrollbar case for horizontal scrollbars. :)
        
        Reviewed by Sam Weinig

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::trackRect):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeSafari::trackRect):

2008-09-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21041 "Add Contact" 
        link at gmail does not support AXPress action
        and corresponding: <rdar://problem/6216178>

        I fixed this bug by making AccessibilityObject::anchorElement 
        support ARIA links.

        * page/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::anchorElement):
        * page/AccessibilityImageMapLink.h:
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::anchorElement):
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isNativeAnchor):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isNativeAnchor):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        (WebCore::AccessibilityRenderObject::url):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (AXLinkElementForNode):

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

        Reviewed by Tim and Oliver.

        Bug 20949: Catch repeated messages in Inspector Controller to limit
        memory usage
        - Store the repeat count in the Console Message object, in the 
        Inspector Controller and JS ConsoleMessage object.

        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::operator==):
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::addScriptConsoleMessage):
        * page/InspectorController.h:
        * page/inspector/Console.js:
        * page/inspector/Resource.js:
        * page/inspector/ResourcesPanel.js:
        * page/inspector/SourceFrame.js:

2008-09-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Working on proper EventTarget support for SVGElementInstance.

        Add new EventTargetSVGElementInstance class, and it's corresponding JS wrapper.
        Finally JSEventTargetBase, is actually used for another class than JSEventTargetnode.

        Remove EventTarget inheritance from SVGElementInstance, and the manual "TreeShared"
        implementation. Let it use TreeShared directly.

        It's not activated so far (SVGUseElement still creating SVGElementInstance objects).
        The transition to EventTargetSVGElementInstance will be done in a few individual patches.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::retrieveEventTargetAndCorrespondingNode):
        (WebCore::toJS):
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSEventTargetSVGElementInstance.cpp: Added.
        (WebCore::):
        (WebCore::JSEventTargetSVGElementInstance::JSEventTargetSVGElementInstance):
        (WebCore::JSEventTargetSVGElementInstance::createPrototype):
        (WebCore::JSEventTargetSVGElementInstance::setListener):
        (WebCore::JSEventTargetSVGElementInstance::getListener):
        (WebCore::toEventTargetSVGElementInstance):
        * bindings/js/JSEventTargetSVGElementInstance.h: Added.
        (WebCore::JSEventTargetSVGElementInstance::prototypeClassName):
        (WebCore::JSEventTargetSVGElementInstance::getOwnPropertySlot):
        (WebCore::JSEventTargetSVGElementInstance::getValueProperty):
        (WebCore::JSEventTargetSVGElementInstance::put):
        (WebCore::JSEventTargetSVGElementInstance::putValueProperty):
        * bindings/js/JSSVGElementInstanceCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/objc/DOM.mm:
        (+[DOMNode _wrapEventTarget:WebCore::]):
        (-[DOMSVGElementInstance _initWithSVGElementInstance:WebCore::]):
        (+[DOMSVGElementInstance _wrapSVGElementInstance:WebCore::]):
        (+[DOMSVGElementInstance _wrapEventTarget:WebCore::]):
        (-[DOMSVGElementInstance WebCore::]):
        (-[DOMSVGElementInstance addEventListener:listener:useCapture:]):
        (-[DOMSVGElementInstance addEventListener:::]):
        (-[DOMSVGElementInstance removeEventListener:listener:useCapture:]):
        (-[DOMSVGElementInstance removeEventListener:::]):
        (-[DOMSVGElementInstance dispatchEvent:]):
        * bindings/objc/DOMEvents.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * svg/EventTargetSVGElementInstance.cpp: Added.
        (WebCore::EventTargetSVGElementInstance::EventTargetSVGElementInstance):
        (WebCore::EventTargetSVGElementInstance::~EventTargetSVGElementInstance):
        (WebCore::EventTargetSVGElementInstance::addEventListener):
        (WebCore::EventTargetSVGElementInstance::removeEventListener):
        (WebCore::EventTargetSVGElementInstance::dispatchEvent):
        * svg/EventTargetSVGElementInstance.h: Added.
        (WebCore::EventTargetSVGElementInstance::isEventTargetSVGElementInstance):
        (WebCore::EventTargetSVGElementInstance::toNode):
        (WebCore::EventTargetSVGElementInstance::toSVGElementInstance):
        (WebCore::EventTargetSVGElementInstance::refEventTarget):
        (WebCore::EventTargetSVGElementInstance::derefEventTarget):
        (WebCore::EventTargetSVGElementInstanceCast):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::dispatchEvent):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::~SVGElementInstance):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::isEventTargetSVGElementInstance):
        * svg/SVGElementInstance.idl:

2008-09-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - https://bugs.webkit.org/show_bug.cgi?id=21040
          Pass NULL instead of the identity matrix to CTFontCreateWithGraphicsFont()

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCTFont):

2008-09-23  David Hyatt  <hyatt@apple.com>

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

        Teach the viewless Mac scrollbar how to avoid NSWindow's resizer.

        Reviewed by Sam Weinig

        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setFrameGeometry):
        * platform/Scrollbar.h:
        * platform/Widget.cpp:
        (WebCore::Widget::convertFromContainingWindow):
        * platform/Widget.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        (WebCore::ScrollView::setParent):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromContainingWindow):

2008-09-23  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Darin Adler. Landed by Jan Alonzo.

        Added support for getImageData() and putImageData()
        to Cairo.

        [CAIRO] needs getImageData and putImageData support
        https://bugs.webkit.org/show_bug.cgi?id=20838

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):

2008-09-23  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=18987
        [GTK] Implement SharedBuffer::createWithContentsOfFile and
        KURL::fileSystemPath

        * GNUmakefile.am: Add KURLGtk.cpp and SharedBufferGtk.cpp.
        * platform/gtk/KURLGtk.cpp: Added.
        (WebCore::KURL::fileSystemPath): Implemented.
        * platform/gtk/SharedBufferGtk.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile): Implemented.
        * platform/gtk/TemporaryLinkStubs.cpp: Remove the old stubs.

2008-09-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt, okayed by Darin Adler.

        <rdar://problem/5575547> REGRESSION: ATOK has no phrase boundary on Safari/Mail.app

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionUnderline): Add 2 pixel spacing between clauses.

2008-09-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21023
        Don't use TEC for encodings supported by ICU

        * platform/text/mac/mac-encodings.txt: Removed x-mac-centraleurroman, x-mac-cyrillic,
        x-mac-greek, and x-mac-turkish.

        * platform/text/TextCodecICU.cpp: (WebCore::TextCodecICU::registerExtendedEncodingNames):
        Register aliases for these encodings that are not registered automatically; updated comments.

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

        Reviewed by Darin.

        - speed up instanceof some more
        https://bugs.webkit.org/show_bug.cgi?id=20818

        ~2% speedup on EarleyBoyer

        (WebCore updates.)
        
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructureID):

2008-09-22  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21008
          getting pixels by index from CanvasPixelArray is unnecessarily slow

        * GNUmakefile.am: Added JSCanvasPixelArrayCustom.h.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/js/JSCanvasPixelArrayCustom.cpp: Removed indexGetter and
          indexSetter. These are now both inlined, so in the header.
        * bindings/js/JSCanvasPixelArrayCustom.h: Added. The getByIndex
          function is what's used for HasCustomIndexGetter. Also moved the
          indexSetter function here.

        * bindings/scripts/CodeGeneratorJS.pm: Changed HasCustomIndexGetter
          to use a getByIndex member function rather than an indexGetter static
          member function in a property slot. This lets us avoid the property
          slot mechanism's rule where it turns numeric property names into
          strings in the identifier table, which is good because that's slow.
          Also added a new property CustomHeader that allows IDL files to
          introduce headers to be included -- useful when we have functions
          that we want to inline into the binding.

        * html/CanvasPixelArray.idl: Added CustomHeader attribute.

2008-09-23  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Another blind stab in the dark.

        * svg/graphics/cg/SVGResourceClipperCg.cpp: Add missing header.

2008-09-23  Eric Seidel  <eric@webkit.org>

        No review, build fix only.
        
        Third time's the charm, eh?  My local build is sadly still not done...

        * platform/graphics/AffineTransform.cpp: remove extra &
        * platform/graphics/AffineTransform.h: remove extra &

2008-09-22  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        * platform/graphics/AffineTransform.cpp: remove extra ;

2008-09-22  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Speculative fix for the build while I wait for my compile to finish.

        * platform/graphics/AffineTransform.cpp:

2008-09-22  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by eseidel.  Landed by eseidel.

        Moved makeMapBetweenRects from SVG/CG to AffineTransform
        Make SVGResourceClipper::applyClip more cross-platform

        * platform/graphics/AffineTransform.cpp:
        * platform/graphics/AffineTransform.h:
        * svg/graphics/cg/CgSupport.cpp:
        * svg/graphics/cg/CgSupport.h:
        * svg/graphics/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::handleBoundingBoxModeAndGradientTransformation):
        * svg/graphics/cg/SVGResourceClipperCg.cpp:
        (WebCore::SVGResourceClipper::applyClip):

2008-09-22  Alp Toker  <alp@nuanti.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=16331
        [Gtk] no focus when button/checkbox/radiobutton clicked, only when tabbed

        Obey GTK+ focusing conventions for controls and anchor elements.

        It could be interesting to push these decisions up to Settings or
        ChromeClient some day but this gets things working.

        Right and middle click events still need some work to match GTK+
        conventions.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isMouseFocusable):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isMouseFocusable):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):

2008-09-22  Darin Adler  <darin@apple.com>

        * page/mac/FrameMac.mm:
        (WebCore::Frame::baseWritingDirectionForSelectionStart): Fix indentation.

2008-09-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=21013
        Match Firefox in how we hide HTMLInputElement.selectionStart, selectionEnd
        and setSelectionRange.  This also allows us to remove the legacy JSHTMLInputElementBase
        class!

        - selectionStart, selectionEnd and setSelectionRange now are visible in iteration of
          non-selectable input types, but return undefined when accessed.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSHTMLInputElementBase.cpp: Removed.
        * bindings/js/JSHTMLInputElementBase.h: Removed.
        * bindings/js/JSHTMLInputElementCustom.cpp: Added.
        (WebCore::JSHTMLInputElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLInputElement::selectionStart):
        (WebCore::JSHTMLInputElement::selectionEnd):
        * bindings/js/JSHTMLInputElementCustom.h: Added.
        * html/HTMLInputElement.idl:

2008-09-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5699571> Mail: Unable to change writing direction to LTR in an empty message

        Not testable in DumpRenderTree or in Safari

        * page/mac/FrameMac.mm:
        (WebCore::Frame::baseWritingDirectionForSelectionStart): Account for the
        case that the selection start node is a block.

2008-09-22  David Hyatt  <hyatt@apple.com>

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

        Make sure that the scrollbar gets sent a release event on platforms that call handleMouseDoubleClickEvent.

        Reviewed by Sam Weinig

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDoubleClickEvent):

2008-09-22  Eric Seidel  <eric@webkit.org>

        No review, rollback only.

        Roll out Peter's change (per his request)
        http://trac.webkit.org/changeset/36069
        https://bugs.webkit.org/show_bug.cgi?id=19663
        This change has been the source of numerous regressions
        (several of which were latent bugs revealed by this change,
        others were bugs in this change)

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):

2008-09-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5158514> Switch the complex text code path to Core Text

        Tests: platform/mac-snowleopard/fast/text/myanmar-shaping.html
               platform/mac-snowleopard/fast/text/thai-combining-mark-positioning.html

        * config.h: Use Core Text if not building for Leopard or Tiger.

2008-09-22  David Hyatt  <hyatt@apple.com>

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

        Add code that paints an NSView-less scroller using HIThemeDrawTrack.  This scrollbar is still not
        switched on.  There are still a few more refinements to make to the rendering and behavior.

        Reviewed by Darin Adler

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::paintTrack):
        (WebCore::ScrollbarThemeComposite::paintButton):
        (WebCore::ScrollbarThemeComposite::paintThumb):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::scrollbarPartToHIPressedState):
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::invalidateRect):

2008-09-22  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig

        transition end event when -webkit-transition-property: all puts wrong
        propertyName in event
        https://bugs.webkit.org/show_bug.cgi?id=20903
        
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent):

2008-09-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6230234> AXTable should probably not be exposed in there's only one cell

        Test: accessibility/table-one-cell.html

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):

2008-09-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6167779> Setting AXSelectedTextRange for TextAreas in a WebView behaves incorrectly

        Test: accessibility/textarea-selected-text-range.html

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):

2008-09-22  David Hyatt  <hyatt@apple.com>

        Clean up some parent relationships in the back end stylesheet code.  Make sure parentStyleSheet
        properly walks up nested rule blocks to reach the parent sheet instead of giving up at the immediate
        parent.  Also fix the doc() method so that it is properly set when the parent of the sheet is an import
        rule.

        Reviewed by Sam Weinig

        Added fast/css/nested-rule-parent-sheet.html

         * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::parentStyleSheet):
        (WebCore::CSSRule::parentRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:

2008-09-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21002
          Make the ATSUI code path respect spacingDisabled()

        Fixes svg/text/text-spacing-01-b.svg in run-webkit-tests --complex-text

        * platform/graphics/mac/FontMacATSUI.mm:
        (WebCore::overrideLayoutOperation):

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

        Reviewed by Cameron Zwarich.

        - speed up instanceof operator by replacing implementsHasInstance method with a TypeInfo flag

        Partial work towards <https://bugs.webkit.org/show_bug.cgi?id=20818>
        
        2.2% speedup on EarleyBoyer benchmark.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructureID):
        * bindings/scripts/CodeGeneratorJS.pm:

2008-09-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Add a missing </File> tag.

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

        Reviewed by Dave Hyatt.

        Based on initial work by Darin Adler.
        
        - replace masqueradesAsUndefined virtual method with a flag in TypeInfo
        - use this to JIT inline code for eq_null and neq_null
        https://bugs.webkit.org/show_bug.cgi?id=20823
        
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSHTMLAllCollection.cpp: Added.
        (WebCore::):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructureID):
        (WebCore::JSHTMLAllCollection::toBoolean):

2008-09-22  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix the QtWebKit build

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::construct):
        * bridge/qt/qt_runtime.cpp:

2008-09-22  Alp Toker  <alp@nuanti.com>

        Suggested by David Hyatt.

        Build fix: ScrollView::update() is still used by Document.cpp on !MAC
        so make it public.

        * platform/ScrollView.h:

2008-09-22  David Hyatt  <hyatt@apple.com>

        Fix a regression in Windows scrollbar painting.  (Also fix the same
        bug in my new viewless Mac scrollbar painting code).  The track rect
        was being improperly inflated when painting resulting in the scrollbar
        being too tall and painting in the border of overflow sections.

        Reviewed by Oliver Hunt

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::trackRect):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::trackRect):

2008-09-22  David Hyatt  <hyatt@apple.com>

        Fix a hit testing bug where events are mistakenly passed to subframes
        if the mouse is over the border or padding area of the frame.  Add
        a boolean flag, isOverWidget(), to hit test results so that EventHandler
        can check it to tell if the mouse is really over the content box of a
        RenderWidget and not just in the border/padding area.

        This is not testable, since the old code properly recovered when it detected
        that the mouse was outside the bounds of the view, but this prevents
        the extra passdown from even occurring (and is basically a nice cleanup).

        Reviewed by Oliver Hunt

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::subframeForHitTestResult):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleWheelEvent):
        * page/MouseEventWithHitTestResults.h:
        (WebCore::MouseEventWithHitTestResults::isOverWidget):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::isOverWidget):
        (WebCore::HitTestResult::setIsOverWidget):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::nodeAtPoint):
        * rendering/RenderWidget.h:

2008-09-21  David Hyatt  <hyatt@apple.com>

        Rename FrameView's repaintRectangle method to repaintContentRectangle.  Make
        both it and ScrollView's updateContents method be off-limits to everyone in
        WebCore except for RenderView.

        Make repaintViewRectangle the only possible method for WebCore code to do
        an invalidation.  This ensures that all invalidates triggered by WebCore
        cross-platform code that cross ownerElement() boundaries are transform-aware.

        Make sure that iframes/frames contained inside objects that have transforms
        or reflections are not allowed to blit (this was already true for transparency).

        It is not possible to make a test for any of this, since iframe scrolling
        still doesn't work on Mac (since the invalidates are not being done
        through WebCore's cross-platform invalidation code but are instead going
        through NSScrollView's setNeedsDisplay still).

        Reviewed by Oliver Hunt

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::recomputeCaretRect):
        (WebCore::SelectionController::invalidateCaretRect):
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::endDeferredRepaints):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayerExtended):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::enclosingPositionedAncestor):
        (WebCore::RenderLayer::requiresSlowRepaints):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasTransform):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::setSelection):

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

        Reviewed by Darin.

        - introduce a TypeInfo class, for holding per-type (in the C++ class sense) date in StructureID
        https://bugs.webkit.org/show_bug.cgi?id=20981
        
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::createDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::getDOMStructure):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::createPrototype):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        * bindings/scripts/CodeGeneratorJS.pm:

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

        Reviewed by Maciej Stachowiak.

        - fix problem Maciej noticed where every JSNamedNodesCollection
          gets its own StructureID

        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection): Use
        getDOMStructure to get the structure.
        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::createPrototype): Return the
        object prototype.

2008-09-20  David Hyatt  <hyatt@apple.com>

        Make sure transformed scrollbars in overflow sections position
        properly.  This patch mimics the same behavior that works for
        iframes, namely making sure that the same code that dynamically
        adjusts iframe widget positions at paint time for fixed positioning
        and transforms also applies to scrollbars.  (This is as simple as passing
        in the current translation factor at paint time rather than crawling
        up the layer tree to compute a "false" absolute position.)

        An existing transform test covers this (although only a pixel result
        reveals the correct rendering).

        Reviewed by Darin Adler

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:

2008-09-21  Steve Falkenburg  <sfalken@apple.com>

        Removed unnecessary nested timer check.
        
        Rubber-stamped by Dan Bernstein.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):

2008-09-21  Steve Falkenburg  <sfalken@apple.com>

        Improve timer resolution on WinXP.
        https://bugs.webkit.org/show_bug.cgi?id=20979
        
        Removed last-chance timer. It should not be necessary.
        Change timeEndPeriod timer to fire in 300ms instead of 20ms. Calling timeBeginPeriod/timeEndPeriod too often throws off accuracy.
        Remove Vista checks. We now run the same code on both XP and Vista.
        
        Call through to JSC::getCurrentUTCTimeWithMicroseconds from WebCore::currentTime.
        The code previously called GetSystemTimeAsFileTime, which is always low-resolution on XP, even within timeBeginPeriod(1).
        
        Reviewed by Maciej Stachowiak.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::):
        (WebCore::TimerWindowWndProc):
        (WebCore::setSharedTimerFireTime):
        * platform/win/SystemTimeWin.cpp:
        (WebCore::currentTime):

2008-09-21  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by eseidel.  Landed by eseidel.

        All platforms use the DashArray in the GraphicsContext.

        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/cairo/SVGPaintServerGradientCairo.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/cairo/SVGPaintServerPatternCairo.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/cairo/SVGPaintServerSolidCairo.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * svg/graphics/qt/SVGPaintServerGradientQt.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/qt/SVGPaintServerQt.cpp:
        * svg/graphics/qt/SVGPaintServerSolidQt.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2008-09-21  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by eseidel.  Landed by eseidel.

        Moved DashArray to GraphicsContext.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/DashArray.h: Added.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setLineDash):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setLineDash):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setLineDash):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::applyStrokeStyleToContext):
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/cg/CgSupport.cpp:
        * svg/graphics/cg/CgSupport.h:

2008-09-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix linker warnings

        * WebCore.base.exp:

2008-09-20  Darin Adler  <darin@apple.com>

        - another try at fixing Qt

        * bridge/qt/qt_runtime.cpp: "using namespce WebCore"

2008-09-20  Darin Adler  <darin@apple.com>

        - blind attempt to fix Qt build

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue): Use regExpStructure instead
        of regExpPrototype to make a RegExpObject. There should really be
        some sort of public helper function for this. Same thing for
        DateInstance and dateStructure. For JSObject, use constructEmptyObject.
        (JSC::Bindings::):
        (JSC::Bindings::QtRuntimeMethod::QtRuntimeMethod): Use getDOMStructure.
        It is not correct to do this inside the constructor because it could
        cause a garbage collect while the QtRuntimeMethod object is half-
        allocated, which could lead to a crash; note that RuntimeMethod,
        QtRuntimeObjectImp, and RuntimeObjectImp have the same bug.
        * bridge/qt/qt_runtime.h: Add s_info and createPrototype.

2008-09-20  Collin Jackson  <collinj@webkit.org>

        Prefetch DNS for hyperlinks that the user mouses over.

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

        Reviewed by Sam Weinig.

        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):

2008-09-20  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        - finish https://bugs.webkit.org/show_bug.cgi?id=20858
          make each distinct C++ class get a distinct JSC::Structure

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter): Pass in a structure
        ID. Note that this makes a new structure every time -- we could
        optimize this slightly be caching and reusing a single one.

        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod): Create a unique structure using
        getDOMStructure.
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createPrototype): Added createPrototype so
        getDOMStructure will work.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell): Initialize m_window to
        0; needed in case garbage collection happens while creating the
        JSDOMWindow.

2008-09-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Seidel.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20950
          <rdar://problem/6234059> Reproducible assertion failure running svg/custom/acid3-test-77.html multiple times under guard malloc

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback): Changed to
        not include the first character in the extraCharsAvailable count.

2008-09-20  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Dan Bernstein.

        Fix memory leak.
        
        https://bugs.webkit.org/show_bug.cgi?id=20505

        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (GetTextExtent):

2008-09-20  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes. Added/removed build sources, and nativeWindow->platformWidget updates.

        * WebCoreSources.bkl:
        * platform/ScrollView.h:
        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::show):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintButton):
        (WebCore::RenderThemeWx::paintTextField):
        (WebCore::RenderThemeWx::paintMenuList):
        (WebCore::RenderThemeWx::paintMenuListButton):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::setPlatformWidget):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::isScrollViewScrollbar):
        (WebCore::ScrollView::adjustScrollbars):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::removeChild):
        * platform/wx/WidgetWx.cpp:
        * plugins/wx/PluginViewWx.cpp:
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::updatePluginWidget):

2008-09-20  Timothy Hatcher  <timothy@apple.com>

        Fix the new Node Search button image to not be blurry.

        * page/inspector/Images/nodeSearchButtons.png:

2008-09-20  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Cut down some of the inspector javascript -> InspectorController glue code
        with two new macros. Also rearrange the exposed function list to be grouped
        by implementation and to all explicitly use the WebCore namespace.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::windowScriptObjectAvailable):

2008-09-20  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Fix regression from my previous patch where the breadcrumbs bar was not displayed.

        * page/inspector/inspector.css:

2008-09-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Refactor HTMLImageLoader/SVGImageLoader code.
        Move html/HTMLImageLoader.* to loader/ImageLoader.*

        Let HTMLImageLoader & SVGImageLoader inherit from the new base class.
        SVGImageLoader used to inherit from HTMLImageLoader which is awkward.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/Document.cpp:
        (WebCore::Document::dispatchImageLoadEventSoon):
        (WebCore::Document::removeImage):
        (WebCore::Document::dispatchImageLoadEventsNow):
        * dom/Document.h:
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        (WebCore::HTMLImageLoader::~HTMLImageLoader):
        (WebCore::HTMLImageLoader::sourceURI):
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLImageLoader.h:
        * loader/DocLoader.h:
        * loader/ImageLoader.cpp: Copied from html/HTMLImageLoader.cpp.
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::setLoadingImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        * loader/ImageLoader.h: Copied from html/HTMLImageLoader.h.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::attach):
        (WebCore::SVGImageElement::insertedIntoDocument):
        (WebCore::SVGImageElement::imageSourceAttributeName):
        * svg/SVGImageElement.h:
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::SVGImageLoader):
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        (WebCore::SVGImageLoader::sourceURI):
        * svg/SVGImageLoader.h:

2008-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix.

        [qtwebkit] ScrollBar build fix after r36684.
        BackButtonPart was split into Start and End Part
        ForwardButtonPart was split into Start and End Part

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::scPart):
        (WebCore::scrollbarPart):
        (WebCore::styleOptionSlider):

2008-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix.

        [qtwebkit] Make qt_instance.cpp compile.
        Revision of 36675 introduced getDOMStructure to give unique
        structure id's to C++ classes. Catch up. RuntimeObjectImp assigns
        the the StructureID inside the c'tor, do the same in QtRuntimeObjectImp

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getRuntimeObject):

2008-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Nikolas Zimmermann.

        [svg] Change SVGLocatable to deal with a plain SVGElement
        There is no requirement in the code that we have to have a
        SVGStyledElement. Remove that artificial limitation and compile
        with SVGElement.

        * svg/SVGLocatable.cpp:
        * svg/SVGLocatable.h:

2008-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Nikolas Zimmermann.

        [svg] Use OwnPtr for the SVGExtensions to avoid custom lifetime
        management.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::svgExtensions):
        (WebCore::Document::accessSVGExtensions):
        * dom/Document.h:

2008-09-19  David Hyatt  <hyatt@apple.com>

        Fix for crash in updateTransitions.  Make sure to test for a style
        being null when comparing two RenderStyles.

        Reviewed by Oliver Hunt

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperGetter::equals):

2008-09-19  David Hyatt  <hyatt@apple.com>

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

        Roll out r36628 since it has caused horrible regressions with
        animated GIF CPU usage.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::startAnimation):
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::FrameData::clear):

2008-09-20  Alp Toker  <alp@nuanti.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=20913
        Avoid redudant includes

        Document.h is included excessively such that a modification to Document.h (or
        any of the header it includes itself) triggers a rebuild of many files
        including the whole of SVG and a lot of the JS bindings.

        Some of these includes can be avoided by only including Document.h where
        necessary.

        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSEventTargetBase.cpp:
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSEventTargetNode.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSCursorImageValue.cpp:
        * css/SVGCSSStyleSelector.cpp:
        * dom/make_names.pl:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimatedProperty.h:
        (WebCore::::baseValue):
        (WebCore::::setBaseValue):
        (WebCore::::startAnimation):
        (WebCore::::stopAnimation):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::accessDocumentSVGExtensions):
        * svg/SVGElement.h:
        * svg/SVGElementInstance.cpp:
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGFontElement.cpp:
        * svg/SVGFontFaceElement.cpp:
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGMPathElement.cpp:
        * svg/SVGViewSpec.cpp:

2008-09-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Antti & Eric.

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

        Finish HTMLScriptElement / SVGScriptElement unification.
        SVG <script> support is complete now, full SVGLoad event
        respecting the influence of the externalResourcesRequired attribute
        as well as SVGError event support. All other features shared with HTML.

        Tests: fast/dom/HTMLScriptElement/script-reexecution.html
               svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg
               svg/dom/SVGScriptElement/script-load-and-error-events.svg
               svg/dom/SVGScriptElement/script-reexecution.svg
               svg/dom/SVGScriptElement/script-set-href.svg

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::ScriptElementData):
        (WebCore::ScriptElementData::requestScript):
        * dom/ScriptElement.h:
        (WebCore::ScriptElementData::haveFiredLoadEvent):
        (WebCore::ScriptElementData::setHaveFiredLoadEvent):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::setCreatedByParser):
        (WebCore::SVGScriptElement::parseMappedAttribute):
        (WebCore::SVGScriptElement::svgAttributeChanged):
        (WebCore::SVGScriptElement::insertedIntoDocument):
        (WebCore::SVGScriptElement::removedFromDocument):
        (WebCore::SVGScriptElement::childrenChanged):
        (WebCore::SVGScriptElement::isURLAttribute):
        (WebCore::SVGScriptElement::finishParsingChildren):
        (WebCore::SVGScriptElement::type):
        (WebCore::SVGScriptElement::setType):
        (WebCore::SVGScriptElement::haveLoadedRequiredResources):
        (WebCore::SVGScriptElement::dispatchLoadEvent):
        (WebCore::SVGScriptElement::dispatchErrorEvent):
        * svg/SVGScriptElement.h:

2008-09-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20951
          Typo in Position::getInlineBoxAndOffset()
          and add an assertion

        Without the fix, the newly-added assertion fails in platform/mac/editing/input/caret-primary-bidi.html

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::positionForOffset):

2008-09-19  David Hyatt  <hyatt@apple.com>

        Add support for hit testing of all five possible scrollbar button placements. 

        Reviewed by Sam Weinig

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::):
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::ScrollbarThemeMac::trackRect):
        (WebCore::ScrollbarThemeMac::paintButton):

2008-09-19  Darin Adler  <darin@apple.com>

        - try to fix Qt build

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp): Add structure argument.
        (JSC::Bindings::QtInstance::getRuntimeObject): Ditto.
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp): Add an overload just for Qt.
        * bridge/runtime_object.h: Ditto.

2008-09-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

        Transition starts running when it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=20892

        When there is a transition and an animation on the
        same element, make sure the animation wins.

        The fix is to save the unanimated style when an animation is started.
        Then, when starting a transition, check to see if there is a current
        animation on the same prop. If so, use the unanimated style as the
        fromStyle rather than the current style.

        Test: animations/transition-and-animation-1.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::reset):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::hasAnimationForProperty):
        * page/animation/KeyframeAnimation.h:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::unanimatedStyle):

2008-09-19  David Hyatt  <hyatt@apple.com>

        Add support for painting/hit testing of four possible scrollbar buttons.
        The Windows themes simply ignore the two parts that they will never
        show.  The Mac theme also ignores the other two buttons for now.

        The cross-platform base for all three themes, ScrollbarThemeComposite,
        has all the proper support though.

        Reviewed by Sam Weinig

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        * platform/ScrollbarThemeComposite.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::ScrollbarThemeMac::paintButton):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::backButtonRect):
        (WebCore::ScrollbarThemeSafari::forwardButtonRect):
        (WebCore::ScrollbarThemeSafari::paintButton):
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::backButtonRect):
        (WebCore::ScrollbarThemeWin::forwardButtonRect):
        (WebCore::ScrollbarThemeWin::paintButton):
        * platform/win/ScrollbarThemeWin.h:

2008-09-19  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Bug 17772: Inspector should support point-and-click to select a node to inspect
        https://bugs.webkit.org/show_bug.cgi?id=17772
        <rdar://problem/5792395>

        * English.lproj/localizedStrings.js:
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        * page/InspectorController.cpp:
        (WebCore::toggleNodeSearch):
        (WebCore::searchingForNode):
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::toggleSearchForNodeInPage):
        (WebCore::InspectorController::mouseDidMoveOverElement):
        (WebCore::InspectorController::handleMousePressOnNode):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * page/InspectorController.h:
        (WebCore::InspectorController::searchingForNodeInPage):
        * page/inspector/ElementsPanel.js:
        * page/inspector/Images/nodeSearchButtons.png: Added.
        * page/inspector/inspector.css:

2008-09-19  David Hyatt  <hyatt@apple.com>

        Add new scrollbar parts to be able to represent back and forward buttons
        at either end of the scrollbar.  The current scrollbar still just draws
        a single button at either end, but the parts now exist.

        Reviewed by Sam Weinig

        * platform/ScrollTypes.h:
        (WebCore::):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::autoscrollTimerFired):
        (WebCore::Scrollbar::pressedPartScrollDirection):
        (WebCore::Scrollbar::pressedPartScrollGranularity):
        (WebCore::Scrollbar::handleMouseMoveEvent):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::buttonsPlacement):
        (WebCore::ScrollbarTheme::invalidateParts):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        * platform/ScrollbarThemeComposite.h:

2008-09-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6231308> crash in AutoTableLayout

        The code assumes later on that a TableSection's grid's row vector 
        will never be empty. So make 1 the minimum number of columns.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows):

2008-09-19  David Hyatt  <hyatt@apple.com>

        Add a new ScrollbarButtonsPlacement type for specifying where
        the button arrows are in a scrollbar.

        Read in the placement settings for Mac.  Nothing is done with the
        setting yet.

        Add a new buttonsPlacement() method to ScrollbarTheme composite
        so that the arrow settings can be obtained.

        Reviewed by Sam Weinig

        * platform/ScrollTypes.h:
        (WebCore::):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::buttonsPlacement):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::updateArrowPlacement):
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):

2008-09-19  Steve Falkenburg  <sfalken@apple.com>

        Roll out r36626. It is causing variance in SunSpider numbers on XP.
        
        Rubber stamped by Mark Rowe.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::isRunningOnVistaOrLater):
        (WebCore::setSharedTimerFireTime):

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

        Reviewed by Tim.

        https://bugs.webkit.org/show_bug.cgi?id=20942
        Bug 20942: Repeated messages in resources don't collapse
        - Now repeated messages in a resource's view are collapsed and a message
        says how many were repeated.

        * English.lproj/localizedStrings.js:
        * manual-tests/inspector/multiple-console-messages.html:
        * page/inspector/Console.js: Send all the messages to the resource's
        view before possibly returning early if the message is a repeat.
        * page/inspector/SourceFrame.js: Add the text about the message being
        repeated, if it is, and increment it when necessary.

2008-09-19  Chris Fleizach  <cfleizach@apple.com>

        Removed unnecessary #if

        * page/mac/AccessibilityObjectWrapper.mm:

2008-09-19  David Hyatt  <hyatt@apple.com>

        Read in prefs for the scroll delay repeat values for buttons.  Also
        honor the option-click pref for jumping to the thumb when clicking in
        the track.

        Reviewed by Sam Weinig

        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::initialAutoscrollTimerDelay):
        (WebCore::ScrollbarThemeMac::autoscrollTimerDelay):
        (WebCore::ScrollbarThemeMac::shouldCenterOnThumb):

2008-09-19  David Hyatt  <hyatt@apple.com>

        Move ScrollbarThemeMac.cpp to ScrollbarThemeMac.mm so it can use Obj-C.
        Set the initial button repeat delay to 0.5 for Mac.

        Reviewed by Sam Weinig

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/ScrollbarThemeMac.cpp: Removed.
        * platform/mac/ScrollbarThemeMac.h:
        (WebCore::ScrollbarThemeMac::initialAutoscrollTimerDelay):
        * platform/mac/ScrollbarThemeMac.mm: Copied from platform/mac/ScrollbarThemeMac.cpp.

2008-09-19  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - part 2 of https://bugs.webkit.org/show_bug.cgi?id=20858
          make each distinct C++ class get a distinct JSC::Structure

          + Fixed all cases where we were using a shared structure for multiple
            C++ classes in WebCore. This still has to be done in JavaScriptCore.

          + Got rid of cacheGlobalObject.

          + Improved use of PassRefPtr in bindings code.

          + Removed a couple cases where we were potentially allocating prototypes
            inside a JSObject's construction process -- this can lead to trouble if
            we do a garbage collection while an object is only partly constructed.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor): Create a structure explicitly
        so we don't implicitly share the structure with other objects that use the object
        prototype.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMConstructor): Added. To be used for constructors so we
        don't need cacheGlobalObject any more.
        (WebCore::cacheDOMConstructor): Ditto.

        * bindings/js/JSDOMBinding.h: Removed DOMObject constructor that takes a prototype.
        Added functions and a function template for getting cached DOM constructors.
        Removed cacheGlobalObject function template.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase): Take a PassRefPtr<DOMWindow> since
        we're taking ownership.
        * bindings/js/JSDOMWindowBase.h: Changed constructor to take PassRefPtr, since
        we're taking ownership. Added constructor map.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::mark): Mark the constructors in the map.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell): Take a PassRefPtr<DOMWindow> since
        we're taking ownership. Use the new setWindow function to create the JSDOMWindow;
        this is now done in only that one place.
        (WebCore::JSDOMWindowShell::setWindow): Added. Creates the JSDOMWindow based on
        the passed-in DOMWindow. Code was moved here and changed to allocate unique
        structures for both the window prototype and the window.
        * bindings/js/JSDOMWindowShell.h: Ditto.

        * bindings/js/JSEventTargetBase.h: Changed class template argument so it doesn't
        have the same name (JSEventTarget) as an actual class. Removed unhelpful use of
        private/friend in JSEventTargetBase. Removed comments referring to defunct
        macros. Changed JSEventTargetBasePrototype to get the prototype with the new
        rather than its own copy of cacheGlobalObject (I missed this during pass 1).
        Changed JSEventTargetBasePrototype so it doesn't have so many template arguments.

        * bindings/js/JSEventTargetNode.cpp: Added s_info; needed for the new scheme
        for caching structures and prototypes.
        (WebCore::JSEventTargetNode::JSEventTargetNode): Use PassRefPtr.
        (WebCore::JSEventTargetNode::createPrototype): Added.
        * bindings/js/JSEventTargetNode.h: Updated for above changes.

        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection): Use PassRefPtr.
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems): Pass ExecState instead of prototype.
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter): Ditto.
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase): Use PassRefPtr.
        * bindings/js/JSHTMLInputElementBase.h: Ditto.
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        Create a unique structure instead of sharing.
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor): Ditto.

        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap): Removed overload that takes
        a prototype rather than a structure. Made the use of inheritorID() here
        explicit.
        * bindings/js/JSInspectedObjectWrapper.h: Ditto.
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap): Ditto.
        * bindings/js/JSInspectorCallbackWrapper.h: Ditto.

        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection): Changed to
        take an ExecState argument instead of a prototype. Create a unique
        StructureID instead of sharing.
        * bindings/js/JSNamedNodesCollection.h: Ditto.

        * bindings/js/JSQuarantinedObjectWrapper.cpp: Removed overloaded
        constructor that takes a prototype instead of a structure.
        * bindings/js/JSQuarantinedObjectWrapper.h: Ditto.

        * bindings/js/JSRGBColor.cpp:
        (WebCore::JSRGBColor::JSRGBColor): Take ExecState instead of a
        prototype; create a unique structure.
        (WebCore::getJSRGBColor): Ditto.
        * bindings/js/JSRGBColor.h: Ditto.

        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item): Use constructEmptyObject instead
        of explicit coding the idiom for making a new object.

        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        Create a unique structure instead of the shared one.
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        Ditto.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell): Let the window shell's
        setWindow function create the JSDOMWindow instead of doing it here.

        * bindings/scripts/CodeGeneratorJS.pm: Changed to use PassRefPtr for
        the structure and the wrapped object when creating wrappers.
        Simplified some of the special cases for DOMWindow so they are
        different only in ways the need to be. Eliminated the
        JSDOMWindow::createPrototype and JSDOMWindowPrototype::self
        functions. Moved responsibility for creating the structure and
        parent prototype out of the prototype constructor into the
        createPrototype function. Removed the unused "DoNotCache" flag for
        objects other than DOMWindow. Use getDOMConstructor instead of
        cacheGlobalObject for constructors. Make each constructor have
        a unique structure ID.

        * bridge/objc/objc_runtime.h: Added createPrototype and changed the
        name of the info member to s_info so we can use the standard DOM
        binding macros to handl the prototype.
        * bridge/objc/objc_runtime.mm: Fixed namespacing a bit.
        (JSC::Bindings::ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        Create a unique structure using getDOMStructure.

        * bridge/runtime_array.cpp: Fixed namespacing a bit.
        (JSC::RuntimeArray::RuntimeArray): Create a unique structure using
        getDOMStructure.
        * bridge/runtime_array.h: Added createPrototype so getDOMStructure
        will work.

        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp): Create a unique structure using
        getDOMStructure.
        * bridge/runtime_object.h: Added createPrototype so getDOMStructure
        will work.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Let the window shell's
        setWindow function create the JSDOMWindow instead of doing it here.

        * page/DOMWindow.idl: Removed DoNotCache, which is no longer used.

2008-09-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        This optimization was suggested by Daniel Fenwick

        - speed up measuring text on the Core Text code path by not specifying a paragraph writing direction

        Specifying LTR paragraph directionality when measuring runs of RTL text
        resulted in typically two CTRuns being generated for every run instead
        of one, due to the leading space being reordered to the left.

        * platform/graphics/SimpleFontData.h: Removed the ltr parameter to
        getCFStringAttributes() and changed m_CFStringAttributes from an array
        to a single value.
        * platform/graphics/mac/CoreTextController.cpp:
        (WebCore::CoreTextController::CoreTextController): Added a
        mayUseNaturalWritingDirection parameter.
        (WebCore::CoreTextController::collectCoreTextRunsForCharacters): Changed
        to force the bidi embedding level whenever 
        m_mayUseNaturalWritingDirectrion is false. Since this is now a common
        case, made the typesetter options dictionaries static.
        * platform/graphics/mac/CoreTextController.h:
        * platform/graphics/mac/FontMacCoreText.cpp:
        (WebCore::Font::selectionRectForComplexText): Renamed a local variable.
        (WebCore::Font::floatWidthForComplexText): Changed to allow the
        CoreTextController to not set the writing direction.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCFStringAttributes): Removed the ltr
        parameter and the paragraph style attribute.

2008-09-19  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig

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

        Incorrect height calculation for replaced element inside nested
        positioned elements (where the inner has a percentage height and
        the outer implicitly has a fixed height because of explicit top/bottom
        values).

        Added fast/block/positioning/replaced-inside-top-bottom.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::availableHeightUsing):

2008-09-19  Chris Fleizach  <cfleizach@apple.com>

        Fix Tiger bustage

        * page/mac/AccessibilityObjectWrapper.mm:

2008-09-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6211041> Expose legend tag in accessibility

        Exposes the legend tag as the titleUIElement of a fieldset

        Test: accessibility/legend.html

        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isFieldset):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isFieldset):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        * page/AccessibilityRenderObject.h:
        * rendering/RenderFieldset.h:

2008-09-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6213171> WebKit should use new array-centric methods for AX performance

        Implement a few AX API methods that will be called by AppKit, which will 
        speed up access to accessibility objects

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2008-09-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qtwebkit] Set the m_should* flags to their proper value on entry
        With plugins it was possible that we finished a job twice. This was
        some kind of reentrancy in QNetworkReplyHandler::sendQueuedItems. By
        setting the flag to (m_loadMode == LoadDeferred) they will always have
        the right value and we will not send responses twice.

        * platform/network/qt/QNetworkReplyHandler.cpp:

2008-09-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qtwebkit] Pass test 70 of acid3. Handle text decoding errors
        Handle text decoding errors before instructing the parser to parse. We
        have converted the text to QString and all encoding errors are gone and
        the parser will not be able to detect them. So handle them before parsing.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::doWrite):

2008-09-18  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        - part 1 of https://bugs.webkit.org/show_bug.cgi?id=20858
          make each distinct C++ class get a distinct JSC::Structure

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::customPut): Use setDOMException
        instead of DOMExceptionTranslator.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMObjectWrapper): Updated function name.
        (WebCore::cacheDOMObjectWrapper): Ditto.
        (WebCore::forgetDOMObject): Ditto.
        (WebCore::getCachedDOMNodeWrapper): Ditto.
        (WebCore::forgetDOMNode): Ditto.
        (WebCore::cacheDOMNodeWrapper): Ditto.
        (WebCore::forgetAllDOMNodesForDocument): Ditto.
        (WebCore::markDOMNodesForDocument): Ditto.
        (WebCore::updateDOMNodeDocument): Ditto.
        (WebCore::getCachedDOMStructure): Added.
        (WebCore::createDOMStructure): Ditto.

        * bindings/js/JSDOMBinding.h: Get rid of the ScriptInterpreter
        class and replace the static member functions with non-member
        functions. Added many other functions for getting at structures,
        prototypes, wrappers, and creating them. Also moved the
        cacheGlobalObject function here from JavaScriptCore; eventually
        I'll remove that once I get rid of the remaining callers. Also
        removed the DOMExceptionTranslator class.

        * bindings/js/JSDOMWindowBase.h: Added JSDOMStructureMap type,
        and put one of those maps in each window.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::markDOMObjectWrapper): Updated for function name change.
        (WebCore::JSDOMWindow::mark): Added code to mark all the structures
        in the structure map.

        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::JSEventTargetNode): Changed to take
        a structure instead of a prototype.
        * bindings/js/JSEventTargetNode.h: Ditto.
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection): Ditto.

        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase): Removed
        use of the JSC_IMPLEMENT_PROTOTYPE macro, and changed to take a
        structure instead of a prototype.
        * bindings/js/JSHTMLInputElementBase.h: Removed use of the
        JSC_DEFINE_PROTOTYPE_WITH_PROTOTYPE macro, and changed constructor
        to take a structure instead of a prototype. Created a dummy prototype
        class that causes the HTMLInputElement prototype to have the
        HTMLElement prototype.

        * bindings/scripts/CodeGeneratorJS.pm: Change constructors to take
        structures instead of prototypes. Changed the prototype self function
        to use the getDOMPrototype function -- later we can eliminate it and
        have callers invoke getDOMPrototype directly instead. Updated other
        functions that have name changes. Added code to generate the
        createPrototype member function. Changed use of cacheGlobalObject to
        get it from the WebCore namespace instead of the JSC namespace.
        Changed cacheDOMObject calls to use getDOMObjectWrapper instead.

        * dom/Document.cpp:
        (WebCore::Document::~Document): Updated for name change and also
        removed unnecessary JSLock use -- there's no need to lock around this.
        * dom/Node.cpp:
        (WebCore::Node::setDocument): Ditto.

        * dom/make_names.pl: Changed to use CREATE_DOM_NODE_WRAPPER macro
        instead of calling new directly.

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS): Updated for function name changes and used the
        CREATE_DOM_OBJECT_WRAPPER macro.
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSCanvasPixelArrayCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::mark): Ditto.
        (WebCore::toJS): Ditto.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated): Ditto.
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::jsEventTargetDispatchEvent): Use setDOMException instead
        of DOMExceptionTranslator.
        (WebCore::toJS): Updated for function name changes and used the
        CREATE_DOM_OBJECT_WRAPPER macro.
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::mark): Ditto.
        (WebCore::createWrapper): Ditto.
        (WebCore::toJS): Ditto.
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): Ditto.
        (WebCore::JSStyleSheet::mark): Ditto.
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated): Ditto.
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::constructXMLHttpRequest): Ditto.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark): Ditto.
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::mark): Ditto.
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::constructXSLTProcessor): Ditto.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::finishedWithEvent): Ditto.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously): Ditto.
        (WebCore::XMLHttpRequest::dropProtection): Ditto.

2008-09-18  David Hyatt  <hyatt@apple.com>

        This patch gets a viewless scrollbar working on Mac. It is turned off
        by default.  Hit testing works.  For now the scrollbar just paints ugly
        debug rects in the place of the buttons, track and thumb.  It does match
        Aqua metrics though.

        Reviewed by Sam Weinig

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::trackPosition):
        * platform/ScrollbarThemeComposite.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        * platform/mac/ScrollbarThemeMac.cpp:
        (WebCore::):
        (WebCore::ScrollbarThemeMac::hasButtons):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::buttonRepaintRect):
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::trackRepaintRect):
        (WebCore::ScrollbarThemeMac::trackRect):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeMac::paintTrack):
        (WebCore::ScrollbarThemeMac::paintButton):
        (WebCore::ScrollbarThemeMac::paintThumb):
        * platform/mac/ScrollbarThemeMac.h:
        (WebCore::ScrollbarThemeMac::supportsControlTints):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::trackPosition):

2008-09-18  Collin Jackson  <collinj@webkit.org>

        Build fix; added missing header file to GNUmakefile.am

        * GNUmakefile.am:

2008-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by David "the Hair" Hyatt.

        Move DataRef, SVGRenderStyle and SVGRenderStyleDefs in render/style.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/DataRef.h: Removed.
        * rendering/SVGRenderStyle.cpp: Removed.
        * rendering/SVGRenderStyle.h: Removed.
        * rendering/SVGRenderStyleDefs.cpp: Removed.
        * rendering/SVGRenderStyleDefs.h: Removed.
        * rendering/style/DataRef.h: Copied from rendering/DataRef.h.
        * rendering/style/SVGRenderStyle.cpp: Copied from rendering/SVGRenderStyle.cpp.
        * rendering/style/SVGRenderStyle.h: Copied from rendering/SVGRenderStyle.h.
        * rendering/style/SVGRenderStyleDefs.cpp: Copied from rendering/SVGRenderStyleDefs.cpp.
        * rendering/style/SVGRenderStyleDefs.h: Copied from rendering/SVGRenderStyleDefs.h.

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

        Reviewed by Dan Bernstein.

        Add a means of clearing a FrameTree's name.

        * WebCore.base.exp:
        * page/FrameTree.cpp:
        (WebCore::FrameTree::clearName):
        * page/FrameTree.h:

2008-09-18  David Hyatt  <hyatt@apple.com>

        Eliminate addToSuperview from Widget, since it was only called
        by ScrollViewMac's addChild method.  Just shift the original body
        of addToSuperView into addChild.

        Reviewed by Sam Weinig

        * platform/Widget.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        * platform/mac/WidgetMac.mm:

2008-09-18  Collin Jackson  <collinj@webkit.org>

        Reviewed by Antti Koivisto and Mark Rowe.

        Test: http/tests/misc/dns-prefetch-control.html

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

        Invoke WebCore::prefetchDNS() on host names that appear in
        in the href of hyperlinks and <link rel="dns-prefetch">. This 
        can be used to implement DNS prefetching.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::setSecurityOrigin):
        (WebCore::Document::initDNSPrefetch):
        (WebCore::Document::parseDNSPrefetchControlHeader):
        * dom/Document.h:
        (WebCore::Document::isDNSPrefetchEnabled):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.h:
        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::processAttribute):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * platform/gtk/TemporaryLinkStubs.cpp:
        (WebCore::prefetchDNS):
        * platform/network/DNS.h: Added.
        * platform/network/cf/DNSCFNet.cpp: Added.
        (WebCore::prefetchDNS):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::prefetchDNS):
        * platform/wx/TemporaryLinkStubs.cpp:
        (WebCore::prefetchDNS):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Eliminate the convertToScreenCoordinate method on Widget, since
        ScrollView has redundant methods that already do the same thing.

        Reviewed by Sam Weinig

        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::containingWindow):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Move to only one constructor for Widgets.  Rename data to m_data and make
        it have an #ifdef only for platforms that have platform-specific data (Mac
        and Gtk).

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * platform/Widget.cpp:
        (WebCore::Widget::init):
        * platform/Widget.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::cursor):
        (WebCore::Widget::setCursor):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::addToSuperview):
        (WebCore::Widget::removeFromSuperview):
        (WebCore::Widget::beforeMouseDown):
        (WebCore::Widget::afterMouseDown):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::Widget):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::Widget):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Move Qt's isNPAPIPlugin boolean from Widget down to PluginView, since there
        was no reason for it to be on Widget.  This change eliminates Qt ifdefs
        from Widget.

        Reviewed by Sam Weinig

        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        (WebCore::PluginView::isNPAPIPlugin):
        (WebCore::PluginView::setIsNPAPIPlugin):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Make geometryChanged() cross-platform on Widget.  GTK and WIN platform
        ifdefs are now gone from Widget!

        Reviewed by Sam Weinig

        * platform/Widget.h:
        (WebCore::Widget::geometryChanged):
        * platform/gtk/WidgetGtk.cpp:
        * platform/qt/WidgetQt.cpp:

2008-09-18  David Hyatt  <hyatt@apple.com>

        Consolidate convertTo/FromContainingWindow methods so that all platforms
        but Mac share the same code.

        Move convertSelfToChild and convertChildToSelf to ScrollView, since
        Widget should know nothing about children.  Make the methods cross-platform
        on ScrollView.

        Reviewed by Sam Weinig

        * platform/ScrollView.h:
        (WebCore::ScrollView::convertChildToSelf):
        (WebCore::ScrollView::convertSelfToChild):
        * platform/Widget.cpp:
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):
        * platform/Widget.h:
        (WebCore::Widget::geometryChanged):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::isScrollViewScrollbar):
        * platform/gtk/WidgetGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::isScrollViewScrollbar):
        * platform/mac/WidgetMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::isScrollViewScrollbar):
        * platform/qt/WidgetQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::isScrollViewScrollbar):
        * platform/win/WidgetWin.cpp:

2008-09-18  David Hyatt  <hyatt@apple.com>

        Make the conversion methods that go to and from some containingWindow
        cross-platform.  Implement them on Mac.

        Reviewed by Sam Weinig

        * platform/Widget.h:
        (WebCore::Widget::setContainingWindow):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertToContainingWindow):

2008-09-18  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David "Yeah-yeah" Hyatt.

        Cleanup RenderStyle.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/style/CounterContent.h:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2008-09-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig

        Fixed https://bugs.webkit.org/show_bug.cgi?id=20908
        Now TransformOperations and AnimationList no longer
        inherit from Vector<> but rather have API to access.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createTransformOperations):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::validateTransformFunctionList):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::validateTransformFunctionList):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateReflectionStyle):
        * rendering/style/AnimationList.cpp:
        (WebCore::AnimationList::operator==):
        * rendering/style/AnimationList.h:
        (WebCore::AnimationList::operator!=):
        (WebCore::AnimationList::size):
        (WebCore::AnimationList::isEmpty):
        (WebCore::AnimationList::resize):
        (WebCore::AnimationList::remove):
        (WebCore::AnimationList::append):
        (WebCore::AnimationList::animation):
        * rendering/style/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::updateKeyframes):
        (WebCore::RenderStyle::applyTransform):
        (WebCore::RenderStyle::adjustAnimations):
        (WebCore::RenderStyle::adjustTransitions):
        (WebCore::RenderStyle::transitionForProperty):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasTransform):
        * rendering/style/TransformOperations.cpp:
        (WebCore::TransformOperations::TransformOperations):
        (WebCore::TransformOperations::operator==):
        * rendering/style/TransformOperations.h:
        (WebCore::TransformOperations::apply):
        (WebCore::TransformOperations::operations):

2008-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix.

        [qt] Build fixes after the Widget/ScrollView cleanup
        topLevel() is now root()


        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):

2008-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

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

        XMLTokenizer.cpp used to contain two different implementations. One was using
        libxml2 and the other was using the Qt XML StreamReader. Clean up the code by
        separating the two implementations from each other.
        Common code and some small bits are kept inside the XMLTokenizer.cpp, the Qt code
        was moved to XMLTokenizerQt.cpp and the Libxml2 based code was moved to
        XMLTokenizerLibxml2.cpp. There should be no functional changes.

        Attempt to add XMLTokenizerLibxml2.cpp to every buildsystem so the build continues
        to work.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/XMLTokenizer.cpp:
        (WebCore::isScriptElement):
        (WebCore::castToScriptElement):
        (WebCore::XMLTokenizer::setCurrentNode):
        (WebCore::XMLTokenizer::write):
        (WebCore::XMLTokenizer::eventuallyMarkAsParserCreated):
        (WebCore::XMLTokenizer::enterText):
        (WebCore::toString):
        (WebCore::XMLTokenizer::exitText):
        (WebCore::XMLTokenizer::end):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * dom/XMLTokenizer.h:
        (WebCore::XMLTokenizer::wellFormed):
        * dom/XMLTokenizerLibxml2.cpp: Copied from WebCore/dom/XMLTokenizer.cpp.
        (WebCore::createMemoryParser):
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::doWrite):
        (WebCore::ignorableWhitespaceHandler):
        (WebCore::XMLTokenizer::initializeParserContext):
        (WebCore::XMLTokenizer::doEnd):
        (WebCore::XMLTokenizer::lineNumber):
        (WebCore::XMLTokenizer::columnNumber):
        (WebCore::XMLTokenizer::stopParsing):
        (WebCore::XMLTokenizer::resumeParsing):
        (WebCore::parseXMLDocumentFragment):
        (WebCore::attributesStartElementNsHandler):
        (WebCore::parseAttributes):
        * dom/XMLTokenizerQt.cpp: Copied from WebCore/dom/XMLTokenizer.cpp.
        (WebCore::EntityResolver::resolveUndeclaredEntity):
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::doWrite):
        (WebCore::XMLTokenizer::initializeParserContext):
        (WebCore::XMLTokenizer::doEnd):
        (WebCore::XMLTokenizer::lineNumber):
        (WebCore::XMLTokenizer::columnNumber):
        (WebCore::XMLTokenizer::stopParsing):
        (WebCore::XMLTokenizer::resumeParsing):
        (WebCore::parseXMLDocumentFragment):
        (WebCore::attributesStartElementNsHandler):
        (WebCore::parseAttributes):
        (WebCore::):

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

        Reviewed by Geoff Garen.

        Build fix for non-Mac builds.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):

2008-09-18  Peter Kasting  <pkasting@google.com>

        Reviewed by hyatt.  Landed by eseidel.

        https://bugs.webkit.org/show_bug.cgi?id=20745
        Animated GIFs do not animate properly with (at least) CG.

        * WebCore\platform\graphics\BitmapImage.cpp:
        * WebCore\platform\graphics\BitmapImage.h:
        * WebCore\platform\graphics\cairo\ImageCairo.cpp:
        * WebCore\platform\graphics\cg\ImageCG.cpp:
        * WebCore\platform\graphics\qt\ImageQt.cpp:
        * WebCore\platform\graphics\wx\ImageWx.cpp:

2008-09-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/6224222> AX: should not expose a <table> as an AXTable if ARIA 
        role specifies otherwise

        If a <table> isn't an AXTable, the rows and cells should default to AccessibilityRenderObject

        Test: accessibility/table-with-aria-role.html

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::roleValue):
        (WebCore::AccessibilityTable::accessibilityIsIgnored):
        (WebCore::AccessibilityTable::title):
        * page/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::accessibilityIsIgnored):
        (WebCore::AccessibilityTableCell::isTableCell):
        (WebCore::AccessibilityTableCell::roleValue):
        * page/AccessibilityTableCell.h:
        * page/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::roleValue):
        (WebCore::AccessibilityTableRow::isTableRow):
        (WebCore::AccessibilityTableRow::accessibilityIsIgnored):
        * page/AccessibilityTableRow.h:

2008-09-18  Steve Falkenburg  <sfalken@apple.com>

        Use higher-resolution timers on all variants of Windows.
        
        Reviewed by Darin Adler.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::setSharedTimerFireTime):


2008-09-18  David Hyatt  <hyatt@apple.com>

        Make containingWindow() and setContainingWindow() cross-platform.
        Add a root() function cross-platform so Qt doesn't have to
        define its own.

        Reviewed by Darin Adler

        * platform/Widget.cpp:
        (WebCore::Widget::root):
        * platform/Widget.h:
        (WebCore::Widget::setContainingWindow):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::containingWindow):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::containingWindow):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::containingWindow):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::containingWindow):

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

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20515 Crash upon 
        parsing CSS: unicode-range: searchfield-cancel-buttonpt=-webkit-
        dashboard-region=
        and corresponding: <rdar://problem/6174100>

        This patch makes CSSParserValue::createCSSValue handle unknown 
        identifiers.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue): If we have an identifier 
        with no id (an unknown identifier) create a CSSPrimitiveValue of 
        type CSS_PARSER_IDENTIFIER
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):

2008-09-18  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David "I'd prefer not" Hyatt.

        More the remaining class out of RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/style/CursorData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::CursorData::CursorData):
        (WebCore::CursorData::operator==):
        (WebCore::CursorData::operator!=):
        * rendering/style/CursorList.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::CursorList::operator[]):
        (WebCore::CursorList::CursorList):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::deref):
        (WebCore::RenderStyle::hasOneRef):
        (WebCore::RenderStyle::InheritedFlags::operator!=):
        (WebCore::RenderStyle::NonInheritedFlags::operator!=):
        (WebCore::RenderStyle::hasBackground):
        (WebCore::RenderStyle::outlineWidth):
        (WebCore::RenderStyle::autoWrap):
        (WebCore::RenderStyle::preserveNewline):
        (WebCore::RenderStyle::collapseWhiteSpace):
        (WebCore::RenderStyle::isCollapsibleWhiteSpace):
        (WebCore::RenderStyle::breakOnlyAfterWhiteSpace):
        (WebCore::RenderStyle::breakWords):
        (WebCore::RenderStyle::outlineOffset):
        (WebCore::RenderStyle::setLeft):
        (WebCore::RenderStyle::setRight):
        (WebCore::RenderStyle::setTop):
        (WebCore::RenderStyle::setBottom):
        (WebCore::RenderStyle::setDashboardRegion):
        (WebCore::RenderStyle::setBackgroundColor):
        (WebCore::RenderStyle::setBorderImage):
        (WebCore::RenderStyle::setBorderRadius):
        (WebCore::RenderStyle::setFontDescription):
        (WebCore::RenderStyle::adjustBackgroundLayers):
        (WebCore::RenderStyle::adjustMaskLayers):
        (WebCore::RenderStyle::deleteBindingURIs):
        (WebCore::RenderStyle::inheritBindingURIs):
        (WebCore::RenderStyle::isDisplayReplacedType):
        (WebCore::RenderStyle::isDisplayInlineType):
        (WebCore::RenderStyle::isOriginalDisplayInlineType):
        * rendering/style/StyleInheritedData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleInheritedData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleInheritedData::operator!=):
        * rendering/style/StyleRareInheritedData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleRareInheritedData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleRareInheritedData::operator!=):
        * rendering/style/StyleRareNonInheritedData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleRareNonInheritedData.h: Copied from rendering/style/RenderStyle.h.
        * rendering/style/StyleReflection.h: Copied from rendering/style/RenderStyle.h.

2008-09-18  David Hyatt  <hyatt@apple.com>

        Move the concept of suppression invalidation on Widgets to Scrollbar
        instead.  Since this is only used by Scrollbars, there is no need for
        it to be on Widget.

        Reviewed by Sam Weinig

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::invalidateRect):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::suppressInvalidation):
        (WebCore::Scrollbar::setSuppressInvalidation):
        * platform/Widget.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::invalidateRect):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::invalidateRect):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::invalidateRect):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Make invalidate() on Widget non-virtual and make it just call
        invalidateRect() on the boundsGeometry() of the Widget.

        Reviewed by Dan Bernstein

        * platform/Widget.h:
        (WebCore::Widget::boundsGeometry):
        (WebCore::Widget::invalidate):
        * platform/gtk/WidgetGtk.cpp:
        * platform/mac/WidgetMac.mm:
        * platform/qt/WidgetQt.cpp:
        * platform/win/WidgetWin.cpp:
        * platform/wx/WidgetWx.cpp:

2008-09-18  Sam Weinig  <sam@webkit.org>

        Rubber-stamped in exile by David Hyatt.

        Split Animation, AnimationList, BindingURI, ContentData, CounterContent,
        KeyframeList, ShadowData, StyleFlexibleBoxData and TimingFunction out of
        RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * page/animation/CompositeAnimation.cpp:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:
        * rendering/RenderCounter.h:
        * rendering/style/Animation.cpp: Copied from rendering/style/RenderStyle.cpp.
        (WebCore::Animation::~Animation):
        (WebCore::Animation::animationsMatch):
        (WebCore::Animation::keyframeList):
        (WebCore::Animation::setAnimationKeyframe):
        * rendering/style/Animation.h: Copied from rendering/style/RenderStyle.h.
        * rendering/style/AnimationList.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/AnimationList.h: Copied from rendering/style/RenderStyle.h.
        * rendering/style/BindingURI.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/BindingURI.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::BindingURI::operator!=):
        * rendering/style/ContentData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/ContentData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::ContentData::ContentData):
        (WebCore::ContentData::~ContentData):
        * rendering/style/CounterContent.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::CounterContent::CounterContent):
        * rendering/style/CounterDirectives.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/CounterDirectives.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::CounterDirectives::CounterDirectives):
        * rendering/style/KeyframeList.cpp: Copied from rendering/style/RenderStyle.cpp.
        (WebCore::KeyframeList::insert):
        * rendering/style/KeyframeList.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::KeyframeValue::KeyframeValue):
        (WebCore::KeyframeList::create):
        (WebCore::KeyframeList::KeyframeList):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/ShadowData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/ShadowData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::~ShadowData):
        (WebCore::ShadowData::operator!=):
        * rendering/style/StyleFlexibleBoxData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleFlexibleBoxData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleFlexibleBoxData::operator!=):
        * rendering/style/TimingFunction.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::TimingFunction::TimingFunction):
        (WebCore::TimingFunction::operator==):

2008-09-18  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix RenderStyle leaks.

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::createSubtreeIfNeeded):

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

        Accidentally checked in code.

        * html/HTMLElementFactory.cpp:
        (WebCore::frameConstructor):
        (WebCore::iframeConstructor):

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

        Reviewed by Tim.

        <rdar://problem/5722310> gracefully handle too many console messages
        (20904)
        - Keep track of the most previous message and then compare it to the 
        subsequent messages as they come in.  If there are multiple of the same
        message create a count that indicates the current number.

        * manual-tests/inspector/multiple-console-messages.html: Added.
        * page/inspector/Console.js:
        * page/inspector/inspector.css:

2008-09-18  Jonathon Jongsma  <jonathon@quotidian.org>

        Reviewed by Alp Toker

        https://bugs.webkit.org/show_bug.cgi?id=20830
        [GTK] Don't use deprecated pango API

        Replace deprecated pango functions with non-deprecated ones for newer
        versions of pango

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::getDefaultPangoLayout):
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2008-09-18  Alp Toker  <alp@nuanti.com>

        Build fix for r36587. Add new sources (and sort the lists).

        * GNUmakefile.am:

2008-09-17  Sam Weinig  <sam@webkit.org>

        Fix Windows build.

        * WebCore.vcproj/WebCore.vcproj:

2008-09-17  David Hyatt  <hyatt@apple.com>

        Switch back to having frameGeometry be virtual in order to keep Mac
        the way it used to be.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * platform/Widget.cpp:
        (WebCore::Widget::setParent):
        * platform/Widget.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameGeometry):
        (WebCore::PluginView::geometryChanged):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix assertion in DOMWindow::adjustWindowRect where we were passing
        in garbage values and were getting lucky that they were a not Nan.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::windowProtoFuncOpen):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Fix gtk build.

        * rendering/style/MatrixTransformOperation.cpp:

2008-09-17  Sam Weinig  <sam@webkit.org>

        Rubber-stamped with love by David Hyatt.

        Split IdentityTransformOperation, MatrixTransformOperation, RotateTransformOperation, 
        ScaleTransformOperation, SkewTransformOperation, StyleTransformData, TransformOperation,
        TransformOperations and TranslateTransformOperation out of RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSStyleSelector.cpp:
        * page/animation/AnimationBase.cpp:
        (WebCore::solveEpsilon):
        * rendering/RenderLayer.cpp:
        * rendering/style/IdentityTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        * rendering/style/MatrixTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/MatrixTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::MatrixTransformOperation::MatrixTransformOperation):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/RotateTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/RotateTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::RotateTransformOperation::RotateTransformOperation):
        * rendering/style/ScaleTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/ScaleTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::ScaleTransformOperation::ScaleTransformOperation):
        * rendering/style/SkewTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/SkewTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::SkewTransformOperation::SkewTransformOperation):
        * rendering/style/StyleTransformData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleTransformData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleTransformData::operator!=):
        * rendering/style/TransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::TransformOperation::):
        * rendering/style/TransformOperations.cpp: Copied from rendering/style/RenderStyle.cpp.
        (WebCore::TransformOperations::TransformOperations):
        * rendering/style/TransformOperations.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::TransformOperations::operator!=):
        * rendering/style/TranslateTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/TranslateTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::TranslateTransformOperation::TranslateTransformOperation):

2008-09-17  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * rendering/style/StyleDashboardRegion.h:  PlatformString.h rather than String.h.

2008-09-17  David Hyatt  <hyatt@apple.com>

        (1) Inline a bunch of methods for accessing frame geometry.
        (2) Make sure frameGeometry() works even when you have no underlying
        native widget.
        (3) Cache a frame geometry rect cross-platform (even for widgets that
        have underlying native widgets.
        (4) PluginView's updateWindow call is now a virtual function on Widget.

        Reviewed by Sam Weinig

        * ChangeLog:
        * WebCore.base.exp:
        * platform/Widget.cpp:
        (WebCore::Widget::setFrameGeometry):
        * platform/Widget.h:
        (WebCore::Widget::x):
        (WebCore::Widget::y):
        (WebCore::Widget::width):
        (WebCore::Widget::height):
        (WebCore::Widget::size):
        (WebCore::Widget::pos):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::resize):
        (WebCore::Widget::move):
        (WebCore::Widget::isFrameView):
        (WebCore::Widget::windowClipRect):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::~Widget):
        (WebCore::Widget::updatePlatformWidgetFrameGeometry):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::updatePlatformWidgetFrameGeometry):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameGeometry):
        (WebCore::PluginView::geometryChanged):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePlatformWidgetFrameGeometry):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePlatformWidgetFrameGeometry):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePlatformWidgetFrameGeometry):
        * plugins/wx/PluginViewWx.cpp:

2008-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by David "Waterman" Hyatt.

        Fix a leak of NSViews in WidgetMac.mm.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::~Widget):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David Waterman Hyatt.

        Split FillLayer, StyleBackgroundData, StyleBoxData, StyleDashboardRegion, StyleMarqueeData
        StyleMultiColData and StyleVisualData out of RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/style/FillLayer.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/FillLayer.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::FillLayer::operator!=):
        (WebCore::FillLayer::hasImage):
        (WebCore::FillLayer::hasFixedImage):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleBackgroundData.cpp: Copied from rendering/style/RenderStyle.cpp.
        (WebCore::StyleBackgroundData::StyleBackgroundData):
        * rendering/style/StyleBackgroundData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleBackgroundData::~StyleBackgroundData):
        (WebCore::StyleBackgroundData::operator!=):
        * rendering/style/StyleBoxData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleBoxData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleBoxData::operator!=):
        * rendering/style/StyleDashboardRegion.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleDashboardRegion::operator!=):
        * rendering/style/StyleMarqueeData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleMarqueeData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleMarqueeData::operator!=):
        * rendering/style/StyleMultiColData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleMultiColData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleMultiColData::operator!=):
        (WebCore::StyleMultiColData::ruleWidth):
        * rendering/style/StyleVisualData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleVisualData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleVisualData::operator==):

2008-09-17  David Hyatt  <hyatt@apple.com>

        Remove WidgetClient from Widget.

        Reviewed by Sam Weinig

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Widget.h:
        (WebCore::Widget::setClient):
        (WebCore::Widget::client):
        * platform/WidgetClient.h: Removed.
        * platform/gtk/WidgetGtk.cpp:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::Widget):

2008-09-17  David Hyatt  <hyatt@apple.com>

        Remove isEnabled/setEnabled from Widget.  The concept of being enabled now
        only applies to Scrollbars so the method has been moved there and made
        cross-platform.  Scrollbar subclasses that have a corresponding native
        widget can subclass setEnabled to change the enabled state of the native
        widget.

        Reviewed by Sam Weinig & Darin Adler

        * WebCore.base.exp:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::enabled):
        (WebCore::Scrollbar::setEnabled):
        * platform/Widget.h:
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::setEnabled):
        * platform/gtk/ScrollbarGtk.h:
        * platform/gtk/WidgetGtk.cpp:
        * platform/mac/ScrollbarMac.h:
        * platform/mac/ScrollbarMac.mm:
        (WebCore::ScrollbarMac::scrollbarHit):
        (WebCore::ScrollbarMac::setEnabled):
        * platform/mac/WidgetMac.mm:
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        * platform/wx/WidgetWx.cpp:

2008-09-17  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David Hyatt.

        Split all RenderStyle enums into their own file.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/style/BorderValue.h:
        * rendering/style/CollapsedBorderValue.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:

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

        Add back isFrameView check to fix failed assertion during scroll bar teardown.
        
        Reviewed by Dave Hyatt.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setParent):

2008-09-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Mac build fix

        * WebCore.xcodeproj/project.pbxproj: Send appropriate headers to WebKit

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

        Fix build.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setParentVisible):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::init):

2008-09-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [QtWebKit] Implement error handling in TextCodecQt::decode
        Use the QTextCodec parsing state to set the sawError out variable. This
        is needed to pass Test 70 of acid3. The test case for this bug is
        fast/encoding/invalid-xml.html that is now partially passed. To pass
        it completely the Qt text codecs need to be adjusted to have proper
        error handling.

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::decode):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dave Hyatt.

        Split BorderData, BorderValue, CollapsedBorderValue, OutlineValue and StyleSurroundData
        out of RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/style/BorderData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::BorderData::hasBorderRadius):
        (WebCore::BorderData::borderLeftWidth):
        (WebCore::BorderData::borderRightWidth):
        (WebCore::BorderData::borderTopWidth):
        (WebCore::BorderData::borderBottomWidth):
        (WebCore::BorderData::operator!=):
        * rendering/style/BorderValue.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::):
        (WebCore::BorderValue::BorderValue):
        (WebCore::BorderValue::nonZero):
        (WebCore::BorderValue::isTransparent):
        (WebCore::BorderValue::isVisible):
        * rendering/style/CollapsedBorderValue.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::):
        (WebCore::CollapsedBorderValue::CollapsedBorderValue):
        (WebCore::CollapsedBorderValue::operator==):
        * rendering/style/OutlineValue.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::OutlineValue::OutlineValue):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleSurroundData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleSurroundData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleSurroundData::operator!=):

2008-09-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        This is a better fix for: Invalid CSS code crashes Safari
        https://bugs.webkit.org/show_bug.cgi?id=20512

        The spec indicates that the only valid input for a counter is a 
        number or an identifier. So that is exactly what we allow.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCounterContent):

2008-09-17  Alp Toker  <alp@nuanti.com>

        GTK+ build fix. Adapt to use PlatformWidget functions.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollViewScrollbar::geometryChanged):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::ScrollbarGtk):
        (ScrollbarGtk::~ScrollbarGtk):
        (ScrollbarGtk::geometryChanged):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Patch for <rdar://problem/6133884> 
        Calling window.resizeTo() on a subframe shouldn't change the window size

        Test: fast/dom/Window/window-resize-and-move-sub-frame.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::moveBy):
        (WebCore::DOMWindow::moveTo):
        (WebCore::DOMWindow::resizeBy):
        (WebCore::DOMWindow::resizeTo):

2008-09-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam Roben.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20512 Invalid CSS 
        code crashes Safari 
        and corresponding: <rdar://problem/6173832>

        Reading through the spec, it seems like a function is not valid 
        input for a counter. So this patch checks for that and bails in the 
        case of invalid input. 

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCounterContent):

2008-09-17  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Antti Koivisto.

        Fix <rdar://problem/6227089> 
        Crash in WebCore::Frame::setNeedsReapplyStyles()
        
        View is null checked elsewhere too.

        * page/Frame.cpp:
        (WebCore::Frame::setNeedsReapplyStyles):

2008-09-17  David Hyatt  <hyatt@apple.com>

        Make the notion of having a native widget backing a Widget cross-platform.
        The PlatformWidget abstraction (which already existed) is used for this.
             Windows = HWND
             Qt = QWidget
             Mac = NSView
             wx = wxWindow
             Gtk = GtkWidget

        There are new cross-platform methods that replace all of the unique
        platform-specific methods.
             platformWidget()
             setPlatformWidget()

        For plugins, on every platform except Qt on Windows, the plugin's native
        widget is now stored in the Widget base class.  Since Qt on Windows uses
        HWNDs for plugins instead of QWidget, it is the only platform to keep the
        m_window variable in PluginView.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper attachmentView]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::mouseDownViewIfStillGood):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        * platform/Widget.cpp:
        (WebCore::Widget::init):
        (WebCore::Widget::setParent):
        (WebCore::Widget::releasePlatformWidget):
        (WebCore::Widget::retainPlatformWidget):
        * platform/Widget.h:
        (WebCore::Widget::platformWidget):
        (WebCore::Widget::setPlatformWidget):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setFocus):
        (WebCore::gdkDrawable):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::paint):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::scrollView):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::inWindow):
        * platform/mac/ScrollbarMac.mm:
        (WebCore::ScrollbarMac::ScrollbarMac):
        (WebCore::ScrollbarMac::~ScrollbarMac):
        (WebCore::ScrollbarMac::updateThumbPosition):
        (WebCore::ScrollbarMac::updateThumbProportion):
        (WebCore::ScrollbarMac::scrollbarHit):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::getOuterView):
        (WebCore::Widget::paint):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::releasePlatformWidget):
        (WebCore::Widget::retainPlatformWidget):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::Widget):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::containingWindow):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::paint):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        (WebCore::PluginView::platformPluginWidget):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::init):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::~PluginView):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::~PluginView):
        (WebCore::PluginView::init):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Fix assert.

        * platform/Widget.cpp:
        (WebCore::Widget::setParent):

2008-09-17  David Hyatt  <hyatt@apple.com>

        Beginnings of Widget refactoring (in order to make the mixing of
        widgets with and without corresponding native widgets more cross-platform).

        This first patch makes the concept of a parent ScrollView cross-platform.

        Note the similarity of the show/hide methods on the three PluginViews.  This
        will be refactored better in a later patch so that they can all share
        a base class Widget show/hide method.  For now the changes were made
        simply to be able to bring WidgetWin's setParent method up into Widget.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * platform/ScrollView.h:
        * platform/Widget.cpp:
        (WebCore::Widget::init):
        (WebCore::Widget::setParent):
        * platform/Widget.h:
        (WebCore::Widget::isSelfVisible):
        (WebCore::Widget::isParentVisible):
        (WebCore::Widget::isVisible):
        (WebCore::Widget::setParentVisible):
        (WebCore::Widget::isPluginView):
        (WebCore::Widget::parent):
        (WebCore::Widget::handleEvent):
        (WebCore::Widget::geometryChanged):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/mac/ScrollbarMac.mm:
        (WebCore::ScrollbarMac::~ScrollbarMac):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::Widget):
        (WebCore::Widget::topLevel):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::setAncestorVisible):
        (WebCore::ScrollView::show):
        (WebCore::ScrollView::hide):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setParent):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::Widget):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParentVisible):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParentVisible):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParentVisible):

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

        Reviewed by Adam Roben.

        <rdar://problem/6219577> Spew in console at launch about encoding mappings when running with ICU 4.0

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Updated for new encoding names.

2008-09-17  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Fix the QtWebKit/Mac build

        * platform/qt/ScrollViewQt.cpp: add include

2008-09-17  David Hyatt  <hyatt@apple.com>

        Add a #define to control whether or not to use an NSScroller on Mac.
        This ifdef will allow the new NSView-less NSScroller on Mac to be
        developed side by side with the current one.

        The new scroller paints a debug red if turned on (although due to
        Widget issues you won't see anything paint yet).

        Reviewed by olliej

        * platform/Scrollbar.cpp:
        * platform/Scrollbar.h:
        * platform/mac/ScrollbarMac.h:
        * platform/mac/ScrollbarMac.mm:
        * platform/mac/ScrollbarThemeMac.cpp:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/ScrollbarThemeMac.h:

2008-09-16  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=20854
        [GTK] Windows can be not realized in ScrollView::update

        Do not call gdk_window_invalidate_rect on a non-realized GtkWidget.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::update):

2008-09-16  Alp Toker  <alp@nuanti.com>

        Suggested by Dave Hyatt.

        Build fix and cleanup. Rename ScrollBar to Scrollbar.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * editing/EditorCommand.cpp:
        * page/EventHandler.cpp:
        * page/gtk/EventHandlerGtk.cpp:
        * page/mac/EventHandlerMac.mm:
        * page/mac/FrameMac.mm:
        * page/qt/EventHandlerQt.cpp:
        * page/wx/EventHandlerWx.cpp:
        * platform/PopupMenu.h:
        * platform/ScrollBar.cpp: Removed.
        * platform/ScrollBar.h: Removed.
        * platform/Scrollbar.cpp: Copied from WebCore/platform/ScrollBar.cpp.
        * platform/Scrollbar.h: Copied from WebCore/platform/ScrollBar.h.
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::ScrollbarGtk):
        * platform/gtk/ScrollbarGtk.h:
        * platform/mac/ScrollbarMac.h:
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/ScrollbarQt.cpp:
        * platform/qt/ScrollbarThemeQt.cpp:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PopupMenuWin.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/win/ScrollbarThemeWin.cpp:
        * platform/wx/ScrollViewWx.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderTextControl.cpp:

2008-09-16  David Hyatt  <hyatt@apple.com>

        Fix Qt build bustage by making moveThumb a member of Scrollbar so that
        it can be called from ScrollbarQt.

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::handleMouseMoveEvent):
        (WebCore::Scrollbar::handleMousePressEvent):
        * platform/ScrollBar.h:
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::handleContextMenuEvent):

2008-09-16  David Hyatt  <hyatt@apple.com>

        Eliminate PlatformScrollbar.  Mac and Gtk now have subclasses for their
        native-widget scrollbars (ScrollbarMac and ScrollbarGtk).  Other platforms
        now just use Scrollbar.

        Reviewed by Sam Weinig

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/FrameMac.mm:
        * platform/PopupMenu.h:
        (WebCore::PopupMenu::scrollbar):
        * platform/ScrollBar.cpp:
        (WebCore::createNativeScrollbar):
        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h: Removed.
        * platform/gtk/PlatformScrollBarGtk.cpp: Removed.
        * platform/gtk/ScrollbarGtk.cpp: Copied from platform/gtk/PlatformScrollBarGtk.cpp.
        (gtkScrollEventCallback):
        (ScrollbarGtk::ScrollbarGtk):
        (ScrollbarGtk::~ScrollbarGtk):
        (ScrollbarGtk::updateThumbPosition):
        (ScrollbarGtk::updateThumbProportion):
        (ScrollbarGtk::setFrameGeometry):
        (ScrollbarGtk::geometryChanged):
        (ScrollbarGtk::gtkValueChanged):
        * platform/gtk/ScrollbarGtk.h: Copied from platform/gtk/PlatformScrollBar.h.
        * platform/mac/PlatformScrollBar.h: Removed.
        * platform/mac/PlatformScrollBarMac.mm: Removed.
        * platform/mac/ScrollbarMac.h: Copied from platform/mac/PlatformScrollBar.h.
        * platform/mac/ScrollbarMac.mm: Copied from platform/mac/PlatformScrollBarMac.mm.
        (-[WebCoreScrollBar initWithScrollbarMac:]):
        (-[WebCoreScrollBar detachScrollbarMac]):
        (WebCore::Scrollbar::createNativeScrollbar):
        (WebCore::ScrollbarMac::ScrollbarMac):
        (WebCore::ScrollbarMac::~ScrollbarMac):
        (WebCore::ScrollbarMac::updateThumbPosition):
        (WebCore::ScrollbarMac::updateThumbProportion):
        (WebCore::ScrollbarMac::scrollbarHit):
        * platform/qt/PlatformScrollBar.h: Removed.
        * platform/qt/PlatformScrollBarQt.cpp: Removed.
        * platform/qt/ScrollbarQt.cpp: Copied from platform/qt/PlatformScrollBarQt.cpp.
        (WebCore::Scrollbar::handleContextMenuEvent):
        * rendering/HitTestResult.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::destroyScrollbar):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::~RenderListBox):
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::isPointInOverflowControl):
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.cpp:

2008-09-16  David Hyatt  <hyatt@apple.com>

        Make the scrollbar resizer-dodging logic cross-platform in the
        Scrollbar class.

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::setFrameGeometry):
        (WebCore::Scrollbar::setParent):
        (WebCore::Scrollbar::windowClipRect):
        * platform/ScrollBar.h:
        * platform/ScrollView.h:
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        * platform/Widget.h:
        (WebCore::Widget::setParent):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertToContainingWindow):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:

2008-09-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=15129
          <rdar://problem/4644824> adding a new line with DOM does unnecessary additional repaint

        Covered by fast/repaint/4776765.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Avoid repainting this object if it
        did not have layout in the beginning.
        (WebCore::RenderBlock::layoutBlockChildren): If a child did not have
        layout in the beginning, repaint it in its new position, to compensate
        for the above (regardless of whether it "moved").
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::checkForRepaintDuringLayout): Added a comment
        about generalizing this fix in the future.

2008-09-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=15384
          Div does not notice when grandparent changes height

        Test: fast/block/basic/quirk-percent-height-grandchild.html

        - fix https://bugs.webkit.org/show_bug.cgi?id=20714
          Resizing Gmail inbox vertically results in whitespace at the bottom of the window

        Test: fast/replaced/percent-height-in-anonymous-block.html

        Added a two-way mapping between boxes with percentage heights and
        their non-parent ancestors up to the one the height is computed relative
        to. In quirks mode (the first bug), this can be any number of containing
        block with auto height. In strict mode (the second bug) this can be
        the containing block of an anonymous block containing a replaced
        element.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock): Added code to remove the all the
        mapping to/from this block to percentage-height descendants.
        (WebCore::RenderBlock::layoutBlockChildren): Added code to mark
        percentage-height descendants (and their containing block ancestry chain
        up to this block) for layout. This ensures that those descendants whose
        height depends on the height of this block (or an ancestor) are updated.
        (WebCore::RenderBlock::addPercentHeightDescendant): Added. Establishes
        a two-way mapping between this block and the given box.
        (WebCore::RenderBlock::removePercentHeightDescendant): Added. Removes
        all the mapping to/from this box.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle): Added calls to
        removePercentHeightDescendant() when style changes and the box
        previously had a percentage height. An exception is when the style
        change does not require layout, in which case the box still has
        a percentage height and the mappings are valid. In all other cases,
        any required mappings will be (re-)established during layout.
        (WebCore::RenderBox::destroy): Added a call to
        removePercentHeightDescendant.
        (WebCore::RenderBox::calcPercentageHeight): Added code that, in quirks
        mode, if a higher-than-parent containing block is affecting the box's
        height, creates a mapping between the box and that block.
        (WebCore::RenderBox::calcReplacedHeightUsing): Changed to skip over
        anonymous containing blocks, if any, and when that happens, use
        addPercentHeightDescendant() to ensure that the non-anonymous block
        is aware of the dependent percent-height box.

2008-09-16  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Oliver Hunt and Alp Toker.

        Implemented toDataURL in Cairo. Only PNG support
        at the moment.

        Qt, Cairo and wx require toDataURL implementations
        https://bugs.webkit.org/show_bug.cgi?id=17719

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::writeFunction):
        (WebCore::ImageBuffer::toDataURL):

2008-09-16  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Hide unused media element controls in the QtWebKit port

        * platform/qt/html4-adjustments-qt.css

2008-09-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix compilation of the Qt scrollbar code.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::scPart):
        (WebCore::styleOptionSlider):
        (WebCore::thumbLength):
        (WebCore::pixelPosToRangeValue):
        (WebCore::PlatformScrollbar::handleContextMenuEvent):

2008-09-16  Adam Treat  <treat@kde.org>

        Reviewed by Anders Carlsson.

        Prevent accesses off of the end of the buffer introduced in r36450
        and when checking for descriptions of mime. Also, coding style fix.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):

2008-09-15  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=20634
        SVG transform attribute is ignored by <use> in <clipPath>

        Transform the paths with the local transform when part
        of a clip path.

        Test: svg/custom/use-clipped-transform.svg

        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::toClipPath):
        * svg/SVGStyledTransformableElement.h:

2008-09-15  Dave Hyatt  <hyatt@apple.com>

        Convert Qt over to its ScrollbarTheme.  Add cross-platform support for jumping the thumb location directly
        to a pressed location on the track (this is done with the middle mouse on Qt and with Shift-Click on Windows).
      
        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::thumbUnderMouse):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        (WebCore::moveThumb):
        (WebCore::Scrollbar::handleMouseMoveEvent):
        (WebCore::Scrollbar::handleMousePressEvent):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::pressedPos):
        (WebCore::Scrollbar::pixelStep):
        (WebCore::Scrollbar::setPressedPos):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::thumbPosition):
        (WebCore::ScrollbarTheme::thumbLength):
        (WebCore::ScrollbarTheme::trackPosition):
        (WebCore::ScrollbarTheme::trackLength):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::trackPosition):
        * platform/ScrollbarThemeComposite.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):
        (WebCore::ScrollbarThemeQt::hitTest):
        (WebCore::ScrollbarThemeQt::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeQt::invalidatePart):
        (WebCore::ScrollbarThemeQt::thumbPosition):
        (WebCore::):
        * platform/qt/ScrollbarThemeQt.h:
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::shouldCenterOnThumb):
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::shouldCenterOnThumb):
        * platform/win/ScrollbarThemeWin.h:

2008-09-15  David Smith  <catfish.man@gmail.com>

        Reviewed by Sam Weinig.
        
        https://bugs.webkit.org/show_bug.cgi?id=20180
        
        Cache the result of parsing the an+b expression in :nth-child(an+b). Roughly a 2x speedup for :nth-child on SlickSpeed.

        * GNUmakefile.am: Add CSSNthSelector
        * WebCore.pro: Add CSSNthSelector
        * WebCore.vcproj/WebCore.vcproj: Add CSSNthSelector
        * WebCore.xcodeproj/project.pbxproj: Add CSSNthSelector
        * css/CSSGrammar.y: Create CSSNthSelectors instead of CSSSelectors for :nth-*
        * css/CSSNthSelector.cpp: Added.
        (WebCore::CSSNthSelector::parseNth): Moved from CSSStyleSelector and modified to cache
        (WebCore::CSSNthSelector::matchNth): Moved from CSSStyleSelector and modified to use the cache
        * css/CSSNthSelector.h: Added.
        (WebCore::CSSNthSelector::CSSNthSelector):
        (WebCore::CSSNthSelector::~CSSNthSelector):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createFloatingNthSelector):
        * css/CSSParser.h:
        * css/CSSSelector.h: Use the free bit here to store a flag for CSSNthSelector
        (WebCore::CSSSelector::CSSSelector):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Take advantage of knowing that all :nth-* selectors are CSSNthSelectors

2008-09-15  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Clean up some inspector JS callbacks to remove an extra return.

        * page/InspectorController.cpp:
        (WebCore::hideDOMNodeHighlight):
        (WebCore::loaded):
        (WebCore::unloading):
        (WebCore::attach):
        (WebCore::detach):
        (WebCore::startDebuggingAndReloadInspectedPage):
        (WebCore::stopDebugging):
        (WebCore::debuggerAttached):
        (WebCore::pauseOnExceptions):
        (WebCore::pauseInDebugger):
        (WebCore::resumeDebugger):
        (WebCore::stepOverStatementInDebugger):
        (WebCore::stepIntoStatementInDebugger):
        (WebCore::stepOutOfFunctionInDebugger):
        (WebCore::isWindowVisible):
        (WebCore::closeWindow):

2008-09-15  Dave Hyatt  <hyatt@apple.com>

        Completely switch Windows scrollbars over to ScrollbarTheme.  The Aqua windows scrollbar and native scrollbar
        now share most of their code.
       
        Also removing mini size scrollbar support, since it would have crashed Windows had it ever been used, and it
        also is never used in our code anyway.
       
        Reviewed by Sam Weinig

        * WebCore.vcproj/WebCore.vcproj:
        * platform/ScrollTypes.h:
        (WebCore::):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::splitTrack):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        (WebCore::ScrollbarThemeComposite::minimumThumbLength):
        * platform/ScrollbarThemeComposite.h:
        * platform/mac/PlatformScrollBarMac.mm:
        (NSControlSizeForScrollBarControlSize):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp: Removed.
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::):
        (WebCore::scrollbarControlStateFromThemeState):
        (WebCore::ScrollbarThemeSafari::hasButtons):
        (WebCore::ScrollbarThemeSafari::hasThumb):
        (WebCore::buttonRepaintRect):
        (WebCore::ScrollbarThemeSafari::backButtonRect):
        (WebCore::ScrollbarThemeSafari::forwardButtonRect):
        (WebCore::trackRepaintRect):
        (WebCore::ScrollbarThemeSafari::trackRect):
        (WebCore::ScrollbarThemeSafari::minimumThumbLength):
        (WebCore::ScrollbarThemeSafari::paintTrack):
        (WebCore::ScrollbarThemeSafari::paintButton):
        (WebCore::ScrollbarThemeSafari::paintThumb):
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.cpp:
        * platform/win/ScrollbarThemeWin.h:

2008-09-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler, Beth Dakin

        <rdar://problem/4003789> Expose lists as AXList
        <rdar://problem/5707399> VO: Definition lists not announced in Safari

        Lists are now exposed through AX. On the mac (in SnowLeopard) they use two new subroles
        AXContentList for <ul>, <ol> and AXDefinitionList for <dl>
        Inside the definition list, each <dt> "term" has an accessibility description ("term"), 
        as does each <dd> tag ("definition")

        Test: accessibility/lists.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * page/AXObjectCache.cpp:
        * page/AccessibilityList.cpp: Added.
        * page/AccessibilityList.h: Added.
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        * page/AccessibilityTable.cpp:
        * page/mac/AccessibilityObjectWrapper.mm:
        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        * platform/qt/Localizations.cpp:

2008-09-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=20865
        Prepare HTMLScriptElement & SVGScriptElement unification, and unification of event handling.

        Several renames:
        dispatchHTMLEvent -> dispatchEventForType
        setHTMLEventListener -> setEventListenerForType
        getHTMLEventListener -> eventListenerForType
        removeHTMLEventListener -> removeEventListenerForType
        isHTMLEventListener -> isAttachedToEventTargetNode
        ...

        Similar renames for the dispatch/get/set/*Window*Event functions.
        Kill JSSVGLazyEventListener and merge with JSLazyEventListener.

        Most important change: Rename setHTMLEventListener to setEventListenerForTypeAndAttribute,
        as there exists a generic createEventListener() method now, taking care of JSLazyEventListener creation.

        setHTMLEventListener() used createHTMLEventListener() before and was HTML specific.
        SVG is able to use the code as well now. This affects most files in html/.

        No functional changes.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::setListener):
        (WebCore::JSDOMWindowBase::getListener):
        (WebCore::JSDOMWindowBase::findJSEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener):
        (WebCore::JSDOMWindowBase::findJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::jsEventListenersAttachedToEventTargetNodes):
        (WebCore::JSDOMWindowBase::jsUnprotectedEventListenersAttachedToEventTargetNodes):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSAbstractEventListener::isAttachedToEventTargetNode):
        (WebCore::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::eventParameterName):
        (WebCore::JSLazyEventListener::parseCode):
        (WebCore::getNodeEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSAbstractEventListener::JSAbstractEventListener):
        (WebCore::JSUnprotectedEventListener::create):
        (WebCore::JSEventListener::create):
        (WebCore::JSLazyEventListener::):
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::setListener):
        (WebCore::JSEventTargetNode::getListener):
        * bindings/js/JSSVGLazyEventListener.cpp: Removed.
        * bindings/js/JSSVGLazyEventListener.h: Removed.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createHTMLEventHandler):
        (WebCore::ScriptController::createSVGEventHandler):
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::handleWindowEvent):
        (WebCore::Document::setWindowEventListenerForType):
        (WebCore::Document::windowEventListenerForType):
        (WebCore::Document::removeWindowEventListenerForType):
        (WebCore::Document::addWindowEventListener):
        (WebCore::Document::hasWindowEventListener):
        (WebCore::Document::removePendingFrameBeforeUnloadEventCount):
        (WebCore::Document::createEventListener):
        (WebCore::Document::setWindowEventListenerForTypeAndAttribute):
        * dom/Document.h:
        * dom/EventListener.h:
        (WebCore::EventListener::isAttachedToEventTargetNode):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchFocusEvent):
        (WebCore::EventTargetNode::dispatchBlurEvent):
        (WebCore::EventTargetNode::dispatchEventForType):
        (WebCore::EventTargetNode::removeEventListenerForType):
        (WebCore::EventTargetNode::setEventListenerForType):
        (WebCore::EventTargetNode::setEventListenerForTypeAndAttribute):
        (WebCore::EventTargetNode::eventListenerForType):
        * dom/EventTargetNode.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        (WebCore::HTMLElement::checkDTD):
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::onChange):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::asyncEventTimerFired):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::mediaPlayerNetworkStateChanged):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::willSaveToCache):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        (WebCore::HTMLScriptElement::dispatchErrorEvent):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mouseButtonListener):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::canMouseDragExtendSelect):
        * page/Frame.cpp:
        (WebCore::Frame::sendScrollEvent):
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::valueChanged):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selectionChanged):
        * svg/SVGDocumentExtensions.cpp:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseMappedAttribute):
        (WebCore::SVGElement::finishParsingChildren):
        * svg/SVGElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * svg/SVGSVGElement.h:

2008-09-15  Dave Hyatt  <hyatt@apple.com>

        Convert PlatformScrollbarWin to use ScrollbarTheme for hit testing.  PlatformScrollbarQt/Gtk still
        need to be converted.
        
        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::updateThumbPosition):
        (WebCore::Scrollbar::updateThumbProportion):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        * platform/ScrollBar.h:
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::invalidateParts):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        (WebCore::ScrollbarThemeComposite::thumbPosition):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        (WebCore::ScrollbarThemeComposite::trackLength):
        * platform/ScrollbarThemeComposite.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):

2008-09-15  David Smith  <catfish.man@gmail.com>

        "Just do it"'d by Mark Rowe

        https://bugs.webkit.org/show_bug.cgi?id=20856
        Add missing license header

        * dom/NodeRenderStyle.h:

2008-09-15  Dean Jackson  <dino@apple.com>

        Reviewed by Tim Hatcher.

        Add default constructor for ShadowData
        https://bugs.webkit.org/show_bug.cgi?id=20757

        Test: transitions/shadow.html

        * rendering/style/RenderStyle.h:

2008-09-15  Dean Jackson  <dino@apple.com>

        Reviewed by Tim Hatcher.

        RenderStyle should update keyframes.
        http://bugs.webkit.org/show_bug.cgi?id=20756

        * rendering/style/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::updateKeyframes):

2008-09-15  Dean Jackson  <dino@apple.com>

        Reviewed by Tim Hatcher.

        Unnecessary ASSERT in ImplicitAnimation destructor.
        https://bugs.webkit.org/show_bug.cgi?id=20817

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::~ImplicitAnimation):

2008-09-15  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        Fix plugin extension info. It was returning the mimetype where the
        extension was given.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):

2008-09-15  Dean Jackson  <dino@apple.com>

        Reviewed by Tim Hatcher

        Coding style violation!!!! Cleanup AnimationBase.cpp

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):

2008-09-15  David Hyatt  <hyatt@apple.com>

        Move all hit testing code for scrollbars into the base class.  Refactor
        it to accommodate all platform-specific behaviors using virtual ScrollbarTheme
        functions.

        No platform is using this code yet.  Although it has been moved and compiles
        (even on Mac), it is not being used on any platform.

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        (WebCore::Scrollbar::handleMouseMoveEvent):
        (WebCore::Scrollbar::handleMouseOutEvent):
        (WebCore::Scrollbar::handleMouseReleaseEvent):
        (WebCore::Scrollbar::handleMousePressEvent):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::handleContextMenuEvent):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::hitTest):
        (WebCore::ScrollbarTheme::invalidateOnMouseEnterExit):
        (WebCore::ScrollbarTheme::invalidatePart):
        (WebCore::ScrollbarTheme::shouldCenterOnThumb):
        (WebCore::ScrollbarTheme::centerOnThumb):
        (WebCore::ScrollbarTheme::thumbPosition):
        (WebCore::ScrollbarTheme::thumbLength):
        (WebCore::ScrollbarTheme::trackLength):
        (WebCore::ScrollbarTheme::initialAutoscrollTimerDelay):
        (WebCore::ScrollbarTheme::autoscrollTimerDelay):
        * platform/Widget.h:
        (WebCore::Widget::parent):
        * platform/mac/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromContainingWindow):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::invalidateOnMouseEnterExit):
        * platform/win/ScrollbarThemeWin.h:

2008-09-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5842247> Single long breakable word takes O(n^2) to lay out

        Cache the next breakable position for text nodes in InlineIterator.

        * rendering/bidi.cpp:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::increment):
        (WebCore::RenderBlock::findNextLineBreak):

2008-09-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        Fix assertion and integral pixel issue when creating subimages.
        https://bugs.webkit.org/show_bug.cgi?id=20786

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Implment seek() and clean up and improve debugging output

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (debugMediaObject):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::stateChanged):
        (WebCore::MediaPlayerPrivate::tick):

2008-09-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Remove bogus Q_ASSERTs from the MediaPlayer Phonon implementation

        m_mediaObject, m_audioOutput, m_videoWidget get created in the
        c'tor and will only be deleted in the c'tor. The Q_ASSERTs would
        only check if we use the MediaPlayerPrivate after it has been deleted.

        Acked-by: Tor Arne Vestbø  <tavestbo@trolltech.com>

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::updateStates):

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

        Reviewed by Maciej.

        <rdar://problem/6163988> 
        https://bugs.webkit.org/show_bug.cgi?id=20457
        Canvas: createPattern crashes WebKit in WTF::RefPtr<WebCore::Image>::operator!() const + 9 with a 1D pattern
        
        Check the width and height and throw an exception if any of them are 0.
        
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Render media element controls with antialiasing enabled

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        (WebCore::RenderThemeQt::paintMediaSliderThumb):

2008-09-15  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Upon non fatal error, switch to the pause state (so that playback can continue)

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Don't set WTF_USE_JSC in WebCore.pro now that it's set in config.h

        * WebCore.pro:

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Make QtInstance::create() private and fix caching

        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getQtInstance):
        (JSC::Bindings::QtInstance::getRuntimeObject):
        * bridge/qt/qt_instance.h:
        (JSC::Bindings::QtInstance::create):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::QtConnectionObject::execute):

2008-09-15  David Smith  <catfish.man@gmail.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=20180
        
        >2x speedup on querySelector[All] with :nth-child by removing the collectRulesOnly argument on SelectorChecker.
        With collectRulesOnly set to true (the default) an optimization is turned off, and no callers were intentionally leaving it true.
        querySelector[All] assumed that the default was probably the right way to go, and so ended up being slow.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::SelectorChecker):
        * css/CSSStyleSelector.h:

2008-09-14  Dave Hyatt  <hyatt@apple.com>

        Refactor PlatformScrollbarWin's painting so that it is now done by ScrollbarThemeWin.  PlatformScrollbarSafari
        is still painting itself (a subsequent patch will move its painting into ScrollbarThemeSafari).
       
        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        (WebCore::Scrollbar::client):
        (WebCore::Scrollbar::currentPos):
        (WebCore::Scrollbar::totalSize):
        * platform/ScrollbarTheme.h:
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::pageForScrollView):
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::trackIsSinglePiece):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/win/ScrollbarThemeSafari.h:
        (WebCore::ScrollbarThemeSafari::hasButtons):
        (WebCore::ScrollbarThemeSafari::hasThumb):
        (WebCore::ScrollbarThemeSafari::backButtonRect):
        (WebCore::ScrollbarThemeSafari::forwardButtonRect):
        (WebCore::ScrollbarThemeSafari::trackRect):
        (WebCore::ScrollbarThemeSafari::splitTrack):
        (WebCore::ScrollbarThemeSafari::paintTrack):
        (WebCore::ScrollbarThemeSafari::paintButton):
        (WebCore::ScrollbarThemeSafari::paintThumb):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::isRunningOnVistaOrLater):
        (WebCore::checkAndInitScrollbarTheme):
        (WebCore::ScrollbarThemeWin::ScrollbarThemeWin):
        (WebCore::ScrollbarThemeWin::themeChanged):
        (WebCore::ScrollbarThemeWin::hasThumb):
        (WebCore::ScrollbarThemeWin::backButtonRect):
        (WebCore::ScrollbarThemeWin::forwardButtonRect):
        (WebCore::ScrollbarThemeWin::trackRect):
        (WebCore::ScrollbarThemeWin::splitTrack):
        (WebCore::ScrollbarThemeWin::paintTrack):
        (WebCore::ScrollbarThemeWin::paintButton):
        (WebCore::gripperRect):
        (WebCore::paintGripper):
        (WebCore::ScrollbarThemeWin::paintThumb):
        (WebCore::ScrollbarThemeWin::thumbPosition):
        (WebCore::ScrollbarThemeWin::thumbLength):
        (WebCore::ScrollbarThemeWin::trackLength):
        * platform/win/ScrollbarThemeWin.h:
        (WebCore::ScrollbarThemeWin::hasButtons):
        (WebCore::ScrollbarThemeWin::trackIsSinglePiece):

2008-09-14  Anthony Ricaud  <rik24d@gmail.com>

        Moving all resource graphs under the same container for future scalable feature.
        This is a speedup on resize but maybe a loss on changing the sorting function.

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

        Reviewed by Timothy Hatcher.

        * page/inspector/ResourcesPanel.js: Added a container for all resource graphs.
        Added WebInspector.ResourceGraph. No more _updateGraphBars on resize.
        * page/inspector/inspector.css: Edited corresponding rules and removed unnecessaries.

2008-09-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=20738
        compareBoundaryPoints gives incorrect results

        Test: fast/dom/Range/compareBoundaryPoints-2.html

        * dom/Range.cpp: (WebCore::Range::compareBoundaryPoints): Correct meanings of START_TO_END
        and END_TO_START.
        * page/DOMSelection.cpp: (WebCore::DOMSelection::addRange): Updated for this change.

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

        Unreviewed build fix.

        Trying again.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::hasInstance):

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

        Unreviewed build fix.

        Blind attempt to fix build. Correct parameters for hasInstance.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::hasInstance):
        * bindings/js/JSQuarantinedObjectWrapper.h:

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

        Rubber-stamped by Sam Weinig.

        - revert <http://trac.webkit.org/changeset/36382> because it exposed
          <https://bugs.webkit.org/show_bug.cgi?id=20846> and resulted in crashes
          on Tiger.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getLastResortFallbackFont):

2008-09-14  Dave Hyatt  <hyatt@apple.com>

        Add a new ScrollbarThemeComposite base class that is shared by ScrollbarThemeSafari and
        ScrollbarThemeWin.  Any scrollbar that wants to render by ScrollbarPart can subclass from this
        theme.
        
        Reviewed by Sam Weinig

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.h:

2008-09-14  Alp Toker  <alp@nuanti.com>

        https://bugs.webkit.org/show_bug.cgi?id=20320
        [GTK] A white rectangle is visible behind widgets with rounded corners

        Sync bundled gtk2drawing.c to the latest version from Mozilla (coding
        style exempt).

        Requested by Michael Monreal.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        * platform/gtk/gtk2drawing.c:
        (moz_gtk_set_widget_name):
        (ensure_window_widget):
        (setup_widget_prototype):
        (ensure_button_arrow_widget):
        (moz_gtk_get_combo_box_inner_button):
        (moz_gtk_get_combo_box_button_inner_widgets):
        (ensure_combo_box_widgets):
        (moz_gtk_get_combo_box_entry_inner_widgets):
        (moz_gtk_get_combo_box_entry_arrow):
        (ensure_combo_box_entry_widgets):
        (ensure_toolbar_widget):
        (ensure_tooltip_widget):
        (ensure_menu_bar_widget):
        (ensure_menu_bar_item_widget):
        (ensure_menu_popup_widget):
        (ensure_menu_item_widget):
        (ensure_image_menu_item_widget):
        (ensure_menu_separator_widget):
        (ensure_check_menu_item_widget):
        (ensure_tree_header_cell_widget):
        (ensure_scrolled_window_widget):
        (moz_gtk_button_paint):
        (moz_gtk_init):
        (moz_gtk_button_get_inner_border):
        (moz_gtk_toggle_paint):
        (calculate_button_inner_rect):
        (calculate_arrow_rect):
        (moz_gtk_scrollbar_button_paint):
        (moz_gtk_scrollbar_thumb_paint):
        (moz_gtk_caret_paint):
        (moz_gtk_entry_paint):
        (moz_gtk_treeview_paint):
        (moz_gtk_tree_header_cell_paint):
        (moz_gtk_combo_box_paint):
        (moz_gtk_downarrow_paint):
        (moz_gtk_combo_box_entry_button_paint):
        (moz_gtk_toolbar_paint):
        (moz_gtk_tab_scroll_arrow_paint):
        (moz_gtk_menu_bar_paint):
        (moz_gtk_menu_item_paint):
        (moz_gtk_get_widget_border):
        (moz_gtk_get_combo_box_entry_button_size):
        (moz_gtk_get_tab_scroll_arrow_size):
        (moz_gtk_get_downarrow_size):
        (moz_gtk_images_in_menus):
        (moz_gtk_widget_paint):
        (moz_gtk_shutdown):
        * platform/gtk/gtkdrawing.h:

2008-09-14  David Hyatt  <hyatt@apple.com>

        Convert Mac, Gtk, wx and Qt over to the new ScrollbarTheme for
        painting.  Mac and Gtk themes don't do anything and just let the
        underlying widget paint.  Qt now uses the theme to paint.  wx doesn't
        do anything yet.

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::paint):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::value):
        (WebCore::Scrollbar::visibleSize):
        (WebCore::Scrollbar::maximum):
        (WebCore::Scrollbar::lineStep):
        (WebCore::Scrollbar::pageStep):
        (WebCore::Scrollbar::pixelStep):
        (WebCore::Scrollbar::pressedPart):
        (WebCore::Scrollbar::hoveredPart):
        (WebCore::Scrollbar::theme):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::paint):
        (WebCore::ScrollbarTheme::scrollbarThickness):
        (WebCore::ScrollbarTheme::supportsControlTints):
        (WebCore::ScrollbarTheme::themeChanged):
        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBarMac.mm:
        * platform/qt/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):
        * platform/qt/ScrollbarThemeQt.h:
        (WebCore::ScrollbarThemeQt::paint):
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paint):
        * platform/win/ScrollbarThemeSafari.h:
        (WebCore::ScrollbarThemeSafari::supportsControlTints):
        * platform/wx/PlatformScrollBar.h:
        * platform/wx/TemporaryLinkStubs.cpp:
        (PlatformScrollbar::~PlatformScrollbar):

2008-09-14  Sam Weinig  <sam@webkit.org>

        Qt build fix.

        * platform/qt/PlatformScrollBarQt.cpp:

2008-09-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove extraneous semicolons.

        * bindings/scripts/CodeGeneratorObjC.pm:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::charsetAttributeValue):
        (WebCore::HTMLScriptElement::typeAttributeValue):
        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintEllipsisBoxes):
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::toPathData):

2008-09-14  Sam Weinig  <sam@webkit.org>

        Qt build fix.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):

2008-09-14  Sam Weinig  <sam@webkit.org>

        Qt build fix.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::paint):

2008-09-13  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix, not reviewed.

        * platform/gtk/PlatformScrollBarGtk.cpp:
        (PlatformScrollbar::PlatformScrollbar):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::updateScrollbars):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        Remove scrollbar's setRect method.  Clients can now just call setFrameGeometry (the corresponding Widget) method
        to set the dimensions of a scrollbar.
        
        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        (PlatformScrollbar::setFrameGeometry):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/mac/PlatformScrollBarMac.mm:
        * platform/qt/PlatformScrollBarQt.cpp:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::setFrameGeometry):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::setFrameGeometry):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/wx/PlatformScrollBar.h:
        * platform/wx/TemporaryLinkStubs.cpp:
        (PlatformScrollbar::updateThumbProportion):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::positionOverflowControls):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintScrollbar):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        Remove setEnabled() from all Scrollbar classes that were just using their Widget base class methods.
       
        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBarMac.mm:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/wx/PlatformScrollBar.h:
        * platform/wx/TemporaryLinkStubs.cpp:
        (PlatformScrollbar::~PlatformScrollbar):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        Remove width()/height() from Scrollbar now that it derives from Widget.  Remove width()/height() from
        all PlatformScrollbar subclasses that just called the Widget base class versions of those methods.

        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBarMac.mm:
        * platform/win/PlatformScrollBarSafari.cpp:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/wx/PlatformScrollBar.h:
        * platform/wx/TemporaryLinkStubs.cpp:
        (PlatformScrollbar::~PlatformScrollbar):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        Move stopTimerIfNeeded out of PlatformScrollbar destructors and into Scrollbar.

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::~Scrollbar):
        * platform/ScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::~PlatformScrollbar):

2008-09-13  David Hyatt  <hyatt@apple.com>

        Move maximum() from Qt's PlatformScrollbar to be a cross-platform
        function on Scrollbar.  Fixes Qt build bustage.

        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        (WebCore::Scrollbar::orientation):
        (WebCore::Scrollbar::value):
        (WebCore::Scrollbar::maximum):
        * platform/qt/PlatformScrollBar.h:

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

        Reviewed by Sam Weinig.

        - use the LastResort font for missing glyphs instead of showing the
          primary font's missing glyph

        Test: platform/mac/fast/text/last-resort-font.html

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters): Changed to return the
        last resort font if a substitute font cannot be found.
        (WebCore::FontCache::getLastResortFallbackFont): Removed an outdated
        comment (the user's preferred standard font is included in the search
        thanks to code in FontCache::getFontData()) and changed to return the
        LastResort font.  

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        This patch adds ScrollbarTheme to the build.  ScrollbarTheme is similar to RenderTheme (but for
        scrollbars only).  For now ScrollbarTheme just handles returning the size of scrollbars.  Subsequent
        patches will move rendering and hit testing functionality into this class.
        
        Implemented ScrollbarTheme subclasses for four ports (Mac, Win, Gtk, Qt).  The wxWidgets port does not
        implement scrollbars yet, so I added a temporary link stub to keep things compiling on wx.
       
        Reviewed by Sam Weinig

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/ScrollBar.h:
        * platform/ScrollbarTheme.h: Added.
        (WebCore::ScrollbarTheme::~ScrollbarTheme):
        (WebCore::ScrollbarTheme::scrollbarThickness):
        (WebCore::ScrollbarTheme::themeChanged):
        * platform/gtk/ScrollbarThemeGtk.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeGtk::~ScrollbarThemeGtk):
        (WebCore::ScrollbarThemeGtk::scrollbarThickness):
        * platform/gtk/ScrollbarThemeGtk.h: Added.
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/ScrollbarThemeMac.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::):
        (WebCore::ScrollbarThemeMac::~ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        * platform/mac/ScrollbarThemeMac.h: Added.
        * platform/qt/PlatformScrollBarQt.cpp:
        * platform/qt/ScrollbarThemeQt.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeQt::~ScrollbarThemeQt):
        (WebCore::ScrollbarThemeQt::scrollbarThickness):
        * platform/qt/ScrollbarThemeQt.h: Added.
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::themeChanged):
        * platform/win/ScrollbarThemeSafari.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::):
        (WebCore::ScrollbarThemeSafari::~ScrollbarThemeSafari):
        (WebCore::ScrollbarThemeSafari::scrollbarThickness):
        * platform/win/ScrollbarThemeSafari.h: Added.
        * platform/win/ScrollbarThemeWin.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeWin::~ScrollbarThemeWin):
        (WebCore::ScrollbarThemeWin::scrollbarThickness):
        (WebCore::ScrollbarThemeWin::themeChanged):
        * platform/win/ScrollbarThemeWin.h: Added.
        * platform/wx/TemporaryLinkStubs.cpp:
        (ScrollbarTheme::nativeTheme):
        * rendering/RenderLayer.cpp:
        (WebCore::scrollCornerRect):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::calcPrefWidths):

2008-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Timothy Hatcher.

        <rdar://problem/5060439> Web elements should have an AXTopLevelUIElement

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

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

        Reviewed by Timothy Hatcher.

        - fix <rdar://problem/6171280> REGRESSION (r35667): Assertion failure in WebCore::FrameView::scheduleRelayout() when releasing a page with counters from the b/f cache

        No regression test because the back/forward cache is disabled in DumpRenderTree

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::invalidateCounters): Bail out if the document
        is being destroyed.

2008-09-13  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes for new methods recently introduced.

        * platform/graphics/wx/AffineTransformWx.cpp:
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::setF):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::AXDefinitionListTermText):
        (WebCore::AXDefinitionListDefinitionText):

2008-09-12  Dave Hyatt  <hyatt@apple.com>

        Move the member variables of PlatformScrollbar up into Scrollbar.  Move autoscroll timer handling
        up into scrollbar.  Make sure a bunch of cross-platform code now just uses "Scrollbar" instead of
        "PlatformScrollbar."
        
        Reviewed by Sam Weinig

        * WebCore.vcproj/WebCore.vcproj:
        * editing/EditorCommand.cpp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::scrollbar):
        * page/MouseEventWithHitTestResults.h:
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/PopupMenu.h:
        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::autoscrollTimerFired):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        (WebCore::Scrollbar::stopTimerIfNeeded):
        (WebCore::Scrollbar::pressedPartScrollDirection):
        (WebCore::Scrollbar::pressedPartScrollGranularity):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::handleMousePressEvent):
        (WebCore::Scrollbar::invalidatePart):
        (WebCore::Scrollbar::thumbUnderMouse):
        * platform/ScrollView.h:
        * platform/ScrollbarClient.h: Added.
        (WebCore::ScrollbarClient::~ScrollbarClient):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/qt/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::scrollbarPart):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::wheelEvent):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setScrollbar):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::scrollbar):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.h:

2008-09-12  Steve Falkenburg  <sfalken@apple.com>

        Fix Mac build.

        * css/CSSStyleSelector.cpp:
        (WebCore::getTransformOperationType):

2008-09-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

        Make transform animation behavior match spec
        https://bugs.webkit.org/show_bug.cgi?id=20770

        Tests: transitions/transform-op-list-match.html
               transitions/transform-op-list-no-match.html

        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationBase.h:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:
        * rendering/RenderLayer.cpp:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2008-09-12  Ojan Vafai  <ojan@chromium.org>

        Properly escape contents of links added to the inspector.
        For now, just build the link with the DOM and get the
        outerHTML. Eventually, we probably just want to do
        this entirely with the DOM.

        Reviewed by Timothy Hatcher.

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

        * manual-tests/inspector/escape-links.html: Added.
        * page/inspector/StylesSidebarPane.js:
        * page/inspector/inspector.js:
        * page/inspector/utilities.js:

2008-09-12  Adele Peterson  <adele@apple.com>

        Reviewed by John Sullivan and Kevin McCullough.

        Fix for <rdar://problem/6216951> REGRESSION (r36000?): Crash due to infinite recursion into EventHandler::hitTestResultAtPoint() with disconnected frames

        * page/EventHandler.cpp: (WebCore::EventHandler::hitTestResultAtPoint):
        Hit testing again on the main frame will only work if we aren't already on the main frame.  If we are already on the main frame, that will
        cause infinite recursion.  This change checks that we're not already on the main frame before hit testing again. 

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

        RS by Tim .

        Re-introducing the code since it was not the cause of the crash.
        See r36343.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled):
        * rendering/RenderObject.h:

2008-09-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

        When changing one animation in a list, don't reset other animations
        https://bugs.webkit.org/show_bug.cgi?id=20675

        Test: animations/change-one-anim.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getNumProperties):
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:
        (WebCore::KeyframeAnimation::setIndex):

2008-09-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel

        Fix the ASSERT and failure in webarchive/archive-empty-frame-source.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResource): Further restoration of original WebArchive behavior.
          Subresources can never be created from nil data, but there is always a MainResource, whether
          or not there's any data.  So in the case where the main resource has no data, fake it for the
          sake of creating the ArchiveResource.

2008-09-12  Dave Hyatt  <hyatt@apple.com>

        Preparation for major scrollbar rearchitecture.  Eliminate the concept of non-widget based
        scrollbars (which we never supported anyway).  Make Scrollbar derive from Widget directly.
        Remove all the isWidget and hasPlatformScrollbars guards.
        
        Reviewed by Tim Hatcher

        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBar.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        * platform/wx/PlatformScrollBar.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::horizontalScrollbarWidget):
        (WebCore::RenderLayer::verticalScrollbarWidget):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::destroyScrollbar):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::~RenderListBox):
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::isPointInOverflowControl):

2008-09-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=20793 clean up page/animation

        * page/animation/AnimationController.cpp:
        * page/animation/AnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:

2008-09-11  Timothy Hatcher  <timothy@apple.com>

        Add a renderedImage method to DOMNode to get an image
        of the rendering for the node and it's descendants.

        <rdar://problem/5849349> Would like API to create
        an image for a DOM node

        Reviewed by Oliver Hunt.

        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]): Call Frame::nodeImage.
        * bindings/objc/DOMPrivate.h:
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::nodeImage):

2008-09-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt

        Need to support comma separated list of key times in keyframes selectors
        https://bugs.webkit.org/show_bug.cgi?id=20680

        Test: animations/keyframes-comma-separated.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createKeyframeRule):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addKeyframeStyle):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::cssText):
        (WebCore::WebKitCSSKeyframeRule::parseKeyString):
        * css/WebKitCSSKeyframeRule.h:
        (WebCore::WebKitCSSKeyframeRule::keyText):
        (WebCore::WebKitCSSKeyframeRule::setKeyText):
        (WebCore::WebKitCSSKeyframeRule::getKeys):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::append):
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):
        (WebCore::WebKitCSSKeyframesRule::findRule):
        (WebCore::WebKitCSSKeyframesRule::findRuleIndex):
        * css/WebKitCSSKeyframesRule.h:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::blendProperties):

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

        RS by Tim.

        Reverting because this caused a crash.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled):
        (WebCore::RenderObject::hasScrollableView):
        * rendering/RenderObject.h:

2008-09-11  Dean Jackson  <dino@apple.com>

        Reviewed by Dan Bernstein.

        Fix assertion on transition property "none"
        https://bugs.webkit.org/show_bug.cgi?id=20751

        Test: transitions/transition-end-event-set-none.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):

2008-09-11  David Smith  <catfish.man@gmail.com>

        Rubber-stamped by mitzpettel.

        Remove an accidentally added extra file.

        * WebCore: Removed.

2008-09-11  David Smith  <catfish.man@gmail.com>

        Reviewed by Darin

        https://bugs.webkit.org/show_bug.cgi?id=20180
        
        This speeds up :nth-child matching as tested by querySelectorAll by around 10% by inlining the common case of Node::renderStyle(). Many thanks to mitzpettel and othermaciej for suggestions and help.

        * WebCore.xcodeproj/project.pbxproj: Add NodeRenderStyle.h
        * css/CSSStyleSelector.cpp: include NodeRenderStyle.h
        * dom/Element.cpp: include NodeRenderStyle.h
        * dom/Node.cpp: Remove the definition of renderStyle()
        (WebCore::Node::nonRendererRenderStyle):
        * dom/Node.h: Make renderStyle() nonvirtual and add nonRendererRenderStyle()
        * dom/NodeRenderStyle.h: Added.
        (WebCore::Node::renderStyle): Inline the common case of this, call nonRendererRenderStyle for the part that needed to be virtual
        * html/HTMLOptGroupElement.cpp: include NodeRenderStyle.h
        * html/HTMLOptGroupElement.h:
        (WebCore::HTMLOptGroupElement::nonRendererRenderStyle): override to return m_style
        * html/HTMLOptionElement.cpp: include NodeRenderStyle.h
        * html/HTMLOptionElement.h:
        (WebCore::HTMLOptionElement::nonRendererRenderStyle): override to return m_style
        * rendering/RenderListBox.cpp: include NodeRenderStyle.h
        * rendering/RenderMenuList.cpp: include NodeRenderStyle.h
        * svg/SVGUseElement.cpp: include NodeRenderStyle.h

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

        Reviewed by Adele and Tim.

        <rdar://problem/6100597> REGRESSION: clicking on search results in Web
        Inspector does not scroll to the line of the results (20167)
        - This was put in by Max to fix auto scrolling but is not correct for
        the whole web: rdar://problem/6213098

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled):
        * rendering/RenderObject.h:

2008-09-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/6210511> AX: if a frame has a title, that should be reported as the AXWebArea's title

        Test: accessibility/frame-with-title.html

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):

2008-09-11  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Simon.

        Fixed stroke() and strokeRect() to support gradients
        and patterns on Qt.

        [Qt] Canvas stroke don't work for gradients and patterns
        [https://bugs.webkit.org/show_bug.cgi?id=20749]

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2008-09-11  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Simon.

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

        Fixed canvas gradients for Qt

        [Qt] Canvas gradients don't work as expected
        [https://bugs.webkit.org/show_bug.cgi?id=20729]

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

2008-09-11  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Simon.

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

        Add support for patterns to Qt.

        * platform/graphics/qt/PatternQt.cpp:
        (WebCore::Pattern::createPlatformPattern):

2008-09-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - clean up AnimationBase

        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationBase.h:
        * page/animation/CompositeAnimation.cpp:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:

2008-09-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20741
        REGRESSION: ISO-8859-8-I encoding is registered incorrectly

        Turns out that there were no real behavior changes for 8859-8, as it was only a debug-only
        check to ignore this specific registration that was failing. Yet, I decided to add a bunch of
        tests for ISO-8859-8 encoding aliases, as we handle them in a quite complicated manner.

        I also found and fixed a potential crasher for non-Mac ports.

        Tests: fast/encoding/hebrew/8859-8-e.html
               fast/encoding/hebrew/8859-8-i.html
               fast/encoding/hebrew/8859-8.html
               fast/encoding/hebrew/csISO88598I.html
               fast/encoding/hebrew/hebrew.html
               fast/encoding/hebrew/iso-ir-138.html
               fast/encoding/hebrew/logical.html

        * platform/text/TextEncodingRegistry.cpp: (WebCore::checkExistingName): Check for iso-8859-8
        (case-insensitively, because different versions of ICU report this MIME name in different
        case).

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Updated some comments.
        (WebCore::TextCodecICU::registerExtendedCodecs): Try both MIME and IANA names here, too.
        There are four names in ICU that only have MIME names (x-mac-* ones), so we could end up
        with an encoding map entry, but no codec for these. This was not an issue on the Mac, as
        we also support these via TEC (which we should stop doing), but on Windows, this would
        likely crash.

2008-09-09  Dave Hyatt  <hyatt@apple.com

        Resurrect PlatformScrollbarWin.
        
        Reviewed by Adam Roben

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::isRunningOnVistaOrLater):
        (WebCore::checkAndInitScrollbarTheme):
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::invalidateTrack):
        (WebCore::PlatformScrollbar::invalidatePart):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::hasButtons):
        (WebCore::PlatformScrollbar::hasThumb):
        (WebCore::PlatformScrollbar::backButtonRect):
        (WebCore::PlatformScrollbar::forwardButtonRect):
        (WebCore::PlatformScrollbar::trackRect):
        (WebCore::PlatformScrollbar::gripperRect):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::paintGripper):
        (WebCore::PlatformScrollbar::hitTest):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::themeChanged):

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20759: Remove MacroAssembler
        <https://bugs.webkit.org/show_bug.cgi?id=20759>

        Make the necessary changes to ForwardingHeaders to remove
        MacroAssembler.

        * ForwardingHeaders/masm/IA32MacroAsm.h: Removed.
        * ForwardingHeaders/masm/MacroAssembler.h: Removed.
        * ForwardingHeaders/masm/X86Assembler.h: Added.

2008-09-09  Alp Toker  <alp@nuanti.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=16792
        [GTK] Fails to render Japanese/Chinese text with simple path

        https://bugs.webkit.org/show_bug.cgi?id=16942
        [GTK] Oddities in font selection and fall back

        https://bugs.webkit.org/show_bug.cgi?id=16862
        [GTK] Custom fonts hard-coded to use grayscale antialiasing and no hinting

        GTK+ font fixes and enhancements.

        Implement font fallback for the simple FontConfig-based text path and
        improve the Pango-based complex text path to make use of requested
        font properties and available font selection.

        Add text shadow support to the complex path.

        * platform/graphics/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::setPangoAttributes):
        (WebCore::Font::drawComplexText):
        (WebCore::getDefaultPangoLayout):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/gtk/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformDestroy):

2008-09-09  Dave Hyatt  <hyatt@apple.com>

        Make the Windows classic case work again.  Overlap in slider constants and other constants broke
        the push state for buttons and checkboxes.  Make sure to check the RenderObject's appearance
        value to make sure it's really a slider thumb to resolve this conflict.
       
        Reviewed by Adam Roben

        * rendering/RenderThemeWin.cpp:
        (WebCore::drawControl):

2008-09-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig.

        Need to handle the case when 0% or 100% keyframe is omitted
        https://bugs.webkit.org/show_bug.cgi?id=20679

        Tests: animations/keyframes-from-missing.html
               animations/keyframes-to-missing.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addKeyframeStyle):

2008-09-09  Dave Hyatt  <hyatt@apple.com>

        Resurrect Safari's original RenderThemeWin and bring it up to date with ToT.  Having a current
        RenderThemeWin that does not have any Skia dependencies should provide a good basis for a potential
        merge of Google Chrome's RenderThemeWin (to help us see where the Skia stuff can be cut and to see
        what changes have been made as compared with the old RenderThemeWin).
        
        Fix CSS2 system fonts to properly set both the rendering mode (so that they properly pick up GDI vs. CG
        text rendering modes) and the printer font setting (so that OS X system fonts properly pick up screen
        vs. printer advancement rounding).
    
        Reviewed by Adam/Sam

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * platform/graphics/Icon.h:
        (WebCore::Icon::create):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::RenderThemeWin::~RenderThemeWin):
        (WebCore::RenderThemeWin::buttonTheme):
        (WebCore::RenderThemeWin::textFieldTheme):
        (WebCore::RenderThemeWin::menuListTheme):
        (WebCore::RenderThemeWin::sliderTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::themeChanged):
        (WebCore::RenderThemeWin::supportsHover):
        (WebCore::fillFontDescription):
        (WebCore::RenderThemeWin::systemFont):
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::determineClassicState):
        (WebCore::RenderThemeWin::determineState):
        (WebCore::RenderThemeWin::determineSliderThumbState):
        (WebCore::RenderThemeWin::getClassicThemeData):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::drawControl):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::adjustMenuListStyle):
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle):
        (WebCore::RenderThemeWin::paintMenuListButton):
        (WebCore::RenderThemeWin::paintSliderTrack):
        (WebCore::RenderThemeWin::paintSliderThumb):
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        (WebCore::RenderThemeWin::paintSearchField):
        (WebCore::RenderThemeWin::adjustSearchFieldStyle):
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):
        * rendering/RenderThemeWin.h:
        (WebCore::ThemeData::ThemeData):
        (WebCore::RenderThemeWin::paintSearchFieldDecoration):
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):

2008-09-09  Dean Jackson  <dino@apple.com>

        Reviewed by Sam Weinig.

        Document::createEvent missing cases for animation and
        transition events.
        https://bugs.webkit.org/show_bug.cgi?id=20734

        Test: transitions/transition-end-event-create.html
        Test: animations/animation-events-create.html

        * dom/Document.cpp:
        (WebCore::Document::createEvent):
            - add the two cases

2008-09-09  Dan Bernstein  <mitz@apple.com>

        - Tiger build fix

        * WebCore.Tiger.exp:
        * WebCore.base.exp:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2008-09-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - WebCore part of <rdar://problem/6206244> Use alternate character-to-glyph interface on Leopard

        * WebCore.Tiger.exp:
        * WebCore.base.exp:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::initFontData):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

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

        Reviewed by Tim.

        <rdar://problem/6198545> REGRESSION: Inspector debugger barfs on
        breakpoints inside eval.

        * page/inspector/inspector.js:

2008-09-09  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon.

        Fix compilation of the Qt port with disabled plugins on Windows

        * WebCore.pro:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:

2008-09-09  Jungshik Shin  <jungshik.shin@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Try MIME charset names before trying IANA names 
        ( https://bugs.webkit.org/show_bug.cgi?id=17537 )

        With this change, shorter and more widely used names (preferred MIME
        names) are returned by document.charset, document.characterSet,
        document.inputEncoding rather than IANA names. This  helps
        fixing bug 18085 in addition to web developers who are more familiar
        with MIME names. For instance, EUC-JP, ISO-8859-X and US-ASCII will be
        returned instead of Extended_UNIX_Code_Packed_Format_for_Japanese, 
        ISO-8859-X:19xx, and ANSI_X3.4-1968. It also replaces IBM8xx with cp8xx. 
        Note that cp/IBM 8xx are extremly rare in today's web. Even if they're
        used, the former is still recognized as aliases to the latter so that
        there's very little, if any, to worry about.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames):

2008-09-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak and Oliver Hunt.

        Add forwarding headers.

        * ForwardingHeaders/wtf/HashFunctions.h: Added.

2008-09-05  Dean Jackson  <dino@apple.com>

        Reviewed by Dan Bernstein.

        Update grammar so that we can add a keyframe rule via the DOM.
        https://bugs.webkit.org/show_bug.cgi?id=20613

        * css/CSSGrammar.y:
        * css/tokenizer.flex:

2008-09-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        Allow <br> for simple UA stylesheet. Editing code generates them. It does not
        actually show up in any of the default stylesheets.

        * css/CSSStyleSelector.cpp:
        (WebCore::elementCanUseSimpleDefaultStyle):

2008-09-08  Dimitri Glazkov  <dglazkov@google.com>

        Reviewed by Dan Bernstein.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20237
          Zero width and space characters are displayed incorrectly if not contained in a fallback font

        Adds an extra check for Object Replacement Character (U+FFFC) to address
        the issue with fast/text/zero-width-characters.html test when run
        with Windows system default fonts.

        * platform/graphics/Font.h:
        (WebCore::Font::treatAsZeroWidthSpace):

2008-09-08  Dean Jackson  <dino@apple.com>

        Reviewed by Sam Weinig.

        Code style issue I forgot to fix from previous commit.

        * platform/graphics/AffineTransform.cpp:
        (WebCore::AffineTransform::blend):

2008-09-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig

        - Animation of -webkit-transform matrix() function should not do linear interpolation
          https://bugs.webkit.org/show_bug.cgi?id=20667

        Test: animations/matrix-anim.html

        * ChangeLog:
        * platform/graphics/AffineTransform.cpp:
        (WebCore::affineTransformDecompose):
        (WebCore::affineTransformCompose):
        (WebCore::AffineTransform::blend):
        * platform/graphics/AffineTransform.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::MatrixTransformOperation::blend):

2008-09-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20668
        multipart/form-data does not always include Content-type for submitted files

        Cannot be tested with DRT or manual tests.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes): Fix spacing.
        (WebCore::MIMETypeRegistry::getMIMETypeForPath): Default to application/octet-stream for
        unknown extensions, not just missing ones.

2008-09-08  Simon Hausmann  <hausmann@webkit.org>

        Build fix for the Qt/Windows build, define USE_JSC to
        enable the WebCore::String -> JSC::UString operator that
        MSVC insists on seeing

        * WebCore.pro:

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

        Reviewed by Maciej.

        <rdar://problem/5850387> Showing bookmarks reloads Google Reader instead.
        
        In some cases, timeouts scheduled by a page in the onunload handler could fire even when the
        page had been unloaded and replaced by a non-HTML representation based view (such as the bookmarks view).
        
        Fix this by clearing timeouts for pages that aren't cached when the provisional load is committed.
        
        * bindings/js/JSDOMWindowBase.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):

2008-09-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        Don't leak the simple stylesheet.
        Also call RenderTheme::adjustDefaultStyleSheet() in right place.

        * css/CSSStyleSelector.cpp:
        (WebCore::loadFullDefaultStyle):
        (WebCore::loadSimpleDefaultStyle):
        (WebCore::CSSStyleSelector::styleForElement):

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 20711: Change KJS prefix on preprocessor macros to JSC
        <https://bugs.webkit.org/show_bug.cgi?id=20711>

        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSHTMLInputElementBase.cpp:
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20704: Replace the KJS namespace
        <https://bugs.webkit.org/show_bug.cgi?id=20704>

        Rename the KJS namespace to JSC. There are still some uses of KJS in the
        names of JNI functions, and I will check if these are safe to change
        as well.

        * WebCore.base.exp:
        * bindings/js/GCController.cpp:
        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSAudioConstructor.h:
        (WebCore::JSAudioConstructor::classInfo):
        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCSSValueCustom.cpp:
        * bindings/js/JSCanvasPixelArrayCustom.cpp:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSClipboardCustom.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.h:
        (WebCore::JSCustomSQLStatementCallback::create):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        (WebCore::JSCustomSQLStatementErrorCallback::create):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.h:
        (WebCore::JSCustomSQLTransactionCallback::create):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        (WebCore::JSCustomSQLTransactionErrorCallback::create):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.h:
        (WebCore::JSCustomVoidCallback::create):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::dispatchEvent):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsOwnedStringOrNull):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        (WebCore::cacheDOMObject):
        (WebCore::cacheSVGDOMObject):
        (WebCore::DOMExceptionTranslator::DOMExceptionTranslator):
        (WebCore::toJS):
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::classInfo):
        (WebCore::JSDOMWindowBase::d):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getPropertyAttributes):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::asJSDOMWindow):
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        (WebCore::JSDOMWindow::customPut):
        (WebCore::JSDOMWindowBase::allowsAccessFrom):
        (WebCore::JSDOMWindowBase::allowsAccessFromNoErrorMessage):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getPropertyAttributes):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::classInfo):
        * bindings/js/JSDatabaseCustom.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSDocumentFragmentCustom.cpp:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventListener.h:
        (WebCore::JSUnprotectedEventListener::create):
        (WebCore::JSEventListener::create):
        * bindings/js/JSEventTargetBase.cpp:
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetBase::getValueProperty):
        (WebCore::JSEventTargetBase::putValueProperty):
        (WebCore::JSEventTargetBase::getOwnPropertySlot):
        (WebCore::JSEventTargetBase::put):
        (WebCore::JSEventTargetPrototype::JSEventTargetPrototype):
        (WebCore::JSEventTargetPrototype::self):
        (WebCore::JSEventTargetPrototype::getOwnPropertySlot):
        (WebCore::JSEventTargetPrototype::classInfo):
        * bindings/js/JSEventTargetNode.cpp:
        * bindings/js/JSEventTargetNode.h:
        (WebCore::JSEventTargetNode::getOwnPropertySlot):
        (WebCore::JSEventTargetNode::getValueProperty):
        (WebCore::JSEventTargetNode::put):
        (WebCore::JSEventTargetNode::putValueProperty):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::toBoolean):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLElementCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase):
        (WebCore::JSHTMLInputElementBase::getOwnPropertySlot):
        * bindings/js/JSHTMLInputElementBase.h:
        (WebCore::JSHTMLInputElementBase::classInfo):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        * bindings/js/JSHTMLOptionElementConstructor.h:
        (WebCore::JSHTMLOptionElementConstructor::classInfo):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::selectIndexSetter):
        (WebCore::JSHTMLSelectElement::indexSetter):
        * bindings/js/JSHTMLSelectElementCustom.h:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::classInfo):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        * bindings/js/JSInspectedObjectWrapper.h:
        (WebCore::JSInspectedObjectWrapper::wrapOutgoingValue):
        (WebCore::JSInspectedObjectWrapper::classInfo):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        * bindings/js/JSInspectorCallbackWrapper.h:
        (WebCore::JSInspectorCallbackWrapper::classInfo):
        (WebCore::JSInspectorCallbackWrapper::wrapOutgoingValue):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        * bindings/js/JSNSResolver.cpp:
        * bindings/js/JSNSResolver.h:
        (WebCore::JSNSResolver::create):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::classInfo):
        * bindings/js/JSNavigatorCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSNodeIteratorCustom.cpp:
        * bindings/js/JSNodeListCustom.cpp:
        * bindings/js/JSPluginArrayCustom.cpp:
        * bindings/js/JSPluginCustom.cpp:
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::getRuntimeObject):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::call):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::unwrappedObject):
        (WebCore::JSQuarantinedObjectWrapper::unwrappedGlobalObject):
        (WebCore::JSQuarantinedObjectWrapper::className):
        * bindings/js/JSRGBColor.cpp:
        * bindings/js/JSRGBColor.h:
        (WebCore::JSRGBColor::classInfo):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * bindings/js/JSSVGLazyEventListener.cpp:
        * bindings/js/JSSVGLazyEventListener.h:
        * bindings/js/JSSVGLengthCustom.cpp:
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp:
        * bindings/js/JSSVGTransformListCustom.cpp:
        * bindings/js/JSStorageCustom.cpp:
        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/js/JSStyleSheetListCustom.cpp:
        * bindings/js/JSTextCustom.cpp:
        * bindings/js/JSTreeWalkerCustom.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.h:
        (WebCore::JSXMLHttpRequestConstructor::classInfo):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        * bindings/js/JSXSLTProcessorConstructor.h:
        (WebCore::JSXSLTProcessorConstructor::classInfo):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::attachDebugger):
        (WebCore::ScriptController::windowScriptNPObject):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerGtk.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        (WebCore::ScriptController::windowScriptObject):
        (WebCore::ScriptController::clearPlatformScriptObjects):
        (WebCore::updateRenderingForBindings):
        (WebCore::ScriptController::initJavaJSBindings):
        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptControllerWin.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptControllerWx.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::getRange):
        * bindings/objc/DOM.mm:
        (-[DOMNode JSC::Bindings::]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper):
        (WebCore::createDOMWrapper):
        * bindings/objc/WebScriptObject.mm:
        (WebCore::createJSWrapper):
        (-[WebScriptObject _initWithJSObject:JSC::originRootObject:JSC::Bindings::rootObject:JSC::Bindings::]):
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        * bridge/NP_jsobject.h:
        * bridge/c/c_class.cpp:
        * bridge/c/c_class.h:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.cpp:
        * bridge/c/c_runtime.h:
        * bridge/c/c_utility.cpp:
        * bridge/c/c_utility.h:
        * bridge/jni/jni_class.cpp:
        * bridge/jni/jni_class.h:
        * bridge/jni/jni_instance.cpp:
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (JSC::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        * bridge/jni/jni_runtime.h:
        * bridge/jni/jni_utility.cpp:
        * bridge/jni/jni_utility.h:
        * bridge/npruntime.cpp:
        (_NPN_GetStringIdentifier):
        * bridge/objc/WebScriptObject.h:
        * bridge/objc/objc_class.h:
        * bridge/objc/objc_class.mm:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        * bridge/qt/qt_class.cpp:
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.cpp:
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::):
        * bridge/qt/qt_runtime.h:
        * bridge/runtime.cpp:
        * bridge/runtime.h:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::gcProtect):
        (JSC::Bindings::RootObject::gcUnprotect):
        * bridge/runtime_root.h:
        * bridge/testbindings.cpp:
        * bridge/testbindings.mm:
        * bridge/testqtbindings.cpp:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/NSResolver.h:
        * dom/Node.cpp:
        (WebCore::Node::setDocument):
        (WebCore::ResolveNamespaceFunctor::ResolveNamespaceFunctor):
        (WebCore::resolveNamespacesForSelector):
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        * dom/Node.h:
        * dom/NodeFilter.cpp:
        * dom/NodeFilter.h:
        * dom/NodeFilterCondition.cpp:
        * dom/NodeFilterCondition.h:
        * dom/NodeIterator.cpp:
        * dom/NodeIterator.h:
        * dom/Traversal.cpp:
        * dom/Traversal.h:
        * dom/TreeWalker.cpp:
        * dom/TreeWalker.h:
        * dom/make_names.pl:
        * history/CachedPage.cpp:
        * history/CachedPage.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::getInstance):
        * html/HTMLPlugInElement.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::iconDatabase):
        * page/Console.cpp:
        * page/Console.h:
        * page/InspectorController.cpp:
        (WebCore::XMLHttpRequestResource::XMLHttpRequestResource):
        (WebCore::XMLHttpRequestResource::~XMLHttpRequestResource):
        (WebCore::InspectorResource::setXMLHttpRequestProperties):
        (WebCore::InspectorResource::sourceString):
        (WebCore::getResourceDocumentNode):
        (WebCore::search):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::addDatabaseScriptResource):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        * page/InspectorController.h:
        (WebCore::InspectorController::profiles):
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::scopeChain):
        * page/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::create):
        (WebCore::JavaScriptCallFrame::update):
        * page/JavaScriptDebugListener.h:
        * page/JavaScriptDebugServer.cpp:
        (WebCore::dispatchDidParseSource):
        * page/JavaScriptDebugServer.h:
        * page/JavaScriptProfile.cpp:
        * page/JavaScriptProfile.h:
        * page/JavaScriptProfileNode.cpp:
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getTotalPercent):
        (WebCore::getSelfPercent):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getVisible):
        * page/JavaScriptProfileNode.h:
        * page/Page.cpp:
        (WebCore::Page::setDebuggerForAllPages):
        (WebCore::Page::setDebugger):
        * page/Page.h:
        (WebCore::Page::debugger):
        * page/mac/FrameMac.mm:
        * platform/KURL.h:
        (WebCore::KURL::operator JSC::UString):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::find):
        * platform/text/AtomicString.h:
        (WebCore::AtomicString::AtomicString):
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::charactersToDouble):
        * platform/win/BString.cpp:
        * platform/win/BString.h:
        * plugins/MimeTypeArray.h:
        * plugins/Plugin.h:
        * plugins/PluginArray.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        * storage/Database.cpp:
        (WebCore::Database::Database):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText):
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::dropProtection):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

2008-09-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Adopt opener restriction on frame navigation.
          https://bugs.webkit.org/show_bug.cgi?id=20642

        This restriction helps prevent an attacker from navigating top-level
        windows that were created by another web site.

        Tests: http/tests/security/frameNavigation/not-opener.html
               http/tests/security/frameNavigation/opener.html

        * loader/FrameLoader.cpp:
        (WebCore::canAccessAncestor):
        (WebCore::FrameLoader::shouldAllowNavigation):

2008-09-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - use the correct sign for vertical offsets of combining marks

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):

2008-09-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - add the combining mark offsets in two places where I forgot them

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):

2008-09-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - correct glyph advances in complex text using web fonts rendered with
          Core Graphics

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2008-09-07  Keishi Hattori  <casey.hattori@gmail.com>

        Adds console.dirxml support to the Web Inspector.

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

        Reviewed by Timothy Hatcher.

        * WebCore.vcproj/WebCore.vcproj: Added ElementsTreeOutline.js.
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::dirxml):
        * page/Console.cpp:
        (WebCore::Console::dirxml): Adds a ConsoleMessage with NodeMessageLevel.
        * page/Console.h:
        (WebCore::): Added NodeMessageLevel.
        * page/Console.idl: Added console.dirxml.
        * page/inspector/Console.js: A NodeMessage creates a ElementsTreeOutline.
        * page/inspector/ElementsPanel.js: Modified to use ElementsTreeOutline. The ElementsTreeOutline 
        in the ElementsPanel has includeRootDOMNode and selectEnabled set to true.
        * page/inspector/ElementsTreeOutline.js: Added.
        (WebInspector.ElementsTreeOutline): A subclass of TreeOutline for displaying a DOM node tree.
        (WebInspector.ElementsTreeElement): A subclass of TreeElement for ElementsTreeOutline.
        * page/inspector/WebKit.qrc: Added ElementsTreeOutline.js.
        * page/inspector/inspector.css:
        * page/inspector/inspector.html: Added ElementsTreeOutline.js.
        * page/inspector/inspector.js: Moved hover related methods to WebInspector.
        (WebInspector.altKeyDown):
        (WebInspector.forceHoverHighlight):
        (WebInspector.hoveredDOMNode):
        (WebInspector._updateHoverHighlightSoon):
        (WebInspector._updateHoverHighlight):
        (WebInspector.documentKeyDown): Updates WebInspector.altKeyDown
        (WebInspector.documentKeyUp): Updates WebInspector.altKeyDown
        * page/inspector/utilities.js: Added getDocumentForNode, parentNodeOrFrameElement,
        isAncestorIncludingParentFrames.

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

        Qt build fix.

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertQVariantToValue):

=== End merge of squirrelfish-extreme ===

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

        Start bringing up SFX on windows.

        Reviewed by Mark Rowe and Sam Weinig

        Start doing the work to bring up SFX on windows.  Initially
        just working on WREC, as it does not make any calls so reduces
        the amount of code that needs to be corrected.

        Add forwarding headers

        * ChangeLog:
        * ForwardingHeaders/masm/MacroAssembler.h: Added.
        * WebCore.vcproj/WebCore.vcproj:

2008-08-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Fix the build of the full WebKit stack.

        Add forwarding headers.

        * ForwardingHeaders/masm/IA32MacroAsm.h: Added.
        * ForwardingHeaders/wrec/WREC.h: Added.

=== Start merge of squirrelfish-extreme ===

2008-09-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/6187043> 
        Don't parse full HTML user agent style sheet unless it is actually needed
        <rdar://problem/6131889> 
        WebView is significantly more expensive to create recently
        
        Parsing the html4.css takes significant amount of time and memory (~50kb) on application
        startup. Some clients may never use most of the rules.
        
        With this patch we use simplified UA stylesheet until we hit something it can't handle. 
        This avoids full stylesheet parsing on application startup (due to empty document construction)
        and also makes it possible for clients with very simple demands (divs and spans only) never to load 
        the full style.
        
        It also delays view source style parsing until it is used.

        * css/CSSStyleSelector.cpp:
        (WebCore::elementCanUseSimpleDefaultStyle):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::loadFullDefaultStyle):
        (WebCore::loadSimpleDefaultStyle):
        (WebCore::loadViewSourceStyle):
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::CSSStyleSelector::styleForElement):

2008-09-06  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix.

        * WebCoreSources.bkl:

2008-09-06  Antti Koivisto  <antti@apple.com>

        Reverting r35953 which was causing problems on Windows which relies on
        WebCore timers in nested event loops. r36132 did alternative fix.

        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2008-09-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        Fix <rdar://problem/6201644>
        https://bugs.webkit.org/show_bug.cgi?id=20493
        Crash after OK in dialog box and reloading page in secure mode
        
        Limited loader only fix since the general timer fix is causing problems on Windows.

        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::Host::Host):
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        (WebCore::Loader::Host::didReceiveData):
        * loader/loader.h:
        (WebCore::Loader::Host::processingResource):

2008-09-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        The initial Core Text adoption prototype was made by Daniel Fenwick.

        - <rdar://problem/5158514> Add a Core Text-based complex text code path

        Currently the Core Text code path is not used in any configuration.

        * WebCore.xcodeproj/project.pbxproj: Added files.
        * config.h: Defined WTF_USE_ATSUI and WTF_USE_CORE_TEXT.
        * platform/graphics/Font.cpp:
        (WebCore::WidthIterator::advance): Moved the spacingDisabled() test out
        of the loop.
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::add): Added this version that takes an advance.
        * platform/graphics/SimpleFontData.h: Added ATSUI and CORE_TEXT #ifdefs.
        Added getCTFont() and getCFStringAttributes() and corresponding data
        members for Core Text.
        * platform/graphics/mac/CoreTextController.cpp: Added.
        (WebCore::roundCGFloat): Helper function.
        (WebCore::ceilCGFloat): Helper function.
        (WebCore::CoreTextController::CoreTextRun::CoreTextRun):
        (WebCore::CoreTextController::CoreTextController):
        (WebCore::CoreTextController::offsetForPosition):
        (WebCore::CoreTextController::collectCoreTextRuns): Added. Segments the
        run into subruns as necessary such that each subrun can be rendered with
        a single font. Also separates out soft hyphens and replaces them with
        real hyphens, because Core Text does not emit a glyph for soft hyphens.
        Then calls collectCoreTextRunsForCharacters() on each subrun.
        (WebCore::CoreTextController::advance):
        (WebCore::CoreTextController::collectCoreTextRunsForCharacters): Creates
        a CTLine from the given subrun and collects its CoreTextRuns.
        (WebCore::CoreTextController::adjustGlyphsAndAdvances): Applies the
        rounding hacks, letter- and word-spacing and glyph substitutions and
        stores the resulting adjusted glyphs and advances.
        * platform/graphics/mac/CoreTextController.h: Copied from WebCore/platform/graphics/win/UniscribeController.h.
        (WebCore::CoreTextController::totalWidth):
        (WebCore::CoreTextController::finalRoundingWidth):
        (WebCore::CoreTextController::CoreTextRun::ctRun):
        (WebCore::CoreTextController::CoreTextRun::glyphCount):
        (WebCore::CoreTextController::CoreTextRun::fontData):
        (WebCore::CoreTextController::CoreTextRun::characters):
        (WebCore::CoreTextController::CoreTextRun::stringLocation):
        (WebCore::CoreTextController::CoreTextRun::stringLength):
        (WebCore::CoreTextController::CoreTextRun::indexAt):
        * platform/graphics/mac/FontMac.mm: Moved the ATSUI-specific parts to
        FontMacATSUI.mm.
        * platform/graphics/mac/FontMacATSUI.mm: Copied from WebCore/platform/graphics/mac/FontMac.mm.
        (WebCore::disableLigatures): Changed to call
        FontPlatformData::allowsLigatures().
        (WebCore::overrideLayoutOperation): Changed to call
        FontPlatformData::roundsGlyphAdvances().
        * platform/graphics/mac/FontMacCoreText.cpp: Copied from WebCore/platform/graphics/win/FontWin.cpp.
        (WebCore::Font::selectionRectForComplexText): Changed to use
        totalWidth() instead of advancing to the end and using runWidthSoFar().
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText): Ditto.
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::roundsGlyphAdvances): Added. Checks the
        AppKit rendering mode.
        (WebCore::FontPlatformData::allowsLigatures): Added. Implements the
        heuristic that allows ligatures in fonts that do not have a glyph for
        'a', based on the assumption that such fonts are only used in complex
        text.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::getCTFont): Added.
        (WebCore::SimpleFontData::getCFStringAttributes): Added. Caches and
        returns an attributes dictionary.
        * platform/text/mac/ShapeArabic.c: Added ATSUI #ifdefs.
        * platform/text/mac/ShapeArabic.h: Ditto.

2008-09-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - make combining mark offsets work in CG text on Windows

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): The old code tried to translate the text
        matrix, but failed for two reasons: it did not actually change the
        matrix, and even if it did, CGContextSetTextPosition overwrites the
        translation values in the text matrix. Instead, just added the
        translation to the anchor point.

2008-09-05  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=18346
        [GTK] Remove build warnings

        Applied some casts, and removed an unused typedef to make the
        compiler happy, printing less warnings when building.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::containsCharacters):
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_set_caps):
        * platform/network/soup/ResourceHandleSoup.cpp:

2008-09-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Build fix for WebKitWin and Chromium

        * platform/FileSystem.h:

2008-09-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Try to make Chromium compile with ToT:
        - Wrap a few places which depend on KJS:: in #if USE(JSC)
        - Include some windows forward declarations

        * dom/Node.h:
        * page/Console.h:
        * page/animation/CompositeAnimation.h:
        * platform/FileSystem.h:
        * platform/graphics/Image.h:
        * platform/text/AtomicString.h:
        * platform/text/String.cpp:
        * rendering/style/RenderStyle.h:

2008-09-05  Dave Hyatt  <hyatt@apple.com>

        Add support for runtime switchability of the Aqua look and the native look on Windows.
        Make RenderThemeWin compile by default even when USE(SAFARI_THEME) is set.

        Reviewed by Adam Roben

        * WebCore.vcproj/WebCore.vcproj:
        * page/Settings.cpp:
        (WebCore::Settings::setShouldPaintNativeControls):
        * page/Settings.h:
        (WebCore::Settings::shouldPaintNativeControls):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::theme):
        * rendering/RenderThemeWin.cpp:

2008-09-05  Antti Koivisto  <antti@apple.com>

        Qt build fix.

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):

2008-09-05  Dirk Schulze  <vbs85@gmx.de>

        Gtk build fix

        * GNUmakefile.am:

2008-09-05  Antti Koivisto  <antti@apple.com>

        Another build fix.

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished):

2008-09-05  Antti Koivisto  <antti@apple.com>

        Build fixes.
        
        * WebCore.xcodeproj/project.pbxproj:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::cachedImage):

2008-09-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        Most of the implementation for https://bugs.webkit.org/show_bug.cgi?id=17998
        When a resource is cached locally, WebKit should follow RFC 2616 "Specific end-to-end revalidation" instead of "Unspecified end-to-end revalidation"

        Implement HTTP 1.1 "Specific end-to-end revalidation" for WebCore memory cache. This patch does
        not yet enable it for the biggest use case, reloading. However it is good for general browsing as
        well. Doing this in WebCore level as opposed to relying on disk cache has big benefit that
        we avoid re-decoding resources, especially images. 
        
        To be exact the enabled case is not actually the "Specific end-to-end revalidation" since it does not include
        CacheControl: max-age=0 header. That would be added in reload case.
        
        The approach for revalidation is to kick the original resource out from the memory cache
        and create a new CachedResource that represents the revalidation request. In case
        we get 304 back for the request we put the original resource back to the cache, update 
        its expiration date and switch the clients registered to revalidation resource to be
        clients of the original resource.
        
        All heap allocated CachedImage pointers now use CachedResourceHandle<CachedImage> (and so on) instead.
        This allows updating the handles to point to the original resource when the revalidation succeeds. It
        also acts as refcounting smart pointer.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSource.h:
        * css/CSSImportRule.h:
        * dom/Clipboard.h:
        (WebCore::Clipboard::dragImage):
        * dom/ProcessingInstruction.h:
        * dom/ScriptElement.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::isWaitingForScripts):
        * dom/XMLTokenizer.h:
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::setImage):
        (WebCore::HTMLImageLoader::updateFromElement):
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLImageLoader.h:
        (WebCore::HTMLImageLoader::image):
        * html/HTMLLinkElement.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::notifyFinished):
        * html/HTMLTokenizer.h:
        * loader/Cache.cpp:
        (WebCore::Cache::revalidateResource):
        (WebCore::Cache::revalidationSucceeded):
        (WebCore::Cache::revalidationFailed):
        * loader/Cache.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        (WebCore::CachedResource::isExpired):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::deleteIfPossible):
        (WebCore::CachedResource::setResourceToRevalidate):
        (WebCore::CachedResource::clearResourceToRevalidate):
        (WebCore::CachedResource::switchClientsToRevalidatedResource):
        (WebCore::CachedResource::canUseCacheValidator):
        (WebCore::CachedResource::mustRevalidate):
        * loader/CachedResource.h:
        (WebCore::CachedResource::canDelete):
        (WebCore::CachedResource::registerHandle):
        (WebCore::CachedResource::unregisterHandle):
        (WebCore::CachedResource::isCacheValidator):
        (WebCore::CachedResource::resourceToRevalidate):
        (WebCore::CachedResource::setExpirationDate):
        * loader/CachedResourceHandle.cpp: Added.
        (WebCore::CachedResourceHandleBase::setResource):
        * loader/CachedResourceHandle.h: Added.
        (WebCore::CachedResourceHandleBase::~CachedResourceHandleBase):
        (WebCore::CachedResourceHandleBase::get):
        (WebCore::CachedResourceHandleBase::operator!):
        (WebCore::CachedResourceHandleBase::operator UnspecifiedBoolType):
        (WebCore::CachedResourceHandleBase::CachedResourceHandleBase):
        (WebCore::CachedResourceHandleBase::operator=):
        (WebCore::CachedResourceHandle::CachedResourceHandle):
        (WebCore::CachedResourceHandle::get):
        (WebCore::CachedResourceHandle::operator->):
        (WebCore::CachedResourceHandle::operator=):
        (WebCore::CachedResourceHandle::operator==):
        (WebCore::CachedResourceHandle::operator!=):
        (WebCore::operator==):
        (WebCore::operator!=):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkForReload):
        * loader/UserStyleSheetLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        (WebCore::Loader::Host::didReceiveResponse):
        (WebCore::Loader::Host::didReceiveData):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::cachedImage):
        (WebCore::RenderImage::imagePtr):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleCachedImage.h:
        (WebCore::StyleCachedImage::data):
        (WebCore::StyleCachedImage::cachedImage):
        * svg/SVGFEImageElement.h:
        * svg/graphics/filters/SVGFEImage.h:
        * xml/XSLImportRule.h:

2008-09-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz

        <rdar://problem/6180236> - Safari times out connections after 1 or 2 minutes

        A 60-second default timeout was added in http://trac.webkit.org/changeset/17144 in an attempt 
        to model default NSURLRequest behavior in a cross-platform manner.  

        Sadly by always enforcing this 60 second timeout, WebCore was stomping over the wishes of any Webkit 
        client that wished to enforce a much larger default timeout using NSURLRequest API.

        Additionally, upon reviewing what all other browsers do, it seems apparent that "no limit" is desirable
        behavior on the web and this restores previous Safari/WebKit behavior.

        It would be easy to write a layout test for this, but to be effective it would have
        to run for at least 61 seconds, which seems insane until will can parallelize run-webkit-tests

        * manual-tests/timeout-test.html: Added.
        * manual-tests/timeout-test.php: Added.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):  Rename the constant to "unspecifiedTimeoutInterval"
          and make it UINT_MAX so platforms that do set it have an effective "no timeout."  (Windows, for example)
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):  If the timeout for this request is 
          "unspecifiedTimeoutInterval", then don't bother setting the timeout using NSURLRequest API, allowing
          WebKit applications to enforce their own default timeout.

2008-09-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        - fix <rdar://problem/6198514> Changing a button's opacity triggers relayout

        Test: fast/repaint/button-spurious-layout-hint.html

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setStyle): Reset the inner block's style box
        flex to 0 to avoid getting a spurious layout hint. 

2008-09-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes.

        * WebCoreSources.bkl:
        * bindings/js/ScriptControllerWx.cpp: Added.
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * page/wx/AccessibilityObjectWx.cpp: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        * webcore-base.bkl:
        * webcore-wx.bkl:

2008-09-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - roll out r36050 because it made svg/custom/invalid-fill-hex.svg fail,
          and fixing https://bugs.webkit.org/show_bug.cgi?id=15360 appears to
          require a different approach

        * css/CSSGrammar.y:

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

        * Configurations/WebCore.xcconfig: Remove ENABLE_DASHBOARD_SUPPORT from FEATURE_DEFINES.
        * DerivedSources.make: Revert to checking for ENABLE_DASHBOARD_SUPPORT rather than looking
        for ENABLE_DASHBOARD_SUPPORT in FEATURE_DEFINES.

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

        Mac build fix.

        * config.h: Only check the value of HAVE_CONFIG_H if it is defined.

2008-09-04  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        * dom/XMLTokenizer.cpp: Fix the Chromium merge build by adding a missing header (the Mac files must include it somewhere).

2008-09-04  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=20380
        [GTK][AUTOTOOLS] Include autotoolsconfig.h from config.h

        * config.h: Include the configuration header generated by autotools if
        available.

2008-09-04  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Dave Hyatt.

        - rename CachedResource::allReferencesRemoved() to allClientsRemoved()

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::allClientsRemoved):
        * loader/CachedFont.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::allClientsRemoved):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::removeClient):
        * loader/CachedResource.h:
        (WebCore::CachedResource::allClientsRemoved):

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

        Windows build fix after r36071

        We were getting these errors:

        error C2356: initialization segment must not change during translation
        unit

        This was happening because multiple files #included by
        DerivedSources.cpp were themselves #including StaticConstructors.h. I
        fixed the error by adding header guards to StaticConstructors.h so its
        contents will only be included once.

        But it's also not a good idea for StaticConstructors.h to end up in
        DerivedSources.cpp, since it ends up "polluting" all the source files
        we have in there. So I removed all the files that include
        StaticConstructors.h and added some preprocessor directives to
        DerivedSources.cpp to catch this error in the future.

        * DerivedSources.cpp: Removed the *Names.cpp files, which include
        StaticConstructors.h, and added some preprocessor directives to make
        sure we don't end up accidentally including StaticConstructors.h in
        the future.
        * WebCore.vcproj/WebCore.vcproj: Added the *Names.cpp files.
        * platform/StaticConstructors.h: Added header guards.

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

        Windows build fix

        * platform/graphics/win/FontPlatformData.h: Added a missing #include
        of PassRefPtr.h, and corrected the capitalization of RefCounted.h.
        * platform/text/PlatformString.h: Added a missing #include of
        PassRefPtr.h.

2008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix the QtWebKit build to match changes in r36016

        * WebCore.pro:
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::getRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtConnectionObject::execute):

2008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Re-enable support for user stylesheets in QtWebKit
        
        QtWebKit now follows the FRAME_LOADS_USER_STYLESHEET
        code path, which allows us to keep API support for
        loading user style sheets from remote URLs.
        
        As part of the change UserStyleSheetLoader.cpp/h was
        moved from WebCore/loader/mac to WebCore/loader.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.h:
        * loader/UserStyleSheetLoader.cpp: Renamed from WebCore/loader/mac/UserStyleSheetLoader.cpp.
        (UserStyleSheetLoader::UserStyleSheetLoader):
        (UserStyleSheetLoader::~UserStyleSheetLoader):
        * loader/UserStyleSheetLoader.h: Renamed from WebCore/loader/mac/UserStyleSheetLoader.h.
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::setUserStyleSheetLocation):
        (WebCore::Frame::setUserStyleSheet):

2008-09-04  Alp Toker  <alp@nuanti.com>

        Reviewed by Eric.

        Remove left-over QT and CAIRO platform checks.

        * html/CanvasRenderingContext2D.cpp:

2008-09-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Fix leak of TextMetrics due to over-ref as see on buildbot.

        * html/TextMetrics.h: use adoptRef since RefCounted starts @ refcount 1 instead of 0 now.

2008-09-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19717
          <rdar://problem/6026832> REGRESSION (r31876): menu items render horizontally at the Economist

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutOnlyPositionedObjects): In the
        positioned movement only case, call
        tryLayoutDoingPositionedMovementOnly() and fall back on doing a full
        layout if that fails.
        (WebCore::RenderBlock::layoutPositionedObjects): Ditto.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::tryLayoutDoingPositionedMovementOnly): Renamed
        layoutDoingPositionedMovementOnly to this, and made this function
        check if the width changed. If it did, return, leaving the object
        dirty. The caller can then call layout(). The width can change even
        in the "positioned movement only" case if the object is shrink-to-fit
        and the available width constraint is met. (This was the case in the
        bug).
        * rendering/RenderObject.h:
        (WebCore::RenderObject::tryLayoutDoingPositionedMovementOnly):
        Renamed layoutDoingPositionedMovementOnly() to this.

2008-09-03  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Attempt to fix the Qt build.

        * WebCore.pro: add page/animation to include path

2008-09-03  Mark Rowe  <mrowe@apple.com>

        Mac build fix.  Correctly detect whether dashboard support is enabled.

        * DerivedSources.make:

2008-09-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Clean up Platform.h and add PLATFORM(CHROMIUM), PLATFORM(SKIA) and USE(V8_BINDINGS)

        * Configurations/WebCore.xcconfig: add missing ENABLE_*
        * config.h: add rules for V8_BINDINGS

2008-09-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

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

        Add #if USE(JSC) around KJS dependencies
        Remove !USE(JAVASCRIPTCORE_BINDINGS) support for 3 reasons:
        1. Most platforms have it on anyway
        2. V8 is going to want to share some of that code
        3. Those platforms which want it off, should have a separate file instead of an #ifdef in our .cpp

        * bindings/js/JSPluginElementFunctions.cpp: remove !USE(JAVASCRIPTCORE_BINDINGS) support
        * config.h: change JAVASCRIPTCORE_BINDINGS to JSC and add USE(V8)
        * html/HTMLAppletElement.cpp: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLAppletElement.h: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLEmbedElement.cpp: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLEmbedElement.h: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLObjectElement.cpp: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLObjectElement.h: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLPlugInElement.cpp: replace USE(JAVASCRIPTCORE_BINDINGS) with USE(JSC) where needed
        * html/HTMLPlugInElement.h: replace USE(JAVASCRIPTCORE_BINDINGS) with USE(JSC) where needed
        * platform/text/AtomicString.cpp: add USE(JSC)
        * platform/text/AtomicString.h: add USE(JSC)
        * platform/text/PlatformString.h: add USE(JSC)
        * platform/text/String.cpp: add USE(JSC)
        * platform/text/StringImpl.cpp: add USE(JSC)
        * platform/text/StringImpl.h: add USE(JSC)

2008-09-03  Dean McNamee  <deanm@chromium.org>

        Reviewed by Darin Adler.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20511
        Bug 20511: Remove static initializers on Windows

        Avoid static initializers on Windows by forcing Visual C++ to put
        all static initializers in a code segment that is never executed.

        * config.h:
        * css/MediaFeatureNames.cpp:
        * dom/EventNames.cpp:
        * dom/QualifiedName.cpp:
        * dom/make_names.pl:
        * platform/StaticConstructors.h:
        * platform/text/AtomicString.cpp:

2008-09-03  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Dave Hyatt.

        Make FontCairo draw TextStroke and TextFill separately.

        [CAIRO] draw TextFill and TextStroke separately.
        [https://bugs.webkit.org/show_bug.cgi?id=20631]

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

2008-09-03  Peter Kasting  <pkasting@google.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=19663
        Account for paint and timer lag when animating images.  Also pretend
        that images whose animations were paused (by becoming invisible)
        continued to animate, by "catching up" to the correct frame when they're
        shown again.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        (WebCore::BitmapImage::notifyObserverAndTrimDecodedData):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):

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

        Reviewed by Tim.

        Remove the rest of the "zombie" code from the profiler.
        - There is no longer a need for the ProfilerClient callback mechanism.

        * page/Console.cpp: 
        (WebCore::Console::Console):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd): Move the variables from the header to
        here since we don't have to wait for a callback to use them.
        * page/Console.h:
        * page/InspectorController.cpp:
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        * page/InspectorController.h:

2008-09-03  Ada Chan  <adachan@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj: Added JSWebKitCSSKeyframeRule.cpp and JSWebKitCSSKeyframesRule.cpp to the project.

2008-09-01  Dean Jackson  <dino@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=20594
        Add DOM interfaces for WebKitCSSKeyframeRule
        and WebKitCSSKeyframesRule.

        TEST: LayoutTests/css3/keyframes-rule.html

        * css/WebKitCSSKeyframeRule.idl: Added
        * css/WebKitCSSKeyframesRule.idl: Added

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
            Add return of new JS Keyframe rules
        * bindings/objc/DOMInternal.h:
            Include new internal header

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            Build configs for new files

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

        Windows build fix

        * DerivedSources.cpp: Add JSTextMetrics.cpp to fix the build.
        * WebCore.vcproj/WebCore.vcproj: Add JSTextMetrics.h for
        convenience/consistency.

2008-09-03  Adele Peterson  <adele@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2008-09-03  David Hyatt  <hyatt@apple.com>

        Fix for bug 18203, right floats should be allowed to overflow past the left border edge.

        Reviewed by Darin (ages ago)

        Added fast/block/float/clamped-right-float.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionNewFloats):

2008-09-02  David Hyatt  <hyatt@apple.com>

        Add support for canvas text drawing APIs.

        Reviewed by olliej

        Tests added as fast/canvas/canvas-text-*.html

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::applyPropertyToStyle):
        * css/CSSStyleSelector.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::font):
        (WebCore::CanvasRenderingContext2D::setFont):
        (WebCore::CanvasRenderingContext2D::textAlign):
        (WebCore::CanvasRenderingContext2D::setTextAlign):
        (WebCore::CanvasRenderingContext2D::textBaseline):
        (WebCore::CanvasRenderingContext2D::setTextBaseline):
        (WebCore::CanvasRenderingContext2D::fillText):
        (WebCore::CanvasRenderingContext2D::strokeText):
        (WebCore::CanvasRenderingContext2D::measureText):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        (WebCore::CanvasRenderingContext2D::accessFont):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.idl:
        * html/TextMetrics.h: Added.
        (WebCore::TextMetrics::create):
        (WebCore::TextMetrics::width):
        (WebCore::TextMetrics::setWidth):
        (WebCore::TextMetrics::TextMetrics):
        * html/TextMetrics.idl: Added.
        * platform/graphics/Font.cpp:
        (WebCore::Font::lineGap):
        * platform/graphics/Font.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::textAlignName):
        (WebCore::parseTextAlign):
        (WebCore::textBaselineName):
        (WebCore::parseTextBaseline):
        * platform/graphics/GraphicsTypes.h:
        (WebCore::):

2008-09-03  John Sullivan  <sullivan@apple.com>

        Fixed <rdar://problem/6193022> <rdar://problem/6193022> Crash occurs at WebCore::AnimationBase::propertiesEqual () after certain steps

        Fixed by Darin, reviewed by me

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::propertiesEqual):
        added ensurePropertyMap() to this static function
        (WebCore::AnimationBase::getPropertyAtIndex):
        ditto
        (WebCore::AnimationBase::getNumProperties):
        ditto

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

        Reviewed by Darin and Tim.

        Remove most of the "zombie" mode from the profiler.  Next we will need
        to remove the client callback mechanism in profiles.
        - These changes are a result of changes to JSCore.

        * manual-tests/inspector/profiler-test-nested-start-and-stop-profiler.html:
        * page/Console.cpp:
        (WebCore::retrieveLastCaller):
        (WebCore::Console::profileEnd):
        * page/InspectorController.cpp:
        (WebCore::InspectorController::stopUserInitiatedProfiling):

2008-09-03  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Test: fast/forms/search-display-none-cancel-button.html

        Allow display:none to work on a search field's cancel button.  Prepare for adding more style-ability for the results button too.

        * css/html4.css: Set display:inline-block for these buttons.  Now they can be overridden by a web author.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setStyle): Add nil checks for the button renderers.
        (WebCore::RenderTextControl::createResultsButtonStyle): Don't set the display explicitly.  This is now done in html4.css.
        (WebCore::RenderTextControl::createCancelButtonStyle): ditto.
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        Reorganize this code so our complicated way of adding shadow nodes is abstracted out into the TextControlInnerElement class.
        (WebCore::RenderTextControl::updateFromElement): Added nil checks for the button renderers.
        (WebCore::RenderTextControl::subtreeHasChanged): ditto.
        (WebCore::RenderTextControl::calcHeight): ditto.
        (WebCore::RenderTextControl::nodeAtPoint): ditto.
        (WebCore::RenderTextControl::layout): ditto.
        (WebCore::RenderTextControl::calcPrefWidths): ditto.
        (WebCore::RenderTextControl::clientPaddingLeft): ditto.
        (WebCore::RenderTextControl::clientPaddingRight): ditto.

        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock): Moved from RenderTextControl.cpp.
        (WebCore::RenderTextControlInnerBlock::nodeAtPoint): ditto.
        (WebCore::TextControlInnerElement::attachInnerElement): Added.
         This does all the separate steps of attaching a shadow node that used to be repeated in RenderTextControl::createSubtreeIfNeeded for each element.
        (WebCore::TextControlInnerTextElement::createRenderer): Added.  Creates a RenderTextControlInnerBlock.
        * rendering/TextControlInnerElements.h:

2008-08-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        Elminate SQLiteAuthorizer class.

        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:
        * GNUmakefile.am
        Removed SQLiteAuthorizer.h.

        * platform/sql/SQLiteAuthorizer.cpp:
        * platform/sql/SQLiteAuthorizer.h: Removed.
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::authorizerFunction):
        (WebCore::SQLiteDatabase::setAuthorizer):
        * platform/sql/SQLiteDatabase.h:
        * storage/DatabaseAuthorizer.h:
        (WebCore::DatabaseAuthorizer::create):
        (WebCore::DatabaseAuthorizer::createView):
        (WebCore::DatabaseAuthorizer::createTempView):
        (WebCore::DatabaseAuthorizer::dropView):
        (WebCore::DatabaseAuthorizer::dropTempView):
        (WebCore::DatabaseAuthorizer::allowSelect):
        (WebCore::DatabaseAuthorizer::allowReindex):
        Merge SQLiteAuthorizer and DatabaseAuthorizer, as keeping them separate serves no purpose.

2008-09-03  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Mark Rowe.

        WebKitGtk build fix.

        * GNUmakefile.am:
        * page/animation/AnimationController.h:

2008-09-02  Robert Blaut  <webkit@blaut.biz>

        Reviewed by Geoff Garen.

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=16913>
        Misplaced elements should not close DL lists.

        Test: fast/invalid/test-case-tr-th-td-should-not-close-dl-list.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):

2008-09-02  Glenn Wilson  <wilsong@gmail.com>

        Reviewed by Darin Adler.

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=15360>
        Bug 15360: color:#{predefined colorName} is treated as colorName in Safari

        We would inappropriately interpret and apply an invalid CSS "color" property
        when the value is a predefined color preceded by a '#' symbol.  For example,
        style="color:#gray;" would apply the color gray when it should not.

        In the bison template, "hexcolor" was defined as both "HEX maybe_space" OR "IDENT maybe_space".
        This caused identifiers not fitting the appropriate hex format but preceded by a '#' to be 
        interpreted as a valid color (CSSPrimitiveValue::CSS_PARSER_HEXCOLOR), when it was really just
        an ignorable token.

        To correct this, "IDENT maybe_space" was removed from "hexcolor" and added under "term" as
        '#' IDENT maybe_space, which is then processed as a CSSPrimitiveValue::CSS_STRING instead of
        CSSPrimitiveValue::CSS_PARSER_HEXCOLOR.

        Test: css1/color_and_background/invalid_color.html

        * css/CSSGrammar.y:

2008-09-02  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19964
        Bug 19964: Divide by zero crash in RenderBox::calculateBackgroundSize with 0,0 bmp background image

        Add a check to RenderBox::repaintLayerRectsForImage to make sure the current layer image can be rendered.

        Test: css3/khtml-background-size-0x0-bmp.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):

2008-09-02  Glenn Wilson  <wilsong@gmail.com>

        Reviewed by Eric Seidel.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20397
        Bug 20397: Invalid webkit-border-bottom-left-radius property causes crash

        The function checkForOrphanedUnits() would change the length of a list whose size was
        was already determined before the call to checkForOrphanedUnits was made.  Later in
        the caller, the old size was being used for boundary management.

        This has been fixed by moving the call to checkForOrphanedUnits() earlier in the
        calling function, before the size of the list is determined.

        Test: fast/css/orphaned_units_crash.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):  Moved call to checkForOrphanedUnits() earlier in the function.

2008-09-02  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Darin Adler.

        Fallback on invalid fill or stroke styles in Canvas was
        transparent black. Changed it to last valid style.

        Canvas fillStyle() and strokeStyle() needs fallback
        https://bugs.webkit.org/show_bug.cgi?id=20474

        Tests: fast/canvas/canvas-invalid-fillstyle.html
               fast/canvas/canvas-invalid-strokestyle.html

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):

2008-09-02  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Darin Adler.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20468
        Updated drawImage() in canvas to match the current specification.

        Test: fast/canvas/drawImage-with-negative-source-destination.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeRect):
        (WebCore::CanvasRenderingContext2D::drawImage):

2008-08-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5768210> Switch back to the system version of SQLite

        Use the system version of SQLite when it is new enough to provide the functionality
        that WebCore requires.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/WebCore.xcconfig:

2008-09-02  Dan Bernstein  <mitz@apple.com>

        - build fix

        * page/animation/AnimationBase.h:

2008-09-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

        AnimationController.cpp should be split into separate files
        https://bugs.webkit.org/show_bug.cgi?id=20604
        
        Note: All makefiles, except WebCore.xcodeproj have been changed without testing, upon
        recommendation of Dave Hyatt.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            Build files.
        
        * page/AnimationController.cpp: Removed.
        * page/AnimationController.h: Removed.
        * page/animation: Added.
        * page/animation/AnimationBase.cpp: Added.
        * page/animation/AnimationBase.h: Added.
        * page/animation/AnimationController.cpp: Copied from WebCore/page/AnimationController.cpp.
        * page/animation/AnimationController.h: Copied from WebCore/page/AnimationController.h.
        * page/animation/CompositeAnimation.cpp: Added.
        * page/animation/CompositeAnimation.h: Added.
        * page/animation/ImplicitAnimation.cpp: Added.
        * page/animation/ImplicitAnimation.h: Added.
        * page/animation/KeyframeAnimation.cpp: Added.
        * page/animation/KeyframeAnimation.h: Added.

2008-09-02  Dan Bernstein  <mitz@apple.com>

        - release build fix

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::calculateDrawingMode):

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

        Make console functions log the correct resource URL and
        line number for where the call originated.

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

        Reviewed by Kevin McCullough.

        Test: manual-tests/inspector/console-call-line-numbers.html

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::count): Call the impl.
        (WebCore::JSConsole::timeEnd): Ditto.
        * manual-tests/inspector/console-call-line-numbers.html: Added.
        * manual-tests/inspector/resources/script-console-calls.js: Added.
        * page/Console.cpp:
        (WebCore::retrieveLastCaller): Helper to get the URL and line.
        (WebCore::Console::error): Call retrieveLastCaller to get the URL and
        line number to pass to addMessageToConsole.
        (WebCore::Console::info): Ditto.
        (WebCore::Console::log): Ditto.
        (WebCore::Console::assertCondition): Ditto.
        (WebCore::Console::count): Ditto.
        (WebCore::Console::timeEnd): Ditto.
        (WebCore::Console::warn): Ditto.
        * page/Console.h:
        * page/Console.idl: Make count and timeEnd custom.

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

        Removed IDL files from WebCore's framework resources.

        * WebCore.xcodeproj/project.pbxproj:

2008-09-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - <rdar://problem/5681647> pages at http://www.stendmarsofa.com/ are so slow to calculate style it seems like a hang

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Added a
        cap on the number of consecutive identical residual style tags to
        reopen.
        (WebCore::HTMLParser::popBlock): Ditto.

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

        Reviewed by Adam Roben.

        A little database quota management cleanup.

        * storage/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::OriginQuotaManager):
        (WebCore::OriginQuotaManager::lock):
        (WebCore::OriginQuotaManager::unlock):
        (WebCore::OriginQuotaManager::trackOrigin):
        (WebCore::OriginQuotaManager::tracksOrigin):
        (WebCore::OriginQuotaManager::addDatabase):
        (WebCore::OriginQuotaManager::removeDatabase):
        (WebCore::OriginQuotaManager::removeOrigin):
        (WebCore::OriginQuotaManager::markDatabase):
        (WebCore::OriginQuotaManager::diskUsage):
        * storage/OriginQuotaManager.h:
        Changed to assert that a lock is taken more directly and reliably. Removed comments about
        main/background threads, as this is likely to stop being true with synchronous Database calls
        being made on worker threads.

        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::OriginUsageRecord):
        (WebCore::OriginUsageRecord::addDatabase):
        (WebCore::OriginUsageRecord::removeDatabase):
        (WebCore::OriginUsageRecord::markDatabase):
        (WebCore::OriginUsageRecord::diskUsage):
        * storage/OriginUsageRecord.h:
        (WebCore::OriginUsageRecord::DatabaseEntry::DatabaseEntry):
        Don't use a magic value for unknown. It is totally unnecessary for DatabaseEntry, and
        can be replaced with a single boolean for OriginUsageRecord.
        Added assertions for string parameters being unshared.


2008-09-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

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

        Make granting LoadLocalResources conditional on a policy.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setLocalLoadPolicy):
        (WebCore::FrameLoader::restrictAccessToLocal):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::):
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::grantLoadLocalResources):
        * platform/SecurityOrigin.h:

2008-09-01  Dean Jackson  <dino@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=20571
        Make sure Window object can assign Animation/Transition event
        listeners via attributes.

        Also added a bunch of transition event tests, although
        only transition-end-event-window is directly relevant to this patch.

        (WebCore::JSDOMWindowBase::put):

        Tests: transitions/transition-end-event-all-properties.html
               transitions/transition-end-event-attributes.html
               transitions/transition-end-event-container.html
               transitions/transition-end-event-left.html
               transitions/transition-end-event-multiple-01.html
               transitions/transition-end-event-multiple-02.html
               transitions/transition-end-event-multiple-03.html
               transitions/transition-end-event-multiple-04.html
               transitions/transition-end-event-nested.html
               transitions/transition-end-event-transform.html
               transitions/transition-end-event-window.html

2008-09-01  Dean Jackson  <dino@apple.com>

        Reviewed by Sam Weinig

        Code styling cleanup.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getValueProperty):
        (WebCore::JSDOMWindowBase::put):

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

        Reviewed by Darin Adler.

        First cut at inline caching for access to vanilla JavaScript properties.

        Updated for JavaScriptCore changes. Mostly mechanical addition of StructureIDs
        to WebCore classes, and PutPropertySlot& arguments to put functions.

        (WebCore::JSCSSStyleDeclaration::customPut): Be sure to play nice with
        inline caching for global properties, so global assignment can be optimized.

        * ForwardingHeaders/kjs/StructureID.h: Added.
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::put):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::put):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetBase::put):
        * bindings/js/JSEventTargetNode.h:
        (WebCore::JSEventTargetNode::put):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::customPut):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::customPut):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::put):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::customPut):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customPut):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        (WebCore::JSInspectedObjectWrapper::JSInspectedObjectWrapper):
        * bindings/js/JSInspectedObjectWrapper.h:
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):
        (WebCore::JSInspectorCallbackWrapper::JSInspectorCallbackWrapper):
        * bindings/js/JSInspectorCallbackWrapper.h:
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::customPut):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectCustomPut):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::JSQuarantinedObjectWrapper):
        (WebCore::JSQuarantinedObjectWrapper::put):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::customPut):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::setMember):
        * bridge/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        (ObjcFallbackObjectImp::put):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * bridge/runtime_array.cpp:
        (RuntimeArray::put):
        * bridge/runtime_array.h:
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::put):
        * bridge/runtime_object.h:

2008-09-01  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Fixed border-radius for Cairo.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::strokeArc):

2008-09-01  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Added canvas's globalAlpha to cairo.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::getAlpha):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):

2008-08-31  Simon Hausmann  <hausmann@webkit.org>

        Unreviewed Qt build fix.

        * WebCore.pro: Add TextControlInnerElements.cpp to SOURCES instead of
        the .h file

2008-08-30  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - adopt some new JavaScriptCore functions where appropriate

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::windowProtoFuncAToB): Adopted jsEmptyString.
        (WebCore::windowProtoFuncBToA): Ditto.
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSLazyEventListener::eventParameterName): Adopted
        jsNontrivialString.
        * bindings/js/JSSVGLazyEventListener.cpp:
        (WebCore::JSSVGLazyEventListener::eventParameterName): Ditto.

2008-08-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders' rubberstamp

        Style cleanup to match MediaTokenizer::writeRawData()

        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):

2008-08-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        https://bugs.webkit.org/show_bug.cgi?id=20556
        <rdar://problem/6181817> REGRESSION (r35946): media/video-click-dlbclick-standalone.html [sic] fails because load never fires

        Fix regression I introducted in 35946
        Already covered by media/video-click-dlbclick-standalone.html

        * loader/MediaDocument.cpp:
        (WebCore::MediaTokenizer::createDocumentStructure): Don't cancel the load here - too early!
        (WebCore::MediaTokenizer::writeRawData): Call finish() here so onload() can be called.  Also add
          an ASSERT signifying that this method should only be called once, to more closely follow the
          PluginDocument case.

2008-08-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/6181588>

        This patch makes hit testing take into account the new concept of a 
        disconnected frame, in which some of the content may not be 
        visible. The current hit testing mechanism starts at a target frame 
        and drills down for a HitTestResult. In some cases, drilling down 
        will find a non-visible result. When this happens, we need to try 
        again, starting at a higher level -- namely, starting at the main 
        frame.

        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea): New function that tests if a 
        point is inside the visible area for a disconnected frame.
        * editing/Editor.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):

2008-08-29  Adele Peterson  <adele@apple.com>

        Reviewed by Adam Roben. 

        Rename HTMLTextFieldInnerElement.h/.cpp to TextControlInnerElements.h/.cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLTextFieldInnerElement.cpp: Removed.
        * html/HTMLTextFieldInnerElement.h: Removed.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        * rendering/RenderTextControl.h:
        * rendering/TextControlInnerElements.cpp: Copied from html/HTMLTextFieldInnerElement.cpp.
        (WebCore::TextControlInnerElement::TextControlInnerElement):
        (WebCore::TextControlInnerTextElement::TextControlInnerTextElement):
        (WebCore::TextControlInnerTextElement::defaultEventHandler):
        (WebCore::SearchFieldResultsButtonElement::SearchFieldResultsButtonElement):
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        * rendering/TextControlInnerElements.h: Copied from html/HTMLTextFieldInnerElement.h.

2008-08-29  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by aroben.

        Add GraphicsContext.h include to GraphcisContextPrivate.h

        GraphicsContextPrivate uses StrokeStyle which is defined
        in GraphicsContext.h but it doesn't include that header.
        CoreGraphics build doesn't fail here due to the order
        it happens to include files.

        * platform/graphics/GraphicsContextPrivate.h:

2008-08-29  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Fix GeneratedImage to respect Image's refcounting
        Fixing potential crashers (future if not current)
        https://bugs.webkit.org/show_bug.cgi?id=20567
        
        I don't know if it's possible to make the current code
        crash, thus I've not made a test.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::removeClient):
        (WebCore::CSSImageGeneratorValue::getImage):
        * css/CSSImageGeneratorValue.h:
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::GeneratedImage):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        * rendering/style/RenderStyle.h:

2008-08-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/6093767>
        https://bugs.webkit.org/show_bug.cgi?id=20526

        Don't allow video to render until unsupported track types have been disabled.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::task):
        (QTMovieWinPrivate::drawingComplete):
        (QTMovieWinPrivate::clearGWorld):

2008-08-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20525
        <rdar://problem/6169301>
        
        Return the size of the movie data instead of 1000.
        
        Test: media/progress-event-total.html

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::dataSize):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric Seidel.

        [janitor/qt] Start replacing port specific getters with the generic native getter
        To get the native presentation of an image we currently have platform
        specific #ifdef's and a generic getter using NativeImagePtr. This patch
        extends this to the ImageBuffer and updates the Qt platform to get rid
        of the special #ifdefs.

        https://bugs.webkit.org/attachment.cgi?id=22861

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/qt/ImageQt.cpp:
        * platform/graphics/qt/StillImageQt.cpp:
        * platform/graphics/qt/StillImageQt.h:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::createDragImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        * platform/qt/CursorQt.cpp:
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [svg/qt] Stop crashing... when no RenderPath/RenderObject is given...

        * svg/graphics/qt/SVGPaintServerQt.cpp:
        (WebCore::SVGPaintServer::renderPath):
        * svg/graphics/qt/SVGPaintServerSolidQt.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [network/qt] Implement defering of loading ResourceHandle's
        This is needed otherwise we end in an ASSERT in the MainResourceLoader. The
        implementation is simply not forwarding anything to the
        ResourceHandleClient until we are allowed to. This might lead to a deadlock
        in Qt as we do not empty the QNetworkReply input buffer and wait until we
        are allowed to read. If that happens we are forced to buffer the data
        within QNetworkReplyHandler, for now this is not done.

        Manual test:
        - Open http://acid3.acidtests.org
        - Wait for the test to complete
        - Click on the Reference Rendering link
        - Be fast and see the results of acid3
        => assert

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::setLoadMode):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::sendQueuedItems):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandler::):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::ResourceHandle::setDefersLoading):

2008-08-29  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Don't crash when drawing patterns with the HTML canvas. Patterns
        remain unimplemented but at least they don't crash anymore. This is
        done by changing the PlatformPatternPtr to be a brush for the Qt
        platform.

        * platform/graphics/Pattern.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/qt/PatternQt.cpp:
        (WebCore::Pattern::createPlatformPattern):

2008-08-29  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, fontSelector() is not used by the Qt port yet
        and we just return 0 in Font::fontSelector().

        * platform/graphics/Font.h:

2008-08-28  Alp Toker  <alp@nuanti.com>

        GTK+ dist/build fix. List newly added header files.

        * GNUmakefile.am:

2008-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Various WebKitCSSTransformValue-related fixes
        https://bugs.webkit.org/show_bug.cgi?id=20562

        Test: css3/transform-value-types.html

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * css/CSSValue.h:
        * css/WebKitCSSTransformValue.cpp:
        (WebCore::WebKitCSSTransformValue::cssText):
        * css/WebKitCSSTransformValue.h:
        (WebCore::WebKitCSSTransformValue::):
        * css/WebKitCSSTransformValue.idl:

2008-08-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Steve Falkenburg.

        - do not let the "last chance" WM_TIMER trigger WebCore timers when they should be deferred

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):

2008-08-28  David Hyatt  <hyatt@apple.com>

        RenderStyle cleanup.

        Break out StyleImage, StyleGeneratedImage, StyleCachedImage and NinePieceImage into separate files.

        Reviewed by Adam

        * css/CSSImageGeneratorValue.cpp:
        * css/CSSImageValue.cpp:
        * css/CSSStyleSelector.cpp:
        * rendering/RenderImageGeneratedContent.cpp:
        * rendering/style/NinePieceImage.cpp: Added.
        * rendering/style/NinePieceImage.h: Added.
        * rendering/style/RenderStyle.cpp:
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::containsImage):
        (WebCore::StyleInheritedData::operator==):
        (WebCore::RenderStyle::contentDataEquivalent):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleCachedImage.cpp: Added.
        * rendering/style/StyleCachedImage.h: Added.
        * rendering/style/StyleGeneratedImage.cpp: Added.
        * rendering/style/StyleGeneratedImage.h: Added.
        * rendering/style/StyleImage.h: Added.

2008-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Make all the 'isFoo()' methods on CSSValue const,
        and fix the subclasses.
        
        https://bugs.webkit.org/show_bug.cgi?id=20561
        
        * css/CSSTimingFunctionValue.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::isFontValue):
        (WebCore::CSSValue::isImageGeneratorValue):
        (WebCore::CSSValue::isImageValue):
        (WebCore::CSSValue::isImplicitInitialValue):
        * css/CSSValueList.h:
        * css/FontValue.h:

2008-08-28  David Hyatt  <hyatt@apple.com>

        The great RenderStyle cleanup begins!

        Move LengthBox and LengthSize out of RenderStyle and into Length.

        Reviewed by Adam

        * rendering/Length.h:
        (WebCore::):
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::value):
        (WebCore::Length::rawValue):
        (WebCore::Length::percent):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::setRawValue):
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isUndefined):
        (WebCore::Length::isZero):
        (WebCore::Length::isPositive):
        (WebCore::Length::isNegative):
        (WebCore::Length::isAuto):
        (WebCore::Length::isRelative):
        (WebCore::Length::isPercent):
        (WebCore::Length::isFixed):
        (WebCore::Length::isStatic):
        (WebCore::Length::isIntrinsicOrAuto):
        (WebCore::Length::blend):
        (WebCore::LengthBox::LengthBox):
        (WebCore::LengthBox::operator=):
        (WebCore::LengthBox::operator==):
        (WebCore::LengthBox::operator!=):
        (WebCore::LengthBox::nonZero):
        (WebCore::LengthSize::LengthSize):
        * rendering/style/RenderStyle.h:

2008-08-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin

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

        font-size should be animatable using -webkit-transition.

        * page/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::ensurePropertyMap):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setFontSize):

2008-08-28  Brad Garcia  <bgarcia@google.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=20549
        Correctly determine when cursor is over a resizable border within
        a nested frameset.

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::canResizeRow):
        (WebCore::RenderFrameSet::canResizeColumn):

2008-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Add RuleTypes to CSSRule.idl for keyframes and keyframe rules.
        https://bugs.webkit.org/show_bug.cgi?id=20552

        Test: animations/animation-css-rule-types.html

        * css/CSSRule.idl:

2008-08-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin and Darin.

        <rdar://problem/6182541>
        https://bugs.webkit.org/show_bug.cgi?id=20202
        Missing http status line from the http headers.
        
        Add a status line to the header string.
        
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream):

2008-08-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Darin Adler.

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

        Make it possible to theme the default Url icon and enable this for
        the Qt port. To have a minimal usage of #ifdef in the code the setting
        of the icon was moved to a new method which comes in two flavors.

        * loader/icon/IconDatabase.cpp:
        (WebCore::loadDefaultIconRecord): Load or set the default icon
        (WebCore::IconDatabase::defaultIcon):

2008-08-28  Holger Hans Peter Freyther <zecke@selfish.org>

        Unreviewed compile fix

        * platform/graphics/qt/GraphicsContextQt.cpp: Remove redefinitions

2008-08-28  Adam Roben  <aroben@apple.com>

        Windows (and others?) build fix

        * page/Chrome.cpp: Added a missing #include.
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): Fixed typo.

2008-08-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Qt and Cairo support from krit (and blind stab @ wx compile support)
        https://bugs.webkit.org/show_bug.cgi?id=20373

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::setPlatformFillGradient):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::setPlatformFillGradient):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::setPlatformFillGradient):

2008-08-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Add stroke/fill Gradient and Pattern support to GraphicsContext and update <canvas> to use it.
        https://bugs.webkit.org/show_bug.cgi?id=20373

        Changed pattern() to canvasPattern() on CanvasStyle to match canvasGradient()
        
        Made Generator (aka Gradient) RefCounted so that GraphicsContext didn't
        have to store large Gradient objects in the GraphicsContextState
        
        Made Pattern RefCounted for the same reason.
        
        Many updates to GraphicsContext to support easier drawing with
        Patterns and Gradients.

        * WebCore.xcodeproj/project.pbxproj: Add pre-existing GraphicsContextPrivate.h
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::createGradient):
        * css/CSSGradientValue.h:
        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        * html/CanvasGradient.h:
        (WebCore::CanvasGradient::gradient):
        (WebCore::CanvasGradient::addColorStop):
        (WebCore::CanvasGradient::getColor):
        * html/CanvasPattern.cpp:
        * html/CanvasPattern.h:
        (WebCore::CanvasPattern::pattern):
        (WebCore::CanvasPattern::originClean):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/CanvasStyle.h:
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::GeneratedImage):
        * platform/graphics/Generator.h:
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::create):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRule):
        (WebCore::GraphicsContext::setFillRule):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::):
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        (WebCore::Pattern::create):
        (WebCore::Pattern::tileImage):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::calculateDrawingMode):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::fillPathWithFillRule):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        (WebCore::GraphicsContext::setPlatformFillGradient):

2008-08-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin and Alexey.

        Close a leak of PausedTimeouts if the JavaScriptDebugServer was destroyed
        with timeouts paused.
        https://bugs.webkit.org/show_bug.cgi?id=20469
        
        I attempted to clean up the memory management of PausedTimeouts, I'm not
        sure the solution I came up with is "cleaner", but it's in some ways
        "safer", since it no longer uses raw pointers and manual new/delete.
        
        This also now prevents CachedPage from needlessly creating Window
        objects when caching pages which didn't already have one. :)
        
        I also made Chrome.cpp no longer depend on the JavaScript bindings
        (aka JSDOMWindowBase.h), since there was no real reason for it to.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::pauseTimeouts):
        (WebCore::JSDOMWindowBase::resumeTimeouts):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::pauseTimeouts):
        (WebCore::ScriptController::resumeTimeouts):
        * bindings/js/ScriptController.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::~JavaScriptDebugServer):
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):

2008-08-27  Holger Hans Peter Freyther <zecke@selfish.org>

        Unreviewed compile fix

        Add the stub for the Qt port.

        * WebCore.pro:
        * page/qt/AccessibilityObjectQt.cpp: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

2008-08-27  Alp Toker  <alp@nuanti.com>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=20551
        [GTK] search popup crash

        * platform/gtk/SearchPopupMenuGtk.cpp:
        (WebCore::SearchPopupMenu::enabled):
        Fix a search popup crasher by disabling the history popup since we
        don't support this feature yet in the GTK+ port.

2008-08-27  Alp Toker  <alp@nuanti.com>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=20551
        [GTK] curl crashers

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::startScheduledJobs):
        Remove the resource handle from the pending list before starting the
        job, not afterwards. Fixes crashers in the test suite.

        Test: fast/dom/clientWidthAfterDocumentIsRemoved.html
        Test: fast/encoding/char-encoding.html

2008-08-27  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by eseidel.

        Fix canvas drawImage to support composite operations.
        Composite had no effect on canvas elements like these:
        http://philip.html5.org/tests/canvas/suite/tests/index.2d.composite.canvas.html

        [CAIRO] Canvas composite don't work on canvas-elements.
        https://bugs.webkit.org/show_bug.cgi?id=20548

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): pass the current composite operator to the drawImage call

2008-08-27  Mario Bensi  <mbensi@pleyo.com>

        Reviewed by Eric Seidel.
        
        Fix the data content of an image with a base64.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl): Remove the String and use only the data
        Vector because the data.latin1().data() convert the data content and
        the image test ( https://bugs.webkit.org/attachment.cgi?id=21726 ) is
        not drawn correctly.

2008-08-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Eric Seidel.

        Crash after OK in dialog box and reloading page in secure mode
        https://bugs.webkit.org/show_bug.cgi?id=20493
        
        The new run loop spawned by a modal dialog causes a timer in the loader to run 
        synchronously inside didFinishLoading() deleting "this" object.
        
        Defer all WebCore timers when a modal dialog is up. They are not
        safe to execute.

        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2008-08-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt

        Memory leaks when animating transforms
        https://bugs.webkit.org/show_bug.cgi?id=20532

        * rendering/style/RenderStyle.cpp:
        (WebCore::ScaleTransformOperation::blend):
        (WebCore::RotateTransformOperation::blend):
        (WebCore::SkewTransformOperation::blend):
        (WebCore::TranslateTransformOperation::blend):
        (WebCore::MatrixTransformOperation::blend):
        * rendering/style/RenderStyle.h:

2008-08-27  Timothy Hatcher  <timothy@apple.com>

        Add support for support for -webkit-appearance: default-button on the Mac platform.

        <rdar://problem/6173530>

        Reviewed by Dave Hyatt.

        * WebCore.base.exp: Export new symbols.
        * platform/mac/WebCoreSystemInterface.h: Add wkAdvanceDefaultButtonPulseAnimation.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::RenderButton): Remove #if PLATFORM(WIN).
        (WebCore::RenderButton::setStyle): Ditto.
        * rendering/RenderButton.h: Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect): Add a case for DefaultButtonAppearance.
        (WebCore::RenderThemeMac::setButtonCellState): Set the key equivalent to the return
        key if the button is default, otherwise reset the key equivalent.
        (WebCore::RenderThemeMac::paintButton): If the button is default call setDefaultButtonCell:
        on the window, then wkAdvanceDefaultButtonPulseAnimation before painting. Restore
        the window's previous default button cell when finished.

2008-08-26  David Hyatt  <hyatt@apple.com>

        First cut at making form controls on OS X respect full page zoom.  There are lots of bugs.

        Reviewed by weinig

        Added fast/forms/zoomed-controls.html

        * css/CSSStyleSelector.cpp:
        (WebCore::addIntrinsicMargins):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::calcPrefWidths):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::inflateRect):
        (WebCore::RenderThemeMac::baselinePosition):
        (WebCore::RenderThemeMac::setControlSize):
        (WebCore::RenderThemeMac::sizeForFont):
        (WebCore::RenderThemeMac::sizeForSystemFont):
        (WebCore::RenderThemeMac::setFontFromControlSize):
        (WebCore::RenderThemeMac::paintCheckbox):
        (WebCore::RenderThemeMac::setCheckboxCellState):
        (WebCore::RenderThemeMac::paintRadio):
        (WebCore::RenderThemeMac::setRadioCellState):
        (WebCore::RenderThemeMac::setButtonPaddingFromControlSize):
        (WebCore::RenderThemeMac::adjustButtonStyle):
        (WebCore::RenderThemeMac::setButtonCellState):
        (WebCore::RenderThemeMac::paintButton):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::RenderThemeMac::popupInternalPaddingLeft):
        (WebCore::RenderThemeMac::popupInternalPaddingRight):
        (WebCore::RenderThemeMac::popupInternalPaddingTop):
        (WebCore::RenderThemeMac::popupInternalPaddingBottom):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2008-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/6134133> - Crash when loading large movie as a standalone document

        We hand off these loads to Quicktime which manages and spools the data itself, but we also continued
        to load and buffer the data for the movie in WebCore.  With large media files, this results in blowing
        away the virtual address space and a crash.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::pluginWillHandleLoadError):
        * loader/FrameLoaderClient.h:  Added client method to get platform specific error for
          "plugin will handle load"

        * loader/MediaDocument.cpp:
        (WebCore::MediaTokenizer::createDocumentStructure): Tell the MainResourceLoader to not buffer data,
          and cancel the WebCore-managed load
        (WebCore::MediaTokenizer::writeRawData):
        (WebCore::MediaTokenizer::finish):

2008-08-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Linear timing functions should have control points 0, 0, 1, 1.
        https://bugs.webkit.org/show_bug.cgi?id=20535

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapAnimationTimingFunction):
        * rendering/style/RenderStyle.h:

2008-08-27  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Fix file extension.

2008-08-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/6069462> REGRESSION: webkit is returning flash objects as AXUnknown

        Added platform-specific accessibilityIgnoreAttachment, which allows the platform
        to determine if an attachment is ignored through accessibility. Added equivalent
        methods in Gtk, Win and Mac

        Test: accessibility/plugin.html

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * page/gtk/AccessibilityObjectAtk.cpp: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * page/mac/AccessibilityObjectMac.mm: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * page/mac/AccessibilityObjectWrapper.h:
        * page/win/AccessibilityObjectWin.cpp: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

2008-08-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/5817770> can't bring up contextual menu for embedded objects in WebText

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        (-[AccessibilityObjectWrapper accessibilityShowContextMenu]):

2008-08-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6176924> CrashTracer: [USER] 4 crashes in Safari at com.apple.WebCore: WebCore::RenderTableSection::numColumns

        Tests: accessibility/table-notbody.html

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):

2008-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Fix typo.

        * dom/DOMCoreException.h:

2008-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20479
        <rdar://problem/6167660>
        Take image redirects into account when tainting the canvas.

        Test: http/tests/security/canvas-remote-read-redirect-to-remote-image.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):

2008-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Change canvas tainting logic to ask the image if it contains
        any resources outside of its own origin. Since there is no 
        way to determine if SVG images contain any resources outside its
        origin, we always assume it does.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::hasSingleSecurityOrigin):
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::hasSingleSecurityOrigin):
        * platform/graphics/Image.h:
        (WebCore::Image::hasSingleSecurityOrigin):
        * platform/graphics/cg/PDFDocumentImage.h:
        (WebCore::PDFDocumentImage::hasSingleSecurityOrigin):
        * svg/graphics/SVGImage.h:

2008-08-26  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.

        <rdar://6159244> Pan-scrolling does not work on particular sites (starmagazine.com, nytimes.com)
        This patch fixes the issues and modify the behavior of the panscroll by allowing it to jump to a parent layer when it reaches the end of its scrollable area.
        This is matching the behavior of the mouse wheel when trying to scroll in a smaller layer of the page (div, textarea, ...) and when we reach the edge and keep scrolling then the whole page scrolls.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateAutoscrollRenderer): if we switch to the parent layer to do the scroll we want to change the renderer for the panning
        * page/EventHandler.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::panScrollFromPoint): now calls the scrollByRecursively method when it has computed the xDelta and yDelta
        (WebCore::RenderLayer::scrollByRecursively): try to scroll the current layer by the xDelta and yDelta provided, if it can't it ask its parent layer to do so.
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled): a RenderObject must have a RenderLayer to be programatically scrolled
        (WebCore::RenderObject::autoscroll): No need to check for the layer anymore since we verify it's present in the upmentionned method
        (WebCore::RenderObject::panScroll): No need to check for the layer anymore too.

2008-08-25  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 20247: setAttributeNode() does not work when attribute name has a capital letter in it
        https://bugs.webkit.org/show_bug.cgi?id=20247

        <rdar://problem/6118218>

        Add a boolean parameter to getAttributeItem to choose between case sensitive and case insensitive
        check. This keeps the behaviour for setAttribute / hasAttribute (case sensitive) and getAttribute
        (case insensitive for HTML elements).

        Test: fast/dom/Element/getAttribute-check-case-sensitivity.html

        * dom/Element.cpp:
        (WebCore::Element::getAttribute):
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::getNamedItem):
        (WebCore::NamedAttrMap::getAttributeItem):
        * dom/NamedAttrMap.h:

2008-08-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20514
        <rdar://problem/6174096>
        Treat SVG images as dirty when drawing to a canvas.

        Test: http/tests/security/canvas-remote-read-svg-image.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * platform/graphics/Image.h:
        (WebCore::Image::isSVGImage):
        * svg/graphics/SVGImage.h:
        (WebCore::SVGImage::isSVGImage):

2008-08-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20377
        Leak in XMLHttpRequest.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):

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

        Reviewed by Anders

        Speculative fix for <rdar://problem/6173217>

        Moves the "clearArchivedResources()" call to exactly where it used to be in the old version of WebArchive code.
        Also, adds a null check for m_documentLoader since DocumentLoader::stopLoading() can end up clearing it, rendering
        the first null check invalid.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopAllLoaders):


2008-08-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6157711> Heavy/Tree view selector is not grayed out if
        there is no profile, can cause crash

        * page/inspector/ProfilesPanel.js:

2008-08-25  Dean Jackson  <dino@apple.com>

        Reviewed by Dave Hyatt

        Make sure 'inherit' is handled by transition property.
        https://bugs.webkit.org/show_bug.cgi?id=20513

        Test: transitions/inherit.html
        Test: transitions/inherit-other-props.html

        * css/CSSStyleSelector.cpp:
          fix macro to check existence of list before getting size

2008-08-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark.

        <rdar://problem/6149787> crash @ com.apple.JavaScriptCore: WTF::callOnMainThread + 37.
        
        Initialize threading in the call to WebCoreObjCFinalizeOnMainThread. We currently assume 
        (safely) that any class that needs finalization on the main thread will also need to be deallocated
        on the main thread, and calling initializeThreading from WebCoreObjCFinalizeOnMainThread instead of
        calling it from WebCoreObjCScheduleDeallocateOnMainThread seems safer.

        * platform/mac/WebCoreObjCExtras.c:
        (WebCoreObjCFinalizeOnMainThread):

2008-08-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        Rename CachedResource::referenced() to CachedResource::hasClients() to
        match previous ref() -> addClient() rename.

        * loader/Cache.cpp:
        (WebCore::Cache::pruneLiveResources):
        (WebCore::Cache::pruneDeadResources):
        (WebCore::Cache::remove):
        (WebCore::Cache::getStatistics):
        (WebCore::Cache::dumpLRULists):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::addClient):
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::setDecodedSize):
        (WebCore::CachedResource::setEncodedSize):
        * loader/CachedResource.h:
        (WebCore::CachedResource::hasClients):
        (WebCore::CachedResource::canDelete):

2008-08-25  Anthony Ricaud  <rik24d@gmail.com>

        Add a missing Inspector localized string for "other".

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

        Reviewed by Tim Hatcher.

        * English.lproj/localizedStrings.js:

2008-08-22  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff, Mark and Tim.

        <rdar://problem/6150623> JSProfiler: It would be nice if the profiles
        in the console said what file and line number they came from
        - Lay the foundation for getting line numbers and other data from the
        JavaScript engine.

        * ForwardingHeaders/VM: Added.
        * ForwardingHeaders/VM/Machine.h: Added.
        * page/Console.cpp: Gather the line number and file information when 
        profileEnd has been called, but don't use it until didFinishProfiling is
        called.  We won't need to wait once we remove the profiler "zombie" mode
        which this patch helps pave the foundation for.
        (WebCore::Console::Console):
        (WebCore::Console::profileEnd):
        (WebCore::Console::finishedProfiling):
        * page/Console.h:
        * page/InspectorController.cpp: Modify calls to
        addProfileMessageToConsole to satisfy the new arguments it takes.
        (WebCore::InspectorController::finishedProfiling):
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::addProfileMessageToConsole):
        (WebCore::InspectorController::finishedProfiling):
        * page/InspectorController.h:

2008-08-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [inspector] Update the WebKit.qrc Qt resources file
        Catchup with the changes in the directory.

        * page/inspector/WebKit.qrc:

2008-08-25  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Simon.

        Transformed the radian to degree, to get rotate()
        in canvas work as expected.

        [Qt] Canvas.rotate() doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=20496

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::rotate):

2008-08-24  Steve Falkenburg  <sfalken@apple.com>

        Add a "last chance" WM_TIMER to the Windows shared timer.
        
        The last chance timer fires every 5 seconds to run any lost WM_TIMER based timers.
        Failure to fire a timer is fatal to the cross-platform Timer code, since it won't re-schedule
        timers if a timer with an earlier expiration is already pending. This results in no timers
        firing from that point on.
        
        We lose WM_TIMER messages occasionally (in the neighborhood of 1 per hour) probably due to a
        buggy window message hook.
        
        This timer will start when the first WM_TIMER is scheduled, and will
        fire every 5 seconds thereafter, causing any lost timers to be fired.
        
        Found this via one of its symptoms: leaking WebFrames. The fix prevents timers from stalling
        and prevents the WebFrame leak.
        
        Reviewed by Darin Adler, Geoff Garen.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::):
        (WebCore::TimerWindowWndProc):
        (WebCore::setSharedTimerFireTime):

2008-08-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6065547> REGRESSION (r34879): "Subject" in unread emails in Yahoo mail is not shown in bold

        Test: fast/css/font-property-priority.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Changed to pass the 'important' flag
        to the font-property-parsing functions.
        (WebCore::CSSParser::parseFontStyle): Added an 'important' argument and
        changed to use it rather than the m_important member.
        (WebCore::CSSParser::parseFontVariant): Ditto.
        (WebCore::CSSParser::parseFontWeight): Ditto.
        * css/CSSParser.h:

2008-08-24  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where the Inspector's UI would not animate or
        fully function because JavaScript timeouts, intervals and
        CSS animation timers where not firing while paused at a
        a breakpoint in the inspected page.

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

        Reviewed by Darin Adler.

        Test: manual-tests/inspector/forzen-ui-while-paused.html

        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::pauseIfNeeded):
        Add a call to TimerBase::fireTimersInNestedEventLoop before
        spinning the EventLoop.

2008-08-24  Rob Buis  <buis@kde.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=20324
        A change in SVG Glyph wont show up

        Invalidate the glyph cache when the d attribute is set.

        Test: svg/custom/glyph-setting-d-attribute.svg

        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::invalidateGlyphCache):
        (WebCore::SVGGlyphElement::parseMappedAttribute):
        (WebCore::SVGGlyphElement::insertedIntoDocument):
        (WebCore::SVGGlyphElement::removedFromDocument):
        * svg/SVGGlyphElement.h:

2008-08-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=13864
          <rdar://problem/5451470> REGRESSION: Uninitialized value in RenderBlock::calcInlinePrefWidths()

        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPrefWidths): Moved the assignment to
        beginWS and endWS before the early return to ensure that they are
        initialized in that case.

2008-08-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Mark Rowe.

        Remove modelines.

        * WebCore.pro:
        * bridge/testbindings.cpp:
        * dom/DocPtr.h:
        * loader/SubstituteData.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.h:
        * page/FrameLoadRequest.h:
        * page/FrameTree.cpp:
        * page/FrameTree.h:
        * page/Page.h:
        * page/mac/ChromeMac.mm:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceErrorBase.cpp:
        * platform/network/ResourceErrorBase.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/ResourceResponseCFNet.h:
        * platform/network/curl/ResourceError.h:
        * platform/network/curl/ResourceRequest.h:
        * platform/network/curl/ResourceResponse.h:
        * platform/network/mac/ResourceError.h:
        * platform/network/mac/ResourceErrorMac.mm:
        * platform/network/mac/ResourceRequest.h:
        * platform/network/mac/ResourceRequestMac.mm:
        * platform/network/mac/ResourceResponse.h:
        * platform/network/mac/ResourceResponseMac.mm:
        * platform/network/qt/ResourceError.h:
        * platform/network/qt/ResourceRequest.h:
        * platform/network/qt/ResourceResponse.h:
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/soup/ResourceError.h:
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceResponse.h:

2008-08-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6065143> Reflowed image in first line of table doesn't affect baseline

        Test: fast/table/vertical-align-baseline.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::getBaselineOfFirstLineBox): Added. Returns the
        baseline of the first table row, if there is one, -1 otherwise.
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::baselinePosition): Changed to follow the
        CSS2.1 definition of the baseline of a table cell.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::getBaselineOfFirstLineBox): Added. Returns
        the baseline of the first row in the section.
        * rendering/RenderTableSection.h:

2008-08-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to make a Windows WebView transparent.

        Reviewed by Dan Bernstein.

        * platform/graphics/GraphicsContext.h: Add a parameter, hasAlpha, that
        determines whether the created context has an alpha channel.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::CGContextWithHDC):

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

        Rolls out r35834 because it caused a regression in the Inspector's
        Console where some expressions always threw a syntax error.

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

        * page/inspector/Console.js:
        (Console.prototype._evalInInspectedWindow): Removes parenthesis
        around the expression.

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

        Makes getStyleProperty return a value for the overflow property
        when overflow-x and overflow-y are equal.

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

        Reviewed by Dan Bernstein.

        Test: fast/css/overflow-property.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):

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

        Fixes a bug where while editing in the Inspector the
        sidebar scroll position would jump to the top.

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

        Reviewed by Darin Adler.

        * page/inspector/treeoutline.js:
        (TreeOutline._removeChildren): Remove the offsetTop call that
        was forcing a layout, since layout causes scroll positions
        to be clamped to the new scrollHeight/Width. Layout will happen
        normally when needed.

2008-08-22  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add AccessibilityTable sources.

        * WebCoreSources.bkl:

2008-08-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt and Alexey Proskuryakov.

        - fix <rdar://problem/6162701> WebKit should correct Geeza Pro's font metrics

        Test: platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment.html

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit): Add 8% to Geeza Pro's reported
        ascent and 100% to its reported descent.

2008-08-21  Kalle Vahlman  <kalle.vahlman@movial.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20267
        [GTK] Crash on some pages due to a plugin

        Fix handling of badly formatted and empty plugin mime descriptions

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):

2008-08-21  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Darin Adler.

        Follow other ports (and IE) in ImageSourceWx.cpp never to return an
        animated GIF frame duration of less than 50ms.

        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):

2008-08-21  Maxime Britto  <britto@apple.com>

        Reviewed by Kevin McCullough.

        Test: fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html
        https://bugs.webkit.org/show_bug.cgi?id=20451
   
        rdar://problem/6166435 Inspector doesn't auto scroll when selecting text (20451)
        When we climb up the rendering tree looking for a scrollable renderer, we need to be able to jump outside of an iframe.
        This way we can see if what is embedding the iframe can be scrolled even if the iframe content can't.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent): when we reach the document node and it can't be scrolled we set the next parent as the document's owner element if it exists.

        (WebCore::EventHandler::handleMousePressEvent): ditto

2008-08-21  Anthony Ricaud  <rik24d@gmail.com>

        Small optimization for when the dividers in the Inspector's
        Resources panel are updated.

        Reviewed by Tim Hatcher.

        * page/inspector/ResourcesPanel.js:
        (WebInsector.ResourcesPanel.prototype._updateGraphDividersIfNeeded):
        Combind a for loop and clone the divider element.

2008-08-21  Chris Marrin  <cmarrin@apple.com>

        Allow 0 (without units) for Time eg. duration
        Fix for https://bugs.webkit.org/show_bug.cgi?id=20467

        Reviewed by Dave Hyatt.

        Test: css1/units/zero-duration-without-units.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):

2008-08-21  Timothy Hatcher  <timothy@apple.com>

        Make deleting all text while editing a DOM attribute in
        the Inspector delete the attribute. This also fixes
        an exception that would happen before.

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

        Reviewed by Kevin McCullough.

        * page/inspector/ElementsPanel.js:
        (WebInspector.DOMNodeTreeElement.prototype._attributeEditingCommitted):
        Don't check for hasAttributes on the parseElement, continuing
        through the function will correctly remove the attribute.
        If the parseElement is null, call _editingCancelled not
        editingCancelled, this fixes an exception.

2008-08-21  Timothy Hatcher  <timothy@apple.com>

        Update the Inspector's Metrics pane when editing in
        the Styles pane. This makes sure the metrics shown
        always match what the Styles pane shows.

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

        Reviewed by Kevin McCullough.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel): Add event listeners for
        the "style edited" and "style property toggled" events,
        so the Metrics pane is updated.
        (WebInspector.ElementsPanel.prototype._stylesPaneEdited):
        Update the Metrics pane.
        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.toggleEnabled):
        Dispatch the "style property toggled" event.
        (WebInspector.StylePropertyTreeElement.prototype.editingCancelled):
        Dispatch the "style edited" event when the CSS text is restored.
        (WebInspector.StylePropertyTreeElement.prototype.applyStyleText):
        Dispatch the "style edited" event.

2008-08-21  Timothy Hatcher  <timothy@apple.com>

        Make the Inspector's Metrics sidebar pane editable.

        https://bugs.webkit.org/show_bug.cgi?id=17218
        rdar://problem/5732818

        Reviewed by Kevin McCullough.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel): Add an event listener for
        the "metrics edited" event, so the Styles pane is updated.
        * page/inspector/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update): Remember the node
        so future updates work. Add a double click event listener for the
        metric values to start editing.
        (WebInspector.MetricsSidebarPane.prototype.startEditing):
        Call WebInspector.startEditing with some context.
        (WebInspector.MetricsSidebarPane.prototype.editingCancelled):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        Set the user input on the elements inline style. Fire the
        "metrics edited" event.

2008-08-21  Steve Falkenburg  <sfalken@apple.com>

        Fix a race condition in Windows timer code.
        Timer function could end up being called with a 0 timer, leading to a Windows exception.
        
        Don't post a timer message if one is already pending.
        
        Reviewed by Ada Chan.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):
        (WebCore::clearTimer):
        (WebCore::queueTimerProc):
        (WebCore::setSharedTimerFireTime):

2008-08-21  Anthony Ricaud  <rik24d@gmail.com>

        After trying to add the expression, try again with quotes for
        easier edition.

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

        Reviewed by Tim Hatcher.

        * page/inspector/ObjectPropertiesSection.js: Added an
        evaluateExpression function.

2008-08-21  Anthony Ricaud  <rik24d@gmail.com>

        Perform Inspector searches on search event to clear results when
        clicking the cross to empty it. Delete the lastQuery when the field
        is emptied in order to perform the search if exactly the same query
        is entered next.

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

        Reviewed by Tim Hatcher.

        * page/inspector/inspector.js:

2008-08-21  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=19656
        [SOUP] The gio code should call didFail() instead of
        didFinishLoading() in case of error

        In case of error call didFail() instead of didReceiveResponse() and
        didFinishLoading().

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::networkErrorForFile):
        (WebCore::readCallback):
        (WebCore::openCallback):
        (WebCore::queryInfoCallback):

2008-08-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Honeycutt.

        Fix build failure.

        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::getPropertyNames): Declare count as uint32_t rather than unsigned
        as that is what NPEnumerationFunctionPtr is declared as accepting.

2008-08-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Build fix.  Handle kCGInterpolationMedium in switch statements if it is available.

        * platform/graphics/GraphicsContext.h:
        (WebCore::):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):

2008-08-20  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by John Sullivan.

        - rename shouldUpdateWhileHidden to shouldUpdateWhileOffscreen and
          rename related methods and variables accordingly.

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameView::shouldUpdateWhileOffscreen):
        (WebCore::FrameView::setShouldUpdateWhileOffscreen):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::updateContents):

2008-08-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitzpettel

        <rdar://problem/6163636> - Many images broken in Mail

        This can be traced back to the preload scanner.  With that change, CachedResources are created a lot 
        sooner than before and confuse the WebArchive machinery.  

        When referencing WebArchive subresources directly through the WebKit API it is appropriate to ignore 
        such CachedResources since they are placeholders and have not been submitted to the ResourceLoadDelegate 
        machinery and nothing is known about where the data will eventually come from.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource):  Ignore a CachedResource if its preloadResult is 
          CachedResource::PreloadReferenced.

2008-08-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed compile fix

        Catch up with the JSValue::type elimination.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::construct):
        (KJS::Bindings::QtInstance::defaultValue):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::QtRuntimeConnectionMethod::call):

2008-08-20  Chris Teague  <chris.teague@gmail.com>

        Reviewed by Mark Rowe.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20449
        Bug 20449: Build fails if LOW_BANDWIDTH_DISPLAY is defined

        * ChangeLog:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):

2008-08-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        getComputedStyle() for webkitTransform should return a transform
        that does not have the transform origin baked into it.
        https://bugs.webkit.org/show_bug.cgi?id=20464
        
        Test: fast/css/getComputedStyle-transform.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::applyTransform):
        * rendering/style/RenderStyle.h:

2008-08-20  Josh Aas  <joshmoz@gmail.com>

        Reviewed and landed by Anders.

        <rdar://problem/6163636> 
        rename NPCocoaEvent's "event" struct to "data" (20446)
        
        * bridge/npapi.h:
        (_NPCocoaEvent::):

2008-08-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6145626> 
        This patch fixes a number of remaining problems getting 
        disconnected frames to work correctly with markAllMatchesForText() 
        and findString(). Details inline. 

        This was a static helper function in Frame, but this patch requires 
        the same functionality in Editor, so I just added it as a function 
        on Node.
        * dom/Node.cpp:
        (WebCore::Node::isInShadowTree):
        * dom/Node.h:

        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea): Returns false if 
        excludeFromTextSearch() is true.

        In a normal (non-disconnected) frame, findString returns a range of 
        the document node if the text is not found in the frame. I changed 
        firstVisibleRange and lastVisibleRange to match that behavior when 
        the text is not found
        (WebCore::Editor::firstVisibleRange):
        (WebCore::Editor::lastVisibleRange):

        Here are the bulk of the changes in the patch. A lot of text was 
        not being found in disconnected frames because I failed to account 
        for all of the possible problems associated with shadow trees. That 
        is fixed here.
        (WebCore::Editor::nextVisibleRange):
        * editing/Editor.h:

        excludeFromTextSearch() is new. It allows a WebKit client to mark a 
        frame as not-text-searchable through SPI. 
        * WebCore.base.exp:
        * page/Frame.cpp:
        (WebCore::Frame::excludeFromTextSearch):
        (WebCore::Frame::setExcludeFromTextSearch):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:

        (WebCore::Frame::findString):
        (WebCore::Frame::markAllMatchesForText):  I kept running into an 
        assertion failure in paining code because of the forced paint on 
        empty visible rects.

2008-08-20  Timothy Hatcher  <timothy@apple.com>

        Adds a positon box to the Inspector's Metrics sidebar
        pane. When an element is not statically positioned, there
        is now a position box that show top, right, bottom and
        left computed values.

        Reviewed by Kevin McCullough.

        * English.lproj/localizedStrings.js: Updated the strings.
        * page/inspector/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update):
        Renamed the boxPartValue function to createBoxPartElement
        and made it create the entire element. Made it understand
        how to get position style properties. Don't use the figure dash
        when 0px is used for positions, since the 0 is meaningful there.
        Instead use the figure dash when a position is auto.
        * page/inspector/inspector.css: Added a new rule for position.

2008-08-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Qt build fix

        * WebCore.pro:

2008-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - avoid using a deprecated NSScroller method on Leopard

        * platform/mac/PlatformScrollBarMac.mm:
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):

2008-08-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Oliver Hunt.

        Gtk build fix

        * GNUmakefile.am:
        * page/AccessibilityTable.cpp: Change nil to 0
        (WebCore::AccessibilityTable::cellForColumnAndRow):

2008-08-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Bring back shared JSGlobalData and implicit locking, because too many clients rely on it.

        * ForwardingHeaders/kjs/JSLock.h: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::DOMWindowTimer::~DOMWindowTimer):
        (WebCore::JSDOMWindowBase::clear):
        (WebCore::JSDOMWindowBase::timerFired):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        * bindings/js/JSNSResolver.cpp:
        (WebCore::JSNSResolver::lookupNamespaceURI):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::createHTMLEventHandler):
        (WebCore::ScriptController::createSVGEventHandler):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        (WebCore::ScriptController::clearScriptObjects):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/objc/WebScriptObject.mm:
        (_didExecute):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_Enumerate):
        * bridge/c/c_class.cpp:
        (KJS::Bindings::CClass::~CClass):
        (KJS::Bindings::CClass::methodsNamed):
        (KJS::Bindings::CClass::fieldNamed):
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        (KJS::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_runtime.cpp:
        (KJS::Bindings::CField::valueFromInstance):
        (KJS::Bindings::CField::setValueToInstance):
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant):
        (KJS::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        (JavaJSObject::toString):
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (appendClassName):
        (JavaMethod::signature):
        * bridge/jni/jni_runtime.h:
        (KJS::Bindings::JavaString::JavaString):
        (KJS::Bindings::JavaString::_commonInit):
        (KJS::Bindings::JavaString::~JavaString):
        (KJS::Bindings::JavaString::UTF8String):
        * bridge/jni/jni_utility.cpp:
        (KJS::Bindings::convertValueToJValue):
        * bridge/npruntime.cpp:
        (_NPN_GetStringIdentifier):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bridge/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        * bridge/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
        (KJS::Bindings::QtInstance::~QtInstance):
        (KJS::Bindings::QtInstance::getQtInstance):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMetaMethod::call):
        (KJS::Bindings::QtRuntimeConnectionMethod::call):
        (KJS::Bindings::QtConnectionObject::QtConnectionObject):
        (KJS::Bindings::QtConnectionObject::execute):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * bridge/testbindings.cpp:
        (main):
        * bridge/testbindings.mm:
        (main):
        * bridge/testqtbindings.cpp:
        (main):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Node.cpp:
        (WebCore::Node::setDocument):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * loader/FrameLoader.cpp:
        (WebCore::getString):
        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::XMLHttpRequestResource::XMLHttpRequestResource):
        (WebCore::XMLHttpRequestResource::~XMLHttpRequestResource):
        (WebCore::getResourceDocumentNode):
        (WebCore::search):
        (WebCore::inspectedWindow):
        (WebCore::wrapCallback):
        (WebCore::currentCallFrame):
        (WebCore::profiles):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::addDatabaseScriptResource):
        (WebCore::InspectorController::addScriptProfile):
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * page/JavaScriptProfileNode.cpp:
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getTotalPercent):
        (WebCore::getSelfPercent):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getVisible):
        * page/Page.cpp:
        * page/mac/FrameMac.mm:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::getString):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):

2008-08-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Geoff Garen.

        Add the beginnings of Skia graphics support to WebCore
        as I try to begin the long process of un-forking the changes
        needed to WebCore to make Andriod's WebCore build.

        I'll follow this up with actual *Skia.cpp files in a separate patch.

        * platform/graphics/AffineTransform.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/SVGPaintServerSolid.h:

2008-08-19  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build more.

        * WebCore.vcproj/WebCore.vcproj:

2008-08-19  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build.

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):

2008-08-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/4003764> Expose tables as AXTables
 
        Tests: accessibility/table-attributes.html
               accessibility/table-cell-spans.html
               accessibility/table-cells.html
               accessibility/table-detection.html
               accessibility/table-sections.html
               accessibility/table-with-rules.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::get):
        * page/AccessibilityObject.h:
        (WebCore::):
        (WebCore::AccessibilityObject::isDataTable):
        (WebCore::AccessibilityObject::isTableRow):
        (WebCore::AccessibilityObject::isTableColumn):
        (WebCore::AccessibilityObject::isTableCell):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        * page/AccessibilityTable.cpp: Added.
        (WebCore::AccessibilityTable::AccessibilityTable):
        (WebCore::AccessibilityTable::~AccessibilityTable):
        (WebCore::AccessibilityTable::create):
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::clearChildren):
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::headerContainer):
        (WebCore::AccessibilityTable::columns):
        (WebCore::AccessibilityTable::rows):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::cells):
        (WebCore::AccessibilityTable::columnCount):
        (WebCore::AccessibilityTable::rowCount):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        (WebCore::AccessibilityTable::roleValue):
        (WebCore::AccessibilityTable::accessibilityIsIgnored):
        (WebCore::AccessibilityTable::title):
        (WebCore::AccessibilityTable::isDataTable):
        * page/AccessibilityTable.h: Added.
        * page/AccessibilityTableCell.cpp: Added.
        (WebCore::AccessibilityTableCell::AccessibilityTableCell):
        (WebCore::AccessibilityTableCell::~AccessibilityTableCell):
        (WebCore::AccessibilityTableCell::create):
        (WebCore::AccessibilityTableCell::accessibilityIsIgnored):
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        * page/AccessibilityTableCell.h: Added.
        (WebCore::AccessibilityTableCell::isTableCell):
        (WebCore::AccessibilityTableCell::roleValue):
        * page/AccessibilityTableColumn.cpp: Added.
        (WebCore::AccessibilityTableColumn::AccessibilityTableColumn):
        (WebCore::AccessibilityTableColumn::~AccessibilityTableColumn):
        (WebCore::AccessibilityTableColumn::create):
        (WebCore::AccessibilityTableColumn::setParentTable):
        (WebCore::AccessibilityTableColumn::elementRect):
        (WebCore::AccessibilityTableColumn::size):
        (WebCore::AccessibilityTableColumn::children):
        (WebCore::AccessibilityTableColumn::headerObject):
        (WebCore::AccessibilityTableColumn::headerObjectForSection):
        (WebCore::AccessibilityTableColumn::addChildren):
        * page/AccessibilityTableColumn.h: Added.
        (WebCore::AccessibilityTableColumn::parentObject):
        (WebCore::AccessibilityTableColumn::roleValue):
        (WebCore::AccessibilityTableColumn::accessibilityIsIgnored):
        (WebCore::AccessibilityTableColumn::isTableColumn):
        (WebCore::AccessibilityTableColumn::setColumnIndex):
        (WebCore::AccessibilityTableColumn::columnIndex):
        * page/AccessibilityTableHeaderContainer.cpp: Added.
        (WebCore::AccessibilityTableHeaderContainer::AccessibilityTableHeaderContainer):
        (WebCore::AccessibilityTableHeaderContainer::~AccessibilityTableHeaderContainer):
        (WebCore::AccessibilityTableHeaderContainer::create):
        (WebCore::AccessibilityTableHeaderContainer::children):
        (WebCore::AccessibilityTableHeaderContainer::elementRect):
        (WebCore::AccessibilityTableHeaderContainer::size):
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * page/AccessibilityTableHeaderContainer.h: Added.
        (WebCore::AccessibilityTableHeaderContainer::roleValue):
        (WebCore::AccessibilityTableHeaderContainer::setParentTable):
        (WebCore::AccessibilityTableHeaderContainer::parentObject):
        (WebCore::AccessibilityTableHeaderContainer::accessibilityIsIgnored):
        * page/AccessibilityTableRow.cpp: Added.
        (WebCore::AccessibilityTableRow::AccessibilityTableRow):
        (WebCore::AccessibilityTableRow::~AccessibilityTableRow):
        (WebCore::AccessibilityTableRow::create):
        (WebCore::AccessibilityTableRow::accessibilityIsIgnored):
        (WebCore::AccessibilityTableRow::headerObject):
        * page/AccessibilityTableRow.h: Added.
        (WebCore::AccessibilityTableRow::isTableRow):
        (WebCore::AccessibilityTableRow::roleValue):
        (WebCore::AccessibilityTableRow::setRowIndex):
        (WebCore::AccessibilityTableRow::rowIndex):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (RoleEntry::):
        (-[AccessibilityObjectWrapper roleDescription]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2008-08-19  Steve Falkenburg  <sfalken@apple.com>

        Build fix.
        Add buildfailed support to stop builds early (preventing inaccurate error messages).
        Add missing post-build rule to Release.

        * WebCore.vcproj/QTMovieWin.vcproj:

2008-08-19  Keishi Hattori  <casey.hattori@gmail.com>

        Added support for console.count in the inspector.

        Reviewed by Geoff Garen.

        * page/Console.cpp:
        (WebCore::Console::count):
        * page/Console.h:
        * page/Console.idl: Added console.count.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad): Clears m_counts.
        (WebCore::InspectorController::count): Updates the count number
        sing "title@source:line" as the identifier, and adds a
        message to the console.
        * page/InspectorController.h: Added m_counts.

2008-08-19  Keishi Hattori  <casey.hattori@gmail.com>

        Clear console.time timers when changing page.

        Reviewed by Geoff Garen.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):

2008-08-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/6154695> Full-page movies flicker while playing
        https://bugs.webkit.org/show_bug.cgi?id=20404

        Ignore setVisible() when visibility doesn't change.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::setVisible):

2008-08-19  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug in the Profile view where switching sort order, then
        switching from heavy to tree mode would show the tree in the
        previous sort order.

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

        Reviewed by Kevin McCullough.

        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView.prototype._changeView): Call _sortProfile
        on the next profile before assigning it to this.profile.
        (WebInspector.ProfileView.prototype._sortData): Call _sortProfile.
        (WebInspector.ProfileView.prototype._sortProfile): Moves from
        _sortData and takes a profile argument. If the profile passed in
        matches the this.profile, then call refresh.

2008-08-18  Timothy Hatcher  <timothy@apple.com>

        Changed the default sort order now that heavy view is the default.
        Also fixes a bug where the heavy profile was not sorted at first.

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

        Reviewed by Kevin McCullough.

        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView): Changed the default sort column. Also assign
        heavyProfile to profile, so the sortSelfTimeDescending call happens
        on the heavy profile before assigning to this.profile.

2008-08-18  Timothy Hatcher  <timothy@apple.com>

        Add support for editing DOM properties and scope variables by double
        clicking a property to enter edit mode.

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

        Reviewed by Kevin McCullough.

        * page/inspector/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection): Set editable to true by default.
        (WebInspector.ObjectPropertiesSection.prototype.onpopulate):
        Factored out code into update, and calls update.
        (WebInspector.ObjectPropertiesSection.prototype.update): Moved from onpopulate.
        Call removeChildren since this method can be called multiple times now.
        (WebInspector.ObjectPropertyTreeElement): Pass an empty title, the title
        gets made later in onattach.
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate): Don't return early
        if shouldRefreshChildren is true. Call removeChildren since this method can be
        called multiple times now.
        (WebInspector.ObjectPropertyTreeElement.prototype.ondblclick): Call startEditing.
        (WebInspector.ObjectPropertyTreeElement.prototype.onattach): Call update.
        (WebInspector.ObjectPropertyTreeElement.prototype.update): Update the title for
        this element (code moved from the constructor.)
        (WebInspector.ObjectPropertyTreeElement.prototype.updateSiblings): Recreate all
        sibling property elements.
        (WebInspector.ObjectPropertyTreeElement.prototype.startEditing): Call
        WebInspector.startEditing after rememebring some context.
        (WebInspector.ObjectPropertyTreeElement.prototype.editingEnded): Reset the scrollLeft
        for the list element, since it might have scrolled during editing.
        (WebInspector.ObjectPropertyTreeElement.prototype.editingCancelled): Call editingEnded
        then restore the state from the context. Then call update to restore the title.
        (WebInspector.ObjectPropertyTreeElement.prototype.editingCommitted): Call editingCancelled
        if the user input and the previous input are the same. Call editingEnded, then call applyExpression
        to commit the user input.
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression): Evaluates the input expression
        and stores the result on the object for the property name of this element. If the expression is
        empty, delete the property and remove the tree element.
        * page/inspector/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update): Set the editInSelectedCallFrameWhenPaused
        property on each ObjectPropertiesSection.
        (WebInspector.ScopeVariableTreeElement.prototype.onattach): Call ObjectPropertyTreeElement's onattach
        since it is now implemented.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame): Added an updateInterface argument
        that defaults to true if omitted. It specifies whether to call update on the scope chain.
        * page/inspector/inspector.css: New styles.
        * page/inspector/treeoutline.js:
        (TreeElement.prototype._attach): Fixed an exception that fired when handling the shouldRefreshChildren
        change. The nextSibling would exist but have a _listItemNode that didn't match the new parent.

2008-08-18  Timothy Hatcher  <timothy@apple.com>

        Surround the expression to be evaluated in parenthesis so the
        result of the eval is the result of the whole expression not
        the last potential sub-expression. So evaluating {x: 123}
        will show the Object not 123.

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

        Reviewed by Kevin McCullough.

        * page/inspector/Console.js:
        (Console.prototype._evalInInspectedWindow): Add parenthesis
        around the expression. And add couple comments.

2008-08-19 Kevin McCullough <kmccullough@apple.com>

        Reviewed by Geoff.

        -Implement a page() function to extract a common code pattern.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        (WebCore::Console::error):
        (WebCore::Console::info):
        (WebCore::Console::log):
        (WebCore::Console::dir):
        (WebCore::Console::assertCondition):
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupEnd):
        (WebCore::Console::finishedProfiling):
        (WebCore::Console::warn):
        (WebCore::Console::framePage):
        * page/Console.h:

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

        Reviewed by Geoff.

        - eliminate JSValue::type()

        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::defaultValue): Take PreferredPrimitiveType
        argument instead of JSType argument. Removed unneeded code to handle
        boolean, since that's never passed.
        * bridge/c/c_instance.h: Ditto.

        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant): Use JSValue::is functions
        instead of JSValue::type(). Removed unneeded code to handle
        "unspecified".

        * bridge/jni/jni_instance.cpp:
        (JavaInstance::defaultValue): Take PreferredPrimitiveType argument
        instead of JSType argument. Removed unneeded code to handle boolean.
        * bridge/jni/jni_instance.h: Ditto.

        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertValueToJObject): Use JSValue::is functions
        instead of JSValue::type().

        * bridge/objc/objc_instance.h: Take PreferredPrimitiveType argument
        instead of JSType argument. Removed unused argument.
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::getValueOfUndefinedField): Removed unused argument.
        (ObjcInstance::defaultValue): Take PreferredPrimitiveType argument
        instead of JSType argument. Removed unneeded code to handle boolean
        and another dead code path for unknown types.

        * bridge/objc/objc_runtime.h: Take PreferredPrimitiveType argument
        instead of JSType argument. Removed override of type() that caused
        the fallback object to return "UndefinedType" when there is no
        invokeUndefinedMethodFromWebScript:withArguments: method defined.
        That didn't accomplish much, since most checks for undefined don't
        ever call type().
        * bridge/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::defaultValue): Ditto.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::defaultValue): Take PreferredPrimitiveType
        argument instead of JSType argument. Removed unneeded code to handle
        boolean.
        * bridge/qt/qt_instance.h: Ditto.

        * bridge/runtime.h:
        (KJS::Bindings::Instance::getValueOfUndefinedField): Removed
        unsed argument.
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::defaultValue): Take PreferredPrimitiveType
        argument instead of JSType argument.
        * bridge/runtime_object.h: Ditto.

2008-08-18  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.

        <rdar://6157207> Mouse pointer does not change when new window is opened after pan-scrolling original window
        Related to the discussion from rdar://6102511 , we should disable every key event (except for the esc key which stops the panning).
        We shouldn't be able to create another window while we are in pan scrolling.
        Other browsers behaviors :
          FF3 : Most of the keys are disabled, there is no way to create another window while in panscroll mode
          IE7 : Keys are not disabled but stops immediately the panning.
        This patch matches FF3 behavior by disabling every key but the esc key.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::stopAutoscrollTimer): Change the cursor back to the regular arrow cursor when the pannning is stopped.
        (WebCore::EventHandler::keyEvent): When a key event is received while in panning or autoscroll we swallow the event early.

2008-08-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5862634> REGRESSION (3.1.1): In iChat, inline image not resizable past current size after another IM is received

        Test: fast/replaced/max-width-percent.html

        Added an includeMaxWidth boolean to RenderBox::calcReplaedWidth().
        When false, max-width is not factored into the
        calculation.
        Changed RenderReplaced and subclasses' calcPrefWidths() to call
        calcReplacedWidth(false) and then apply max-width only if it has a
        fixed, positive value.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedWidth):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcPrefWidths): 
        * rendering/RenderImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::calcPrefWidths):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcPrefWidths):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calcReplacedWidth):
        (WebCore::RenderVideo::calcPrefWidths):
        * rendering/RenderVideo.h:

2008-08-18  Daniel Macks  <dmacks@netspace.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=20410
        More portable/self-documenting replacement for SIZE_MAX.

        * platform/network/curl/FormDataStreamCurl.cpp:
        (WebCore::FormDataStream::read):

2008-08-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Need to make sure we have an Animation in the AnimationList
        before setting the initial value.
        https://bugs.webkit.org/show_bug.cgi?id=20408

        Test: fast/css/transition_shorthand_parsing.html

        * css/CSSStyleSelector.cpp:

2008-08-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6150593> JSProfiler: Empty profiles disappear when there
        is another profile.

        * page/inspector/ProfilesPanel.js:

2008-08-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        <rdar://problem/6150642> REGRESSION: Closing the Web Inspector clears
        all console messages

        * page/inspector/Console.js:

2008-08-18  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Fixed Canvas for Cairo. Stroke and fill colors didn't work after
        the canvas clean up.

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

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::fillRect):

2008-08-17  Timothy Hatcher  <timothy@apple.com>

        Complete in scope variables in the Console when paused.

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

        Reviewed by Geoffrey Garen.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype.completions): If the expressionString
        is null or empty and the debugger is paused, call variablesInScopeForSelectedCallFrame
        to get an object that declares all the in scope variables. That way
        "top level" expressions are completed.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.variablesInScopeForSelectedCallFrame):
        Return an object that has all the variables that are in scope for the
        selected call frame. The value of each property is just true.
        The return object is useful for quick lookups or auto completion.

2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Not reviewed.

        Speculative Qt build fix.

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod):

2008-08-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.
        
        Updated project files to XCode 3.1.

        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj/project.pbxproj:

2008-08-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Made room for a free word in JSCell.
        
        Changed JSDOMWindowBase to store its auxiliary data in a subclass of
        JSGlobalData, so the two could share a pointer.
        
        Added a bunch of ASSERTs, to help catch over-sized objects.

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

        Reviewed by Dan Bernstein.

        Disable dead code stripping in debug builds.

        * Configurations/Base.xcconfig:
        * WebCore.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

        * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared
        between the Debug configuration and debug Production variant.
        * WebCore.xcodeproj/project.pbxproj: Enable the debug variant.

2008-08-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Anders.

        Don't start preloading body resources before the head is complete. This prevents
        body preloads from slowing down initial display when there is limited amount
        of bandwidth available.
        
        Works by queuing up found body preloads to DocLoader and only issuing them
        after document has rendering.
        
        With bandwidth capped to 300kbit/s this speeds up cnn.com initial display by ~25% or 5s
        without affecting complete load time.

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::PreloadScanner):
        (WebCore::PreloadScanner::scanningBody):
        (WebCore::PreloadScanner::emitTag):
        (WebCore::PreloadScanner::emitCSSRule):
        * html/PreloadScanner.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::preload):
        (WebCore::DocLoader::checkForPendingPreloads):
        (WebCore::DocLoader::requestPreload):
        * loader/DocLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):

2008-08-15  Ada Chan  <adachan@apple.com>

        Use item's computed style if the render style is 0 before falling back to the <select>'s style.
        This way style set on an <hr> within a <select> will be honored.

        Reviewed by Dave Hyatt and Dan Bernstein.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemStyle):

2008-08-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Some loader performance tweaks:
        - Make stylesheets highest priority instead of scripts. We block script execution on stylesheets.
          Especially if a stylesheet @imports other stylesheets it is important to get them to the front of the queue 
          to not delay rendering.
        - Issue the first resource load for a host immediately even if the resource is low priority. TCP connection setup
          can take long time when latency is high so it is good to get started early.
        - When the document is fully parsed and stylesheets have been loaded there is no need to keep managing the
          load queues. Issue remaining loads to the network layer.

        * loader/loader.cpp:
        (WebCore::Loader::determinePriority):
        (WebCore::Loader::load):
        (WebCore::Loader::Host::servePendingRequests):
        * loader/loader.h:

2008-08-15  Timothy Hatcher  <timothy@apple.com>

        Detach the script debugger when the Web Inspector's window closes.
        This has always been the intended design, but never fully implemented.

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

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible): Call stopDebugging()
        if the window is no longer visible.

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes:    compile with QT_NO_CONTEXTMENU

        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleContextMenuEvent):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_WHEELEVENT

        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2008-08-15  Keishi Hattori  <casey.hattori@gmail.com>

        Fixed Bug 20210: Console groups are incorrect when closing and reopening the Inspector

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

        Reviewed by Tim Hatcher.

        * page/Console.cpp:
        (WebCore::Console::group):
        (WebCore::Console::groupEnd):
        * page/Console.h:
        (WebCore::): Removed GroupTitleMessageLevel. Added StartGroupMessaageLevel and EndGroupMessageLevel.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::startGroup): Increments group level by
        one and adds console message with StartGroupMessaageLevel.
        (WebCore::InspectorController::endGroup): Decrements group level by one
        and adds console message with EndGroupMessaageLevel.
        * page/InspectorController.h:
        * page/inspector/Console.js:
        (WebInspector.Console.prototype.addMessage): Creates new ConsoleGroup
        if the message is StartGroupMessaageLevel.
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleGroup.prototype.addMessage):
        * page/inspector/inspector.js:

2008-08-15  Keishi Hattori  <casey.hattori@gmail.com>

        Adds support for console.dir to the Inspector

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

        Reviewed by Tim Hatcher.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::dir):
        * page/Console.cpp:
        (WebCore::Console::dir):
        * page/Console.h: Added ObjectMessageLevel.
        * page/Console.idl: Added console.dir.
        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage.prototypet.toMessageElement): Creates an
        ObjectPropertiesSection if the MessageLevel is Object.
        * page/inspector/ObjectPropertiesSection.js: "in" operator can't be
        used on primitive data types.
        * page/inspector/inspector.css:

2008-08-15  Keishi Hattori  <casey.hattori@gmail.com>

        Adds support for clear() in the Inspector console.

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

        Reviewed by Tim Hatcher.

        * page/inspector/Console.js:

2008-08-15  Anthony Ricaud  <rik24d@gmail.com>

        Cmd-F on Mac or Ctrl-F on other platforms now focus the search field.

        Platform distinction and modifier key matching adjusted
        by Daniel Jalkut <jalkut@red-sweater.com>

        Bug 16313: text search (find) keybindings should work in the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=16313

        Reviewed by Tim Hatcher.

        * page/inspector/inspector.js: Added a case for the F key

2008-08-15  Keishi Hattori  <casey.hattori@gmail.com>

        Fix for error when the string doesn't contain a webkit-profile link.

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

        Reviewed by Tim Hatcher.

        * page/inspector/inspector.js:

2008-08-15  Timothy Hatcher  <timothy@apple.com>

        Fixes two bugs where JavaScript could be executed from the page
        while the debugger is paused.

        The first issue was JSLazyEventListener not checking the paused
        state before parsing the code.

        The second issue was with the PageGroup version of
        JavaScriptDebugServer::setJavaScriptPaused always passing false
        to the Page version of JavaScriptDebugServer::setJavaScriptPaused,
        and not the paused argument.

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

        Reviewed by Adam Roben.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode): Check the paused
        state of the ScriptController. Return early if paused.
        * manual-tests/inspector/debugger-execution-while-paused.html: Added.
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):
        Pass the paused argument to the Page version of setJavaScriptPaused.

2008-08-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        JSStringRef is created context-free, but can get linked to one via an identifier table,
        breaking an implicit API contract.

        * page/InspectorController.cpp:
        (WebCore::jsStringRef):
        (WebCore::InspectorController::didParseSource):
        (WebCore::InspectorController::failedToParseSource):
        * page/JavaScriptProfile.cpp:
        (WebCore::getTitleCallback):
        Updated for JavaScriptCore changes.

2008-08-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx !USE(WXGC) build fix. This is necessary until we find a way to replace GDI with
        an alternative that performs reasonably well. (GDI+ is too slow in many cases.)

        * platform/graphics/AffineTransform.h:

2008-08-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20388
        <video> elements on Windows never becomes visible when a page is restored from the cache

        Always pass "set" calls down to MediaPlayerPrivate instead of only when the
        value is different from the cached value. Let the implementation decide when
        to avoid work because nothing has changed.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVolume):
        (WebCore::MediaPlayer::setRate):
        (WebCore::MediaPlayer::setRect):
        (WebCore::MediaPlayer::setVisible):

2008-08-14  Keishi Hattori  <casey.hattori@gmail.com>

        Make Firebug command line API respect predefined variables.

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

        Reviewed by Tim Hatcher.

        * page/inspector/Console.js:

2008-08-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen and Timothy Hatcher.

        Allow programatically setting the HTMLTokenizers time delay and chunk size
        which are used for determining how aggressively we yield.

        * WebCore.base.exp:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::begin):
        (WebCore::HTMLTokenizer::continueProcessing):
        * html/HTMLTokenizer.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setCustomHTMLTokenizerTimeDelay):
        (WebCore::Page::setCustomHTMLTokenizerChunkSize):
        * page/Page.h:
        (WebCore::Page::hasCustomHTMLTokenizerTimeDelay):
        (WebCore::Page::customHTMLTokenizerTimeDelay):
        (WebCore::Page::hasCustomHTMLTokenizerChunkSize):
        (WebCore::Page::customHTMLTokenizerChunkSize):

2008-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Beth.

        Move us one step closer to cross-platform svg/graphics code

        * WebCore.xcodeproj/project.pbxproj:
        * html/CanvasStyle.cpp:
        * platform/graphics/Color.cpp:
        (WebCore::colorWithOverrideAlpha):
        * platform/graphics/Color.h:
        * svg/graphics/cg/CgSupport.cpp:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::strokeBoundingBox):
        * svg/graphics/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2008-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey.

        Remove un-need includes from HTMLCanvas and use the
        Gradient platform abstraction in one place in CanvasStyle

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fillRect):
        * html/CanvasStyle.cpp:
        * html/HTMLCanvasElement.cpp:

2008-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey.

        Clean up GlyphBuffer.h, removing more #ifdefs

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):

2008-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Clean up AffineTransform.h, removing #ifdefs

        * platform/graphics/AffineTransform.h:
        * platform/graphics/cairo/AffineTransformCairo.cpp:
        * platform/graphics/cg/AffineTransformCG.cpp:
        * platform/graphics/qt/AffineTransformQt.cpp:
        * platform/graphics/wx/AffineTransformWx.cpp:

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

        - fix non-CG builds by adding an ImageSource::frameSizeAtIndex() that returns size().

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameSizeAtIndex):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::frameSizeAtIndex):
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::frameSizeAtIndex):

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

        Reviewed by Brady Eidson.

        - fix <rdar://problem/5993323> REGRESSION (r34210): Apple.com favicon appears stretched/clipped

        * platform/graphics/BitmapImage.cpp: 
        (WebCore::BitmapImage::BitmapImage): Added initialization of
        m_hasUniformFrameSize.
        (WebCore::BitmapImage::cacheFrame): Added code to get the size of the
        cached frame for use in decoded size computation and for setting
        m_hasUniformFrameSize.
        (WebCore::BitmapImage::currentFrameSize): Added.
        (WebCore::BitmapImage::dataChanged): Added code to reset
        m_hasUniformFrameSize.
        * platform/graphics/BitmapImage.h: Added currentFrameSize() and
        m_hasUniformFrameSize.
        * platform/graphics/ImageSource.h: Added frameSizeAtIndex().
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw): Changed to use currentFrameSize(). This
        fixes the bug, which resulted from assuming that the frame being drawn 
        was the same size as the first frame.
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Renamed size() to this and
        changed to get the size of the frame at the given index.
        (WebCore::ImageSource::size): Added. Returns frameSizeAtIndex(0).

2008-08-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Fix @font-face inside @media rule crash.
        https://bugs.webkit.org/show_bug.cgi?id=20367

        Test: fast/css/font-face-in-media-rule.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::addRulesFromSheet):

2008-08-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after recent changes to Canvas and Image classes.

        * platform/graphics/Pattern.h:
        * platform/graphics/wx/GradientWx.cpp:
        (WebCore::Gradient::fill):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::applyStrokePattern):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::image):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::loadPlatformResource):

2008-08-14  Maxime Britto  <britto@apple.com>

        Reviewed by Sam Weinig.

        rdar://6102511
        When pan-scrolling, typing on the keyboard should either stop the pan scroll or be ignored
        IE and FF are both preventing the keyboard event to interact with the page while scrolling.
        Some differences exist between them concerning the kind of key which is pressed :
        IE7 : every key leads to a stop of the panning
        FF3 : the ESC and TAB keys leads to a stop, the other keys are inactive.
        For WebKit this patch is adopting the FF3 behavior except for the TAB key which is inactive too.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent): Verifies which key has been hit and decide either to stop the pan scroll or to swallow the key event.

2008-08-14  Christian Dywan  <christian@twotoasts.de>

        Gtk+/ Cairo build fix, patch by Dirk Schulze.

        * html/CanvasStyle.cpp:
        * platform/graphics/cairo/PatternCairo.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * svg/graphics/cairo/SVGResourceMaskerCairo.cpp:

2008-08-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6115819> Notify of profile in console

        * page/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::addProfileMessageToConsole): Called by
        addProfile this is the function that adds a message to the console that
        a profile finished.
        * page/InspectorController.h:
        * page/JavaScriptProfile.cpp: Expose the profiler's unique ID to match
        the console log to the profile in the web inspector.
        (WebCore::getUniqueIdCallback):
        (WebCore::ProfileClass):
        * page/inspector/ProfilesPanel.js: Created a map of all the profiles by
        Id to bring up the requested profile.  Also select and reveal the
        profile in the profile panel.  And created displayTitleForProfileLink()
        which formats a title taking into account if it's user initiated or if
        there are multiples. Lasty, I put the user initiated profile in a
        variable.
        * page/inspector/inspector.js: Make the profile title be a clickable
        link that will take the user to the identified profile.  Also expose
        the count of user initiated profiles so they can be displayed in the
        console with the correct count.

2008-08-14  Timothy Hatcher  <timothy@apple.com>

        Avoid formating ConsoleMessages twice unless the message will be
        displayed in bubbles of a SourceFrame.

        Reviewed by Kevin McCullough.

        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage): Only format the plain text message
        if the URL and line are valid and the level is error or warning.
        (WebInspector.ConsoleMessage.prototype.isErrorOrWarning): Added.
        Helper to test for error or warning level.
        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addMessage): Don't add the
        message if there is no message or valid line or if the msg
        isn't an error or warning.

2008-08-14  Jan Michael Alonzo  <jmalonzo@webkit.org>

        partial Gtk build fix, not reviewed

        * platform/graphics/cairo/PatternCairo.cpp:

2008-08-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix style issue.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pickMedia):

2008-08-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix for Cairo, not reviewed. (exposed by gtk build slave)
        Continue Erics build fixes, after the Image cleanup.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::image):

2008-08-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix for Qt, not reviewed.
        Don't declare eventuallyMarkAsParserCreated in a block wrapped by !USE_QXMLSTREAM.

        * dom/XMLTokenizer.cpp:
        (WebCore::eventuallyMarkAsParserCreated): Was erre

2008-08-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.
        Add ScriptElement.cpp to Gtk build.

        * GNUmakefile.am:

2008-08-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

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

        Refactor HTMLScriptElement's code into a common base class: ScriptElement.
        SVGScriptElement will be converted to use ScriptElement in a follow-up patch.

        This resolves code duplications and allows us to completly replace the old
        SVGScriptElement (which doesn't use CachedScript, no dynamic injected scripts etc..)

        As ScriptElement, doesn't actually inherit from Element, we may want to rename
        it, though StyleElement uses the same naming convention, so I left it as is for now.
        Eventually we'll rename both files in future.

        No functional changes yet, as SVGScriptElement doesn't yet use the new base class.

        * WebCore.pro: Add new ScriptElement.cpp to build.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Dutto.
        * dom/ScriptElement.cpp: Added. 1:1 based on HTMLScriptElement
        (WebCore::ScriptElement::insertedIntoDocument):
        (WebCore::ScriptElement::removedFromDocument):
        (WebCore::ScriptElement::childrenChanged):
        (WebCore::ScriptElement::finishParsingChildren):
        (WebCore::ScriptElement::handleSourceAttribute):
        (WebCore::isSupportedJavaScriptLanguage):
        (WebCore::ScriptElementData::ScriptElementData):
        (WebCore::ScriptElementData::~ScriptElementData):
        (WebCore::ScriptElementData::requestScript):
        (WebCore::ScriptElementData::evaluateScript):
        (WebCore::ScriptElementData::stopLoadRequest):
        (WebCore::ScriptElementData::notifyFinished):
        (WebCore::ScriptElementData::ignoresLoadRequest):
        (WebCore::ScriptElementData::shouldExecuteAsJavaScript):
        (WebCore::ScriptElementData::scriptCharset):
        (WebCore::ScriptElementData::scriptContent):
        * dom/ScriptElement.h: Added.
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::~ScriptElement):
        (WebCore::ScriptElementData::element):
        (WebCore::ScriptElementData::createdByParser):
        (WebCore::ScriptElementData::setCreatedByParser):
        * dom/XMLTokenizer.cpp:
        (WebCore::isScriptElement):
        (WebCore::castToScriptElement):
        (WebCore::eventuallyMarkAsParserCreated):
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * html/HTMLScriptElement.cpp: Refactored code, pushed most code down to ScriptElement.
        (WebCore::HTMLScriptElement::HTMLScriptElement):
        (WebCore::HTMLScriptElement::~HTMLScriptElement):
        (WebCore::HTMLScriptElement::isURLAttribute):
        (WebCore::HTMLScriptElement::setCreatedByParser):
        (WebCore::HTMLScriptElement::shouldExecuteAsJavaScript):
        (WebCore::HTMLScriptElement::childrenChanged):
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::finishParsingChildren):
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        (WebCore::HTMLScriptElement::removedFromDocument):
        (WebCore::HTMLScriptElement::text):
        (WebCore::HTMLScriptElement::setText):
        (WebCore::HTMLScriptElement::setHtmlFor):
        (WebCore::HTMLScriptElement::setEvent):
        (WebCore::HTMLScriptElement::charset):
        (WebCore::HTMLScriptElement::src):
        (WebCore::HTMLScriptElement::type):
        (WebCore::HTMLScriptElement::scriptCharset):
        (WebCore::HTMLScriptElement::scriptContent):
        (WebCore::HTMLScriptElement::sourceAttributeValue):
        (WebCore::HTMLScriptElement::charsetAttributeValue):
        (WebCore::HTMLScriptElement::typeAttributeValue):
        (WebCore::HTMLScriptElement::languageAttributeValue):
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        (WebCore::HTMLScriptElement::dispatchErrorEvent):
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.cpp: Inherit from ScriptElement, don't actually use it yet.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::scriptContent):
        (WebCore::SVGScriptElement::sourceAttributeValue):
        (WebCore::SVGScriptElement::charsetAttributeValue):
        (WebCore::SVGScriptElement::typeAttributeValue):
        (WebCore::SVGScriptElement::languageAttributeValue):
        (WebCore::SVGScriptElement::dispatchLoadEvent):
        (WebCore::SVGScriptElement::dispatchErrorEvent):
        * svg/SVGScriptElement.h:
        (WebCore::SVGScriptElement::setCreatedByParser):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Gtk build, no review.

        I removed the bogus GraphicsContext::translatePoint() hack for Gtk in the process.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/qt/GradientQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozWidget):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Yet another attempt to fix the Qt build, no review.

        * platform/graphics/qt/GradientQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Windows build, no review.

        * platform/win/CursorWin.cpp:
        (WebCore::loadCursorByName):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::paint):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Windows build, no review.

        * platform/win/CursorWin.cpp:
        (WebCore::loadCursorByName):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::paint):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Qt build, no review.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::image):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Windows build, no review.

        * platform/graphics/win/ImageWin.cpp:
        (WebCore::Image::loadPlatformResource):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintMissingPluginIcon):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Another attempt to fix the Qt build, no review.

        * platform/graphics/qt/ImageQt.cpp:
        * platform/graphics/qt/StillImageQt.h:

2008-08-13  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Fix mac build, due to change in new code since my patch was written.

        * svg/graphics/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Attempt to fix the Qt build.

        * platform/graphics/qt/ImageBufferQt.cpp:
        * platform/graphics/qt/StillImageQt.h:
        (WebCore::StillImage::create):
        (WebCore::StillImage::destroyDecodedData):
        (WebCore::StillImage::decodedSize):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Attempt to fix the Qt build.

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Match HTML5 spec by throwing INVALID_STATE_ERR when
        createPattern is called and the HTMLImageElement is not
        yet done loading the image (!isComplete)
        https://bugs.webkit.org/show_bug.cgi?id=20351

        Test: http/misc/canvas-pattern-from-incremental-image.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Split out a Pattern class from CanvasPattern
        and remove all the Pattern-related #ifdefs
        (This will break non-mac platforms!  I will fix them.)
        https://bugs.webkit.org/show_bug.cgi?id=20351

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::parseRepetitionType):
        (WebCore::CanvasPattern::CanvasPattern):
        * html/CanvasPattern.h:
        (WebCore::CanvasPattern::create):
        (WebCore::CanvasPattern::pattern):
        (WebCore::CanvasPattern::originClean):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::applyStrokePattern):
        (WebCore::CanvasRenderingContext2D::applyFillPattern):
        * html/CanvasRenderingContext2D.h:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createHistoryItem):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Make Images RefCounted (and clean up callers)
        https://bugs.webkit.org/show_bug.cgi?id=20351

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::brokenImage):
        (WebCore::nullImage):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::notifyObservers):
        (WebCore::CachedImage::createImage):
        * loader/CachedImage.h:
        * loader/icon/IconRecord.cpp:
        (WebCore::IconRecord::setImageData):
        (WebCore::IconRecord::loadImageFromResource):
        * loader/icon/IconRecord.h:
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::create):
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::nullImage):
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::image):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::image):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        * platform/graphics/cg/PDFDocumentImage.h:
        (WebCore::PDFDocumentImage::create):
        (WebCore::PDFDocumentImage::destroyDecodedData):
        (WebCore::PDFDocumentImage::decodedSize):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::Image::loadPlatformResource):
        * rendering/RenderImage.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * svg/graphics/SVGImage.h:
        (WebCore::SVGImage::create):
        (WebCore::SVGImage::destroyDecodedData):
        (WebCore::SVGImage::decodedSize):
        (WebCore::SVGImage::frameAtIndex):
        * svg/graphics/cairo/SVGPaintServerPatternCairo.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/cairo/SVGResourceMaskerCairo.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * svg/graphics/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::patternCallback):
        * svg/graphics/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Remove #ifdefs from CanvasStyle by using platform/Color.h
        https://bugs.webkit.org/show_bug.cgi?id=20351

        There are some down-sides to this commit.
        This commit limits us to 255 levels of grey for calls like:
        context.setStrokeStyle(.37, 1.0)
        previously CG might have used up to 32bits to store the grey level
        Since setStrokeStyle is not part of HTML5, I don't suspect the web will notice.

        Likewise, setStrokeStyle/setFillStyle calls which used float colors are now limited
        to RGBA32 (like all the rest of colors in WebCore), thus:
        context.setStrokStyle(.37, .24, .456, .99) will now have the same precision as:
        context.strokeStyle = "rgba(.37, .24, .456, .99)", which is to say RGBA32

        If this is a problem for Dashboard, we can either roll out this commit
        or add a beefier Color abstraction, which can be used internally by GraphicsContext
        when keeping state, and then GraphicsContext can grow some additional set* routines
        for setting the a grey/float/whatever fill and stroke.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore::colorWithOverrideAlpha):
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/CanvasStyle.h:
        * platform/graphics/Color.cpp:
        (WebCore::colorFloatToRGBAByte):
        (WebCore::makeRGBA32FromFloats):
        * platform/graphics/Color.h:

2008-08-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Fix for <rdar://problem/6137931>
        https://bugs.webkit.org/show_bug.cgi?id=20360
        Remove all parameters from the MIME type before checking with the MIME type registry

        Tests: media/video-source-type-params.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pickMedia): only pass the portion before the first ';' 
        to isSupportedMediaMIMEType()

2008-08-13  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/6141345>

        This patch refines findString and markAllMatchesForText functions' 
        interactions with disconnected frames. They no longer rely on 
        knowing where a range is relative to the visible region and work 
        with disconnected frames that contain frames.

        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea): Now returns a bool instead of 
        the visiblity enum.
        (WebCore::Editor::firstVisibleRange): This now returns the very 
        first visible range in the document. It's no longer dependent on 
        searching forward.
        (WebCore::Editor::lastVisibleRange): This now returns the very last 
        visible range in the document. It's no longer dependent on 
        searching backwards.
        (WebCore::Editor::nextVisibleRange): This returns the next visible 
        range in the appropriate direction from the current range.
        * editing/Editor.h:
        * page/Frame.cpp:
        (WebCore::Frame::findString):
        (WebCore::Frame::markAllMatchesForText):

2008-08-13  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for case-sensitive platforms, like Linux.

        * WebCoreSources.bkl:

2008-08-13  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=16881
        [GTK] PlatformScreenGtk is unimplemented

        Original patch by Christian Dywan.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2008-08-13  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=20318
        SharedTimerGtk should use G_PRIORITY_DEFAULT_IDLE for g_idle_add

        g_idle_add is the same as g_idle_add_full with a priority of
        G_PRIORITY_DEFAULT_IDLE, so we can safely use that.

        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::setSharedTimerFireTime):

2008-08-13  Timothy Hatcher  <timothy@apple.com>

        Changed the InspectorController so it can be notified when the
        attached state of the Inspector changes in WebKit.

        Reviewed by Kevin McCullough.

        * WebCore.base.exp: Updated the symbol for setWindowVisible.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible): Added an attached argument,
        that defaults to false.Call setAttachedWindow with the attached argument.
        (WebCore::InspectorController::setAttachedWindow): Call the script version
        of setAttachedWindow.
        * page/InspectorController.h:
        * page/inspector/inspector.js:
        (WebInspector.setAttachedWindow): Set the attached property.

2008-08-12  Timothy Hatcher  <timothy@apple.com>

        Added a close button to the Inspector's toolbar when docked.

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

        Reviewed by Kevin McCullough.

        * page/InspectorController.cpp:
        (WebCore::closeWindow): Call InspectorController::closeWindow.
        (WebCore::InspectorController::windowScriptObjectAvailable):
        Added closeWindow to the script class.
        * page/InspectorController.h:
        * page/inspector/Images/closeButtons.png: Added.
        * page/inspector/inspector.css: Added and changed styles.
        * page/inspector/inspector.html: Added the close button.
        * page/inspector/inspector.js:
        (WebInspector.loaded): Added click event listener to the close button.
        (WebInspector.close): Call InspectorController.closeWindow.

2008-08-12  Timothy Hatcher  <timothy@apple.com>

        Make the docked Web Inspector resizable. This is the cross platform
        portion of the code. Each InspectorClient needs to implement the
        real resize code.

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

        Reviewed by Kevin McCullough.

        * loader/EmptyClients.h: Added an empty setAttachedWindowHeight.
        * page/InspectorClient.h: Added setAttachedWindowHeight.
        * page/InspectorController.cpp:
        (WebCore::setAttachedWindowHeight): Call setAttachedWindowHeight
        on the InspectorController.
        (WebCore::InspectorController::setAttachedWindowHeight): Call
        setAttachedWindowHeight on the client.
        (WebCore::InspectorController::windowScriptObjectAvailable):
        Added setAttachedWindowHeight to the script class.
        * page/InspectorController.h:
        * page/inspector/inspector.css: Make the cursor on the toolbar be
        row-resize when docked.
        * page/inspector/inspector.js:
        (WebInspector.loaded): Always add the toolbarDragStart event listener.
        (WebInspector.toolbarDragStart): Return early if we are not attached
        and not on Leopard. Call WebInspector.elementDragStart.
        (WebInspector.toolbarDragEnd): Call WebInspector.elementDragEnd.
        (WebInspector.toolbarDrag): When attached call setAttachedWindowHeight,
        otherwise call moveByUnrestricted.

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Initialize m_zoomsTextOnly in the Settings constructor.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2008-08-13  Brad Hughes <bhughes@trolltech.com>

        Reviewed by Simon.

        Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux

        The latest upgrade of the intel compiler allows us to compile all of
        Qt with optimizations enabled (yay!).

        * WebCore.pro:

2008-08-13  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>

        Reviewed by Simon.

        Fix QtWebKit not displaying content on 403 HTTP responses

        Just like with 404 responses also display content with 403, as
        used by http://audiio.ejamming.proteus-tech.com/audiio/profile/original_signup/

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Qt part of https://bugs.webkit.org/show_bug.cgi?id=18994

        Make the formatting of String::format() locale independent through the use of QString::vsprintf.

        * platform/text/String.cpp:
        (WebCore::String::format):

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fix QWebFrame::setHtml() not setting the new contents immediately.

        Added a setter to the DocumentLoader to toggle the deferred loading of the main
        resource when it comes from substitute data.

        Disable deferred loading of the main resource when we have valid substitute data,
        as used by QWebFrame::setHtml.

        * loader/DocumentLoader.h:

2008-08-13  Mark Rowe  <mrowe@apple.com>

        Speculative GTK build fix.

        * GNUmakefile.am:  Add dependency info for JSSVGElementWrapperFactory.cpp.

2008-08-13  Thiago Macieira  <tjmaciei@trolltech.com>

        Reviewed by Simon.

        Fix encoding of [ and ] in the host part of the URL

        Until QUrl is fixed (making QUrl's tolerant parser more tolerant), we have to
        add this workaround to the QUrl <> WebCore::KURL conversion operator so that it
        doesn't encode [ and ] when they are found in the host part. That is, the
        following URL:
        http://[::1]/
        is valid and should not be reencoded to:
        http://%5b::1%5d/

        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::operator QUrl):

2008-08-12  Mihnea Ovidenie  <mihnea@adobe.com>

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19891
        Broken HTML object elements cause de-reference of pointer to freed memory.
        If we fail to load an image for an object tag and we no longer believe the object tag points at
        an image, then clear m_imageLoader in the HTMLObjectElement so that we attempt to render the
        fall back content.

        Reviewed by Dave Hyatt and Alexey Proskuryakov.

        Test: http/tests/misc/object-image-error-with-onload.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):

2008-08-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Dave.
    
        Fixes: https://bugs.webkit.org/show_bug.cgi?id=19798
        Masks are translated, and the mask images are swapped on the y-axis.

        Turned out that http://trac.webkit.org/changeset/31830/trunk/WebCore/svg/graphics/cg/SVGResourceMaskerCg.mm
        is guilty. GraphicsContext::clipToImageBuffer() does some extra transformations that SVGResourcesMaskerCg does not want.

        Long term goal is to remove the SVGResource*/SVGPaintServer* classes anyway, so it's okay to duplicate
        the "clip to image buffer" functionality, in the CG specific SVGResourceMaskerCg class - as it was before.

        * svg/graphics/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask): Changed back to use CG clipping again.

2008-08-12  Dan Bernstein  <mitz@apple.com>

        - WebCore part of <rdar://problem/6121636>
          Make fast*alloc() abort() on failure and add "try" variants that
          return NULL on failure.

        Reviewed by Darin Adler.

        * platform/Arena.cpp:
        (WebCore::ArenaAllocate): Removed null checking of fastMalloc()'s
        result.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::create): Changed to use tryFastCalloc().

2008-08-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19348
          <rdar://problem/5978447> REGRESSION (r34193): Setting the size of a frame with javascript document.body.row no longer works

        Test: fast/frames/frameset-style-recalc.html

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::recalcStyle): Changed to call the base
        class implementation after marking for layout.

2008-08-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - move shouldUpdateWhenOffscreen from Settings to FrameView and rename it shouldUpdateWhileHidden

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameView::shouldUpdateWhileHidden):
        (WebCore::FrameView::setShouldUpdateWhileHidden):
        * page/FrameView.h:
        * page/Settings.cpp:
        * page/Settings.h:

2008-08-12  Adam Roben  <aroben@apple.com>

        Windows build fix

        * bindings/js/JSSVGPODTypeWrapper.h: Align
        JSSVGDynamicPODTypeWrapper's and JSSVGStaticPODTypeWrapperWithParent's
        members on 16-byte boundaries to avoid an alignment warning.

2008-08-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add new dynamice-update layout tests covering SVGMarkerElement.
        Fix bug: SVGMarkerElement's SVG DOM function calls don't update rendering.
        Fix orientAngle/orientType confusion: "auto" orient should always return "0" as angle.

        Tests: svg/dynamic-updates/SVGMarkerElement-dom-markerHeight-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-markerUnits-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-markerWidth-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-orient-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-refX-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-refY-attr.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-markerHeight-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-markerUnits-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-markerWidth-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-orientAngle-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-orientType-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-refX-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-refY-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-setOrientToAngle-call.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-setOrientToAuto-call.html

        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::svgAttributeChanged):
        (WebCore::SVGMarkerElement::childrenChanged):
        (WebCore::SVGMarkerElement::setOrientToAuto):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        (WebCore::SVGMarkerElement::canvasResource):

2008-08-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add new dynamic-update layout tests covering SVGImageElement.
        Fix bug: SVGImageElement doesn't react on 'preserveAspectRatio' changes.

        Tests: svg/dynamic-updates/SVGImageElement-dom-height-attr.html
               svg/dynamic-updates/SVGImageElement-dom-preserveAspectRatio-attr.html
               svg/dynamic-updates/SVGImageElement-dom-width-attr.html
               svg/dynamic-updates/SVGImageElement-dom-x-attr.html
               svg/dynamic-updates/SVGImageElement-dom-y-attr.html
               svg/dynamic-updates/SVGImageElement-svgdom-height-prop.html
               svg/dynamic-updates/SVGImageElement-svgdom-preserveAspectRatio-prop.html
               svg/dynamic-updates/SVGImageElement-svgdom-width-prop.html
               svg/dynamic-updates/SVGImageElement-svgdom-x-prop.html
               svg/dynamic-updates/SVGImageElement-svgdom-y-prop.html

        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):

2008-08-11  Anthony Ricaud  <rik24d@gmail.com>

        Changed Option/Alt-Up or Down in CSS editing when the value is
        near zero to jump to the next integer.

        Reviewed by Tim Hatcher.

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

        * page/inspector/StylesSidebarPane.js:

2008-08-11  Anthony Ricaud  <rik24d@gmail.com>

        Changed the line highlight transition for an easier animation.

        Reviewed by Tim Hatcher.

        * page/inspector/SourceFrame.js:

2008-08-11  Keishi Hattori  <casey.hattori@gmail.com>

        Added support for some Firebug Command Line APIs.

        Reviewed by Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=19867
        https://bugs.webkit.org/show_bug.cgi?id=19868
        https://bugs.webkit.org/show_bug.cgi?id=19869
        https://bugs.webkit.org/show_bug.cgi?id=19875
        https://bugs.webkit.org/show_bug.cgi?id=19876
        https://bugs.webkit.org/show_bug.cgi?id=19880

        * page/inspector/Console.js:
        (WebInspector.Console.prototype._evalInInspectedWindow):
        Create an object on the inspected window that holds the console
        command line API functions. This object is used in a with statement
        around the typed expression.

2008-08-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Antti.

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

        JS wrapper objects around SVG POD types, that contain other SVG POD types with writable properties
        failed to update. Modification of the values were completly ignored (ie. transform.matrix.a = 50, didn't take any effect)

        Added tests: svg/custom/svg-modify-currentTranslate.html
                     svg/custom/tearoffs-with-tearoffs.html
                     svg/custom/immutable-properties.html

        Fixed tests: svg/dynamic-updates/SVGLinearGradientElement-svgdom-gradientTransform-prop.html

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGDynamicPODTypeWrapper::commitChange):
        (WebCore::JSSVGStaticPODTypeWrapperWithPODTypeParent::create):
        (WebCore::JSSVGStaticPODTypeWrapperWithPODTypeParent::commitChange):
        (WebCore::JSSVGStaticPODTypeWrapperWithPODTypeParent::JSSVGStaticPODTypeWrapperWithPODTypeParent):
        (WebCore::JSSVGStaticPODTypeWrapperWithParent::create):
        (WebCore::JSSVGStaticPODTypeWrapperWithParent::operator PODType):
        (WebCore::JSSVGStaticPODTypeWrapperWithParent::commitChange):
        (WebCore::JSSVGStaticPODTypeWrapperWithParent::JSSVGStaticPODTypeWrapperWithParent):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * svg/SVGSVGElement.idl: Add [Immutable] markers to SVG POD attributes, that contain POD types with writable attributes.
        * svg/SVGZoomEvent.idl:  SVG specification explicitely demands these attributes to be readonly, even its content.

2008-08-11  Brady Eidson  <beidson@apple.com>

        Reviewed by John and Anders

        Fix for <rdar://problem/6141797>

        When WebArchives were entirely a WebKit concept, there was a guarantee that a WebResource
        would never have nil data.

        When they were pushed down into WebCore, that guarantee was lost, subtly changing a few
        semantics with some WebKit applications.

        The guarantee was a good one and should be restored.

        Note that ApplicationCacheResource doesn't need any updates to follow this rule as it already
        creates an empty data object in the case of null data for its own purposes.

        * loader/SubstituteResource.h:
        (WebCore::SubstituteResource::SubstituteResource): ASSERT that the data is not null.  This
          well help any future subclassers not make this mistake.

        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::create): Return 0 if the data is null.

2008-08-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=20328
        Fix a problem when an 'all' transition transition with more than
        one property changing is interrupted, and did some AnimationController
        cleanup.

        Test: transitions/interrupted-all-transition.html

        * page/AnimationController.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::AnimationControllerPrivate::blendProperties):
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::cleanupFinishedAnimations):
        (WebCore::CompositeAnimation::setTransitionStartTime):
        (WebCore::CompositeAnimation::overrideImplicitAnimations):
        (WebCore::CompositeAnimation::resumeOverriddenImplicitAnimations):
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::onAnimationEnd):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        (WebCore::ImplicitAnimation::affectsProperty):
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::onAnimationEnd):

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

        Reviewed by Tim.

        - Because console messages have group levels now, newly created messages
        that do not specify the level lose their message since the number of
        arguments is wrong.
 
        * page/inspector/Console.js:
        * page/inspector/Resource.js:

2008-08-11  Alp Toker  <alp@nuanti.com>

        Build fix. Add new files from r35666 (WebKitAnimationEvent). Also take
        the opportunity to sort the sources lists.

        * GNUmakefile.am:

2008-08-11  Timothy Hatcher  <timothy@apple.com>

        Speed up the the JavaScript syntax highlighter by generating
        the finders only once per script instead of per line.

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

        Reviewed by Adam Roben.

        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._syntaxHighlightJavascriptLine):
        Removed, factored into syntaxHighlightJavascript as an inline function.
        (WebInspector.SourceFrame.prototype.syntaxHighlightJavascript):
        Pulled in the _syntaxHighlightJavascriptLine so it will create a closure.
        Generate the finders before iterating the lines.

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

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Added JSWebKitAnimationEvent.cpp and
        JSWebKitTransitionEvent.cpp to the project. Let VS reformat the file,
        too.

2008-08-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6131096> Reproducible crash in CounterNode::isReset under guard malloc

        Test: fast/css/counters/invalidate-cached-counter-node.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::invalidateCounters): Added. Invalidates all
        RenderCounters in :before and :after content.
        * rendering/RenderContainer.h:
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::isCounter): Renamed isRenderCounter() to this
        to match the RenderObject method.
        (WebCore::RenderCounter::invalidate): Added. Resets the cached
        CounterNode and invalidates the object's layout and preferred widths.
        (WebCore::destroyCounterNodeChildren): Added a call to
        invalidateCounters().
        * rendering/RenderCounter.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::invalidateCounters):

2008-08-11  Dean Jackson  <dino@apple.com>

        Implement CSS Animation and Transition Events
        https://bugs.webkit.org/show_bug.cgi?id=20337

        Implement the events defined in the CSS Animations
        and Transitions specifications so code can react
        to animations and transitions.

        Reviewed by Tim Hatcher and Dave Hyatt.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            Build configs for new files

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSEventCustom.cpp:
        * dom/Document.h:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/EventTarget.cpp:
        * dom/EventTargetNode.cpp:
        * dom/EventTargetNode.h:
        * html/HTMLElement.cpp:
        * page/AnimationController.cpp:
            do all the new event stuff
            
        * html/HTMLAttributeNames.in:
            the onwebkitanimation* and onwebkittransitionend attrs

        * dom/WebKitAnimationEvent.cpp: Added.
        * dom/WebKitAnimationEvent.h: Added.
        * dom/WebKitAnimationEvent.idl: Added.
        * dom/WebKitTransitionEvent.cpp: Added.
        * dom/WebKitTransitionEvent.h: Added.
        * dom/WebKitTransitionEvent.idl: Added.
            New files for the events

        * manual-tests/transition-events.html: Added.
            New testfile

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

        Add a ForwardingHeader for wtf/NotFound.h

        Rubberstamped by Darin Adler.

        * ForwardingHeaders/wtf/NotFound.h: Added.

2008-08-11  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where error bubbles in JavaScript resources would
        be clobbered by the syntax highlighter.

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

        Reviewed by Adam Roben.

        * manual-tests/inspector/resources/script-error.js: Added.
        * manual-tests/inspector/styled-error-bubbles-in-scripts.html: Added.
        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._addMessageToSource):
        Check the nodeType and not the nodeName, this is less fragile.
        (WebInspector.SourceFrame.prototype._syntaxHighlightJavascriptLine):
        Check if the lastChild is an error bubble, if so remove it before
        getting the line's textContent. Add the error bubble back at the end.

== Rolled over to ChangeLog-2008-08-10 ==
