2006-12-31  Eric Seidel  <eric@webkit.org>

        Reviewed by weinig.

        Make SVGPathSeg construction take fewer lines of code.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegMovetoRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel):
        (WebCore::SVGPathElement::createSVGPathSegArcAbs):
        (WebCore::SVGPathElement::createSVGPathSegArcRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel):
        * ksvg2/svg/SVGPathSegArc.cpp:
        (WebCore::SVGPathSegArcAbs::SVGPathSegArcAbs):
        (WebCore::SVGPathSegArcRel::SVGPathSegArcRel):
        * ksvg2/svg/SVGPathSegArc.h:
        * ksvg2/svg/SVGPathSegCurvetoCubic.cpp:
        (WebCore::SVGPathSegCurvetoCubicAbs::SVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathSegCurvetoCubicRel::SVGPathSegCurvetoCubicRel):
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.cpp:
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::SVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::SVGPathSegCurvetoCubicSmoothRel):
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticAbs::SVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathSegCurvetoQuadraticRel::SVGPathSegCurvetoQuadraticRel):
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::SVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::SVGPathSegCurvetoQuadraticSmoothRel):
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * ksvg2/svg/SVGPathSegLineto.cpp:
        (WebCore::SVGPathSegLinetoAbs::SVGPathSegLinetoAbs):
        (WebCore::SVGPathSegLinetoRel::SVGPathSegLinetoRel):
        * ksvg2/svg/SVGPathSegLineto.h:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.cpp:
        (WebCore::SVGPathSegLinetoHorizontalAbs::SVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathSegLinetoHorizontalRel::SVGPathSegLinetoHorizontalRel):
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        * ksvg2/svg/SVGPathSegLinetoVertical.cpp:
        (WebCore::SVGPathSegLinetoVerticalAbs::SVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathSegLinetoVerticalRel::SVGPathSegLinetoVerticalRel):
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        * ksvg2/svg/SVGPathSegMoveto.cpp:
        (WebCore::SVGPathSegMovetoAbs::SVGPathSegMovetoAbs):
        (WebCore::SVGPathSegMovetoRel::SVGPathSegMovetoRel):
        * ksvg2/svg/SVGPathSegMoveto.h:

2006-12-31  Eric Seidel  <eric@webkit.org>

        Reviewed by weinig.

        Implement path length measuring for SVGPathElement::getTotalLength and friends.
        http://bugs.webkit.org/show_bug.cgi?id=12033

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getTotalLength):
        (WebCore::SVGPathElement::getPointAtLength):
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        * platform/graphics/Path.h:
        * platform/graphics/PathTraversalState.cpp: Added.
        (WebCore::midPoint):
        (WebCore::distanceLine):
        (WebCore::QuadraticBezier::QuadraticBezier):
        (WebCore::QuadraticBezier::approximateDistance):
        (WebCore::QuadraticBezier::split):
        (WebCore::CubicBezier::CubicBezier):
        (WebCore::CubicBezier::approximateDistance):
        (WebCore::CubicBezier::split):
        (WebCore::curveLength):
        (WebCore::PathTraversalState::PathTraversalState):
        (WebCore::PathTraversalState::closeSubpath):
        (WebCore::PathTraversalState::moveTo):
        (WebCore::PathTraversalState::lineTo):
        (WebCore::PathTraversalState::quadraticBezierTo):
        (WebCore::PathTraversalState::cubicBezierTo):
        * platform/graphics/PathTraversalState.h: Added.
        (WebCore::PathTraversalState::):

2006-12-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Move the SVGZoomAndPanType enum out of SVGSVGElement and
        SVGViewElement and into SVGZoomAndPan where it belongs.

        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGViewElement.h:
        * ksvg2/svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::SVGZoomAndPan):
        (WebCore::SVGZoomAndPan::parseMappedAttribute):
        * ksvg2/svg/SVGZoomAndPan.h:
        (WebCore::SVGZoomAndPan::):

2006-12-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9659
          Quirksmode: Fixed / Overflow > Positioned objects get hidden when scrolling

        Added a 'fixed' flag to ClipRects, indicating that the cached rects are in
        viewport coordinates. The flag is set (and scrolling is compensated for) for
        fixed objects and their descendants.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderLayer.h:
        (WebCore::ClipRects::ClipRects):
        (WebCore::ClipRects::fixed):

2006-12-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12037
          For relatively positioned boxes in an RTL block, 'right' should win over 'left' if both are not 'auto'

        Test: fast/block/positioning/relative-overconstrained.html

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

2006-12-30  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12004
        Webkit doesnt handle omitting M at the start of path syntax well

        Improve path parsing error handling.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString):
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseMappedAttribute):
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/svgpathparser.cpp: Removed.
        * ksvg2/svg/svgpathparser.h: Removed.

2006-12-30  Rémi Zara  <remi_zara@mac.com>

        Reviewed by Darin.

        The marker is used for start, mid and end.

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2006-12-30  Rob Buis  <buis@kde.org>

        Reviewed by weinig.

        http://bugs.webkit.org/show_bug.cgi?id=12035
        Use SVGParserUtilities in lists of values

        Use SVGParserUtilities in some more places.

        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::parseClockValue):
        (WebCore::SVGAnimationElement::detectAnimationMode):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseMappedAttribute):
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * ksvg2/svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse):
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGStringList.cpp:
        (WebCore::SVGStringList::reset):
        (WebCore::SVGStringList::parse):
        * ksvg2/svg/SVGStringList.h:

2006-12-30  Rob Buis  <buis@kde.org>

        Reviewed by weinig.

        http://bugs.webkit.org/show_bug.cgi?id=12034
        Adapt preserveAspectRatio parsing to SVGParserUtilities

        Use the new SVGParserUtilities methods to parse prserveAspectRatio attribute.

        * ksvg2/svg/SVGParserUtilities.h:
        (WebCore::checkString):
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (WebCore::):
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        * ksvg2/svg/SVGTransformable.cpp:

2006-12-30  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Alexey.

        - remove unused member variables m_loadingSheet and m_bAllDataReceived

        No test possible (no change to functionality).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setCSSStyleSheet):
        * dom/Document.h:

2006-12-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11998
        Incorrect serialization of quotation marks in XML attributes.

        Test: fast/dom/serialize-attribute.xhtml

        * editing/markup.cpp:
        (WebCore::escapeTextForMarkup): Added an isAttributeValue parameter, as the quotation mark
        only needs to be encoded in attribute values.
        (WebCore::startMarkup): Pass appropriate isAttributeValue to escapeTextForMarkup().

2006-12-29  David Kilzer  <ddkilzer@webkit.org>

        Build fix for no-svg build.

        Change #if SVG_SUPPORT to #ifdef SVG_SUPPORT.

        * bindings/js/kjs_css.cpp:
        (KJS::toJS):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):

2006-12-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brian Dash... err... Mark Rowe.

        More cleanup in preparation for fixing <rdar://problem/4608404> 
        WebScriptObject's _executionContext lack of ownership policy causes 
        crashes (e.g., in Dashcode)
        
        The key change here is to RootObject::RootObject().
        
        Layout tests pass.
        
        Renamed "_bindingRoot" => "_bindingRootObject" because "RootObject" is the
        type name.
        
        * bindings/objc/WebScriptObject.mm:
        (_didExecute): Use Interpreter::globalObject(), since RootObject::rootObjectImp() 
        no longer exists.

        * page/mac/FrameMac.mm:
        (WebCore::FrameMac::bindingRootObject): Use the new RootObject constructor.
        Stop lying about who deletes _bindingRoot.

        (WebCore::FrameMac::cleanupPluginObjects): => "destroy". Fixed a bug where
        the RootObject would only free its own memory if there were a ReferencesSet*
        associated with it.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge rootObjectForView:]): Use new constructor. Changed
        misleading comment.

2006-12-29  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12007
        SVGColor::setRGBColor color creates/deletes many strings, slowing down parsing

        Refactor code so svg reuses cssparser methods. Also make
        SVGColor and SVGPaint more efficient by avoiding using
        setRGBColor internally.

        * bindings/js/kjs_css.cpp:
        (KJS::toJS):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseColorFromValue):
        (WebCore::CSSParser::parseShadow):
        * css/cssparser.h:
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::SVGColor):
        (WebCore::SVGColor::setRGBColor):
        (WebCore::SVGColor::cssText):
        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGPaint.cpp:
        (WebCore::SVGPaint::SVGPaint):
        * ksvg2/svg/SVGPaint.h:
        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor):
        * platform/graphics/Color.h:

2006-12-29  Rob Buis  <buis@kde.org>

        Reviewed by weinig.

        http://bugs.webkit.org/show_bug.cgi?id=12022
        typo in SVGTransformable.cpp introduce in r18440
     
        Use the helper method proposed by Eric.

        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::checkString):
        (WebCore::):
        (WebCore::SVGTransformable::parseTransformAttribute):

2006-12-29  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12028
        Adapt viewBox parsing to SVGParserUtilities

        Use the new parseNumber and add tests for viewBox parsing.

        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):

2006-12-29  Geoffrey Garen  <ggaren@apple.com>

        Build fix: SVGImage only works on Mac.

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):

2006-12-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12018
        Cleanup of CSSRule and its subclasses

        - Make CSSRule::type() virtual instead of using a member variable.
        - General style cleanup.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCharsetRule.cpp:
        (WebCore::CSSCharsetRule::CSSCharsetRule):
        * css/CSSCharsetRule.h:
        (WebCore::CSSCharsetRule::isCharsetRule):
        (WebCore::CSSCharsetRule::type):
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::CSSFontFaceRule):
        (WebCore::CSSFontFaceRule::cssText):
        * css/CSSFontFaceRule.h:
        (WebCore::CSSFontFaceRule::isFontFaceRule):
        (WebCore::CSSFontFaceRule::type):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::CSSImportRule):
        (WebCore::CSSImportRule::setCSSStyleSheet):
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSImportRule.h:
        (WebCore::CSSImportRule::isImportRule):
        (WebCore::CSSImportRule::type):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):
        (WebCore::CSSMediaRule::cssText):
        * css/CSSMediaRule.h:
        (WebCore::CSSMediaRule::isMediaRule):
        (WebCore::CSSMediaRule::type):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        (WebCore::CSSPageRule::selectorText):
        (WebCore::CSSPageRule::setSelectorText):
        (WebCore::CSSPageRule::cssText):
        * css/CSSPageRule.h:
        (WebCore::CSSPageRule::style):
        (WebCore::CSSPageRule::type):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::cssText):
        (WebCore::CSSRule::setCssText):
        * css/CSSRule.h:
        (WebCore::CSSRule::):
        (WebCore::CSSRule::CSSRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        (WebCore::CSSStyleRule::setSelectorText):
        (WebCore::CSSStyleRule::cssText):
        (WebCore::CSSStyleRule::parseString):
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::isStyleRule):
        (WebCore::CSSStyleRule::style):
        (WebCore::CSSStyleRule::type):
        * css/CSSUnknownRule.h:
        (WebCore::CSSUnknownRule::CSSUnknownRule):
        (WebCore::CSSUnknownRule::type):

2006-12-29  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::size): explicitly cast to integers to prevent compile error

2006-12-29  George Staikos  <staikos@kde.org>

        Reviewed by Sam.

        Don't crash on sites such as www.apple.com.  Painter was ended incorrectly among other issues.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::TransparencyLayer::cleanup):
        (WebCore::GraphicsContext::endTransparencyLayer):
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::paintEvent):

2006-12-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fixed, not reviewed. Noticed by Daniel Molkentin.

        * platform/graphics/svg/SVGImage.h: s/WTF/wtf/ in include.

2006-12-29  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyCromeClient::scaleFactor):  build fix, use 1.f instead of 1f

2006-12-29  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        New tests:
        * fast/images/svg-as-image.html
        * fast/images/svg-as-background.html
        * fast/images/svg-as-tiled-background.html
        
        Implement basic SVGImage support.
        http://bugs.webkit.org/show_bug.cgi?id=5971
        
        This implementation depends on (rather ugly) stub Page and Frame clients in SVGImageEmptyClients.h

        * WebCore.xcodeproj/project.pbxproj: add SVGImage.*
        * ksvg2/svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseMappedAttribute): ignore fragment urls
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * platform/graphics/Image.h: made setData virtual
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::drawTiled): stub method
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/svg/SVGImage.cpp: Added.
        (WebCore::SVGImage::SVGImage):
        (WebCore::SVGImage::~SVGImage):
        (WebCore::SVGImage::size):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::drawTiled): stub method
        (WebCore::SVGImage::setData):
        * platform/graphics/svg/SVGImage.h: Added.
        (WebCore::SVGImage::frameAtIndex):
        * platform/graphics/svg/SVGImageEmptyClients.h: Added.
        (WebCore::SVGEmptyCromeClient::~SVGEmptyCromeClient):
        (WebCore::SVGEmptyCromeClient::chromeDestroyed):
        (WebCore::SVGEmptyCromeClient::setWindowRect):
        (WebCore::SVGEmptyCromeClient::windowRect):
        (WebCore::SVGEmptyCromeClient::pageRect):
        (WebCore::SVGEmptyCromeClient::scaleFactor):
        (WebCore::SVGEmptyCromeClient::focus):
        (WebCore::SVGEmptyCromeClient::unfocus):
        (WebCore::SVGEmptyCromeClient::createWindow):
        (WebCore::SVGEmptyCromeClient::createModalDialog):
        (WebCore::SVGEmptyCromeClient::show):
        (WebCore::SVGEmptyCromeClient::canRunModal):
        (WebCore::SVGEmptyCromeClient::runModal):
        (WebCore::SVGEmptyCromeClient::setToolbarsVisible):
        (WebCore::SVGEmptyCromeClient::toolbarsVisible):
        (WebCore::SVGEmptyCromeClient::setStatusbarVisible):
        (WebCore::SVGEmptyCromeClient::statusbarVisible):
        (WebCore::SVGEmptyCromeClient::setScrollbarsVisible):
        (WebCore::SVGEmptyCromeClient::scrollbarsVisible):
        (WebCore::SVGEmptyCromeClient::setMenubarVisible):
        (WebCore::SVGEmptyCromeClient::menubarVisible):
        (WebCore::SVGEmptyCromeClient::setResizable):
        (WebCore::SVGEmptyCromeClient::addMessageToConsole):
        (WebCore::SVGEmptyCromeClient::canRunBeforeUnloadConfirmPanel):
        (WebCore::SVGEmptyCromeClient::runBeforeUnloadConfirmPanel):
        (WebCore::SVGEmptyCromeClient::closeWindowSoon):
        (WebCore::SVGEmptyFrameLoaderClient::~SVGEmptyFrameLoaderClient):
        (WebCore::SVGEmptyFrameLoaderClient::frameLoaderDestroyed):
        (WebCore::SVGEmptyFrameLoaderClient::hasWebView):
        (WebCore::SVGEmptyFrameLoaderClient::hasFrameView):
        (WebCore::SVGEmptyFrameLoaderClient::hasBackForwardList):
        (WebCore::SVGEmptyFrameLoaderClient::resetBackForwardList):
        (WebCore::SVGEmptyFrameLoaderClient::provisionalItemIsTarget):
        (WebCore::SVGEmptyFrameLoaderClient::loadProvisionalItemFromPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::invalidateCurrentItemPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::privateBrowsingEnabled):
        (WebCore::SVGEmptyFrameLoaderClient::makeDocumentView):
        (WebCore::SVGEmptyFrameLoaderClient::makeRepresentation):
        (WebCore::SVGEmptyFrameLoaderClient::setDocumentViewFromPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::forceLayout):
        (WebCore::SVGEmptyFrameLoaderClient::forceLayoutForNonHTML):
        (WebCore::SVGEmptyFrameLoaderClient::updateHistoryForCommit):
        (WebCore::SVGEmptyFrameLoaderClient::updateHistoryForBackForwardNavigation):
        (WebCore::SVGEmptyFrameLoaderClient::updateHistoryForReload):
        (WebCore::SVGEmptyFrameLoaderClient::updateHistoryForStandardLoad):
        (WebCore::SVGEmptyFrameLoaderClient::updateHistoryForInternalLoad):
        (WebCore::SVGEmptyFrameLoaderClient::updateHistoryAfterClientRedirect):
        (WebCore::SVGEmptyFrameLoaderClient::setCopiesOnScroll):
        (WebCore::SVGEmptyFrameLoaderClient::tokenForLoadErrorReset):
        (WebCore::SVGEmptyFrameLoaderClient::resetAfterLoadError):
        (WebCore::SVGEmptyFrameLoaderClient::doNotResetAfterLoadError):
        (WebCore::SVGEmptyFrameLoaderClient::detachedFromParent1):
        (WebCore::SVGEmptyFrameLoaderClient::detachedFromParent2):
        (WebCore::SVGEmptyFrameLoaderClient::detachedFromParent3):
        (WebCore::SVGEmptyFrameLoaderClient::detachedFromParent4):
        (WebCore::SVGEmptyFrameLoaderClient::loadedFromPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::download):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchIdentifierForInitialRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillSendRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCancelAuthenticationChallenge):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveResponse):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFinishLoading):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFailLoading):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidHandleOnloadEvents):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCancelClientRedirect):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillPerformClientRedirect):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillClose):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveIcon):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveTitle):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCommitLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFailLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFinishLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFirstLayout):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchCreatePage):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchShow):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebCore::SVGEmptyFrameLoaderClient::cancelPolicyCheck):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchUnableToImplementPolicy):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillSubmitForm):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidLoadMainResource):
        (WebCore::SVGEmptyFrameLoaderClient::clearLoadingFromPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::isLoadingFromPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::revertToProvisionalState):
        (WebCore::SVGEmptyFrameLoaderClient::setMainDocumentError):
        (WebCore::SVGEmptyFrameLoaderClient::clearUnarchivingState):
        (WebCore::SVGEmptyFrameLoaderClient::progressStarted):
        (WebCore::SVGEmptyFrameLoaderClient::progressCompleted):
        (WebCore::SVGEmptyFrameLoaderClient::incrementProgress):
        (WebCore::SVGEmptyFrameLoaderClient::completeProgress):
        (WebCore::SVGEmptyFrameLoaderClient::setMainFrameDocumentReady):
        (WebCore::SVGEmptyFrameLoaderClient::startDownload):
        (WebCore::SVGEmptyFrameLoaderClient::willChangeTitle):
        (WebCore::SVGEmptyFrameLoaderClient::didChangeTitle):
        (WebCore::SVGEmptyFrameLoaderClient::committedLoad):
        (WebCore::SVGEmptyFrameLoaderClient::finishedLoading):
        (WebCore::SVGEmptyFrameLoaderClient::finalSetupForReplace):
        (WebCore::SVGEmptyFrameLoaderClient::cancelledError):
        (WebCore::SVGEmptyFrameLoaderClient::cannotShowURLError):
        (WebCore::SVGEmptyFrameLoaderClient::interruptForPolicyChangeError):
        (WebCore::SVGEmptyFrameLoaderClient::cannotShowMIMETypeError):
        (WebCore::SVGEmptyFrameLoaderClient::fileDoesNotExistError):
        (WebCore::SVGEmptyFrameLoaderClient::shouldFallBack):
        (WebCore::SVGEmptyFrameLoaderClient::setDefersLoading):
        (WebCore::SVGEmptyFrameLoaderClient::willUseArchive):
        (WebCore::SVGEmptyFrameLoaderClient::isArchiveLoadPending):
        (WebCore::SVGEmptyFrameLoaderClient::cancelPendingArchiveLoad):
        (WebCore::SVGEmptyFrameLoaderClient::clearArchivedResources):
        (WebCore::SVGEmptyFrameLoaderClient::canHandleRequest):
        (WebCore::SVGEmptyFrameLoaderClient::canShowMIMEType):
        (WebCore::SVGEmptyFrameLoaderClient::representationExistsForURLScheme):
        (WebCore::SVGEmptyFrameLoaderClient::generatedMIMETypeForURLScheme):
        (WebCore::SVGEmptyFrameLoaderClient::frameLoadCompleted):
        (WebCore::SVGEmptyFrameLoaderClient::restoreScrollPositionAndViewState):
        (WebCore::SVGEmptyFrameLoaderClient::provisionalLoadStarted):
        (WebCore::SVGEmptyFrameLoaderClient::shouldTreatURLAsSameAsCurrent):
        (WebCore::SVGEmptyFrameLoaderClient::addHistoryItemForFragmentScroll):
        (WebCore::SVGEmptyFrameLoaderClient::didFinishLoad):
        (WebCore::SVGEmptyFrameLoaderClient::prepareForDataSourceReplacement):
        (WebCore::SVGEmptyFrameLoaderClient::createDocumentLoader):
        (WebCore::SVGEmptyFrameLoaderClient::setTitle):
        (WebCore::SVGEmptyFrameLoaderClient::userAgent):
        (WebCore::SVGEmptyEditorClient::~SVGEmptyEditorClient):
        (WebCore::SVGEmptyEditorClient::pageDestroyed):
        (WebCore::SVGEmptyEditorClient::shouldDeleteRange):
        (WebCore::SVGEmptyEditorClient::shouldShowDeleteInterface):
        (WebCore::SVGEmptyEditorClient::smartInsertDeleteEnabled):
        (WebCore::SVGEmptyEditorClient::isContinuousSpellCheckingEnabled):
        (WebCore::SVGEmptyEditorClient::toggleContinuousSpellChecking):
        (WebCore::SVGEmptyEditorClient::isGrammarCheckingEnabled):
        (WebCore::SVGEmptyEditorClient::toggleGrammarChecking):
        (WebCore::SVGEmptyEditorClient::spellCheckerDocumentTag):
        (WebCore::SVGEmptyEditorClient::selectWordBeforeMenuEvent):
        (WebCore::SVGEmptyEditorClient::isEditable):
        (WebCore::SVGEmptyEditorClient::shouldBeginEditing):
        (WebCore::SVGEmptyEditorClient::shouldEndEditing):
        (WebCore::SVGEmptyEditorClient::shouldInsertNode):
        (WebCore::SVGEmptyEditorClient::shouldInsertText):
        (WebCore::SVGEmptyEditorClient::shouldApplyStyle):
        (WebCore::SVGEmptyEditorClient::didBeginEditing):
        (WebCore::SVGEmptyEditorClient::respondToChangedContents):
        (WebCore::SVGEmptyEditorClient::didEndEditing):
        (WebCore::SVGEmptyEditorClient::registerCommandForUndo):
        (WebCore::SVGEmptyEditorClient::registerCommandForRedo):
        (WebCore::SVGEmptyEditorClient::clearUndoRedoOperations):
        (WebCore::SVGEmptyEditorClient::canUndo):
        (WebCore::SVGEmptyEditorClient::canRedo):
        (WebCore::SVGEmptyEditorClient::undo):
        (WebCore::SVGEmptyEditorClient::redo):
        (WebCore::SVGEmptyEditorClient::dataForArchivedSelection):
        (WebCore::SVGEmptyEditorClient::userVisibleString):
        (WebCore::SVGEmptyContextMenuClient::~SVGEmptyContextMenuClient):
        (WebCore::SVGEmptyContextMenuClient::contextMenuDestroyed):
        (WebCore::SVGEmptyContextMenuClient::addCustomContextMenuItems):
        (WebCore::SVGEmptyContextMenuClient::contextMenuItemSelected):
        (WebCore::SVGEmptyContextMenuClient::downloadURL):
        (WebCore::SVGEmptyContextMenuClient::copyImageToClipboard):
        (WebCore::SVGEmptyContextMenuClient::lookUpInDictionary):
        (WebCore::SVGEmptyContextMenuClient::speak):
        (WebCore::SVGEmptyContextMenuClient::stopSpeaking):
        (WebCore::SVGEmptyContextMenuClient::searchWithSpotlight):

2006-12-29  George Staikos  <staikos@kde.org>

        Reviewed by Olliej.

        Make redirects work properly.  Sites will thank us for this. :-)

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::ResourceHandleManager::receivedResponse):

2006-12-28  George Staikos  <staikos@kde.org>

        Reviewed by Olliej.

        * loader/CachedImage.cpp: build for Qt

2006-12-28  Daniel Molkentin <molkentin@kde.org>

        Reviewed by Eric Seidel <eric@webkit.org>

        - Fix font sizes
        - Make Qt platform build again:
          - Adjust Qt platform to the Image class split.
          - Introduce BitmapImage class
          - add stub PDFDocumentImage class

        * WebCore.pro:
        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::partClearedInBegin):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawTiled):
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        (WebCore::SVGPaintServerLinearGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerPatternQt.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp:
        (WebCore::SVGPaintServer::teardown):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        (WebCore::SVGPaintServerRadialGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerSolidQt.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::bindingRootObject):

2006-12-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.
        
        Some cleanup in preparation for fixing <rdar://problem/4608404> 
        WebScriptObject's _executionContext lack of ownership policy causes 
        crashes (e.g., in Dashcode)
        
        Layout tests pass.

        Renamed "root" | "execContext" | "executionContext" => rootObject, because
        that's the object's (admittedly vague) type name.
        
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_binding.h: Removed createLanguageInstanceForValue
        and createObjcInstanceForValue because their only purpose was to confuse you.
        
        * bindings/objc/DOMInternal.h: Moved declaration of createDOMWrapper here.
        createDOMWrapper is the new name for createObjcInstanceForValue.
        
        * bindings/objc/DOMInternal.mm: Renamed Interpreter::createObjcInstanceForValue
        to createDOMWrapper because creating DOM wrappers has nothing to do with the interpreter,
        and everything to do with the DOM. Renamed value to object because it is one.
        Removed newObj nil check that is unnecessary in ObjC.

        * bindings/objc/WebScriptObject.mm: Replaced call to createLanguageInstanceForValue
        with explicit code to do the same thing it would have done: (1) try to create 
        a DOM wrapper; (2) if the object is not a wrappable DOM object, create a 
        vanilla WebScriptObject for it instead.

2006-12-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11729
          REGRESSION: Crash closing page with frames after selection

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachFromParent): Added call to pageDestroyed().
        * page/FrameTree.cpp:
        (WebCore::FrameTree::appendChild): Added an assertion that the parent and
        the child are in the same page.
        (WebCore::FrameTree::removeChild): Added calls to decrementFrameCount() and pageDestroyed().

2006-12-28  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12016
          REGRESSION: fast/text/stroking-decorations.html test fails with bus error in no-svg build

        No test cases (no change in functionality).

        * platform/TextStream.cpp: Properly initialize presicionFormats.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation): HTML tests now print out the stroke width, which is a float,
        so the precision needs to be set.

2006-12-28  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Fix for memory smasher when drawing markers.
        http://bugs.webkit.org/show_bug.cgi?id=12015
        
        No test case possible (crashes for some folks but not others, not even under --guard)

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::CGPathApplierToPathApplier): array was too small

2006-12-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11124
          REGRESSION (r14297): No drag image for partially-selected complex text

        Test: fast/text/atsui-partial-selection.html

        * platform/Font.h: Changed comment.
        * platform/mac/FontMac.mm:
        (WebCore::Font::drawComplexText): Corrected the run length calculation.
        Changed the ATSUI layout parameters to know about the entire text run, rather
        than just the range we are drawing. ATSUI measures the characters before
        the range and positions the range accordingly.

2006-12-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9202
          CSS3: border-radius not completely implemented, testcase hangs webkit

        Test: fast/borders/borderRadiusAllStylesAllCorners.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorder): Changed to not draw "arcs" at straight
        corners and to paint half-corners only where the styles mismatch.
        Corrected the condition for matching styles: ridge, groove, inset and outset
        all mismatch in the upper right and lower left corners and match in the other
        two. The incorrect condition for a match was (almost) unnoticeable because of
        the painting of both half-corners on each side that had at least one mismatch.

2006-12-28  Alexey Proskuryakov  <ap@webkit.org>

        Reverting the previous checkin, as it caused an assertion in layout tests.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::borderTop):
        (WebCore::RenderTableCell::borderBottom):
        * rendering/RenderTableCell.h:

2006-12-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11359
          Incomplete repaint of table cell's collapsed border when changing only the cell

        Test: fast/repaint/table-cell-collapsed-border.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::getAbsoluteRepaintRect): Overloaded to add the
        outer half of any collapsed borders. This function checks the cell's borders'
        widths but also the widths of the adjoining cells' borders, since they can
        contribute to the length of this cell's borders perpendicular to them, making
        such a border overflow the cell in both dimensions.
        (WebCore::RenderTableCell::borderLeft): Split the collapsing borders case off to
        borderHalfLeft().
        (WebCore::RenderTableCell::borderRight): Ditto.
        (WebCore::RenderTableCell::borderTop): Ditto.
        (WebCore::RenderTableCell::borderBottom): Ditto.
        (WebCore::RenderTableCell::borderHalfLeft): Added. Takes an 'outer' boolean
        parameter. When true, this function returns the width of the part of the border
        that is outside the cell (different from the inner width when the total width is odd).
        (WebCore::RenderTableCell::borderHalfRight): Ditto.
        (WebCore::RenderTableCell::borderHalfTop): Ditto.
        (WebCore::RenderTableCell::borderHalfBottom): Ditto.
        * rendering/RenderTableCell.h:

2006-12-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Alexey.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11671
          REGRESSION (r13702): text-transform: capitalize changes non-breaking spaces to spaces

        Test: fast/text/capitalize-preserve-nbsp.html

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::capitalize): Copy back non-breaking spaces from the
        original string to the capitalized string. Change a 'previous' non-breaking
        space into a space (this improves the fix for <rdar://problem/4502311> from r13702).

2006-12-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10699
          div with border-radius does not redraw properly if element inside div is resized

        Test: fast/repaint/border-radius-repaint.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):

2006-12-28  Darin Adler  <darin@apple.com>

        * loader/CachedImage.cpp: (WebCore::CachedImage::createImage):
        Fixed an #ifdef PLATFORM(CG) that should be #if PLATFORM(CG).
        Might have broken the build on some platforms.

2006-12-27  Geoffrey Garen  <ggaren@apple.com>

        Build fix, plus a few "double &" => "double&" changes.
        
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::parseNumber):
        (WebCore::SVGPathParser::calculateArc):

2006-12-27  Oliver Hunt <oliver@apple.com> 

        Build fix

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        (WebCore::Image::getHBITMAP):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::PDFDocumentImage):

2006-12-27  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Add new PDFDocumentImage and BitmapImage classes (subclasses of Image)
        (In preparation for adding SVGImage as part of bug 5971)
        http://bugs.webkit.org/show_bug.cgi?id=11990
        
        Test cases landed separately as part of filing bug 11992.

        * WebCore.xcodeproj/project.pbxproj: add BitmapImage.*
        * loader/CachedImage.cpp:
        (WebCore::nullImage): use BitmapImage directly
        (WebCore::CachedImage::createImage): now create either BitmapImage or PDFDocumentImage directly
        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::setImageData): use BitmapImage directly
        * platform/graphics/BitmapImage.cpp: Added.
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::~BitmapImage):
        (WebCore::BitmapImage::invalidateData):
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::size):
        (WebCore::BitmapImage::setNativeData):
        (WebCore::BitmapImage::frameCount):
        (WebCore::BitmapImage::isSizeAvailable):
        (WebCore::BitmapImage::frameAtIndex):
        (WebCore::BitmapImage::frameDurationAtIndex):
        (WebCore::BitmapImage::frameHasAlphaAtIndex):
        (WebCore::BitmapImage::shouldAnimate):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::stopAnimation):
        (WebCore::BitmapImage::resetAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h: Added.
        (WebCore::FrameData::FrameData):
        (WebCore::BitmapImage::nativeImageForCurrentFrame): added.
        (WebCore::BitmapImage::currentFrame):
        (WebCore::BitmapImage::mayFillWithSolidColor): added.
        (WebCore::BitmapImage::solidColor): added.
        * platform/graphics/Image.cpp:
        (WebCore::Image::Image):
        (WebCore::Image::~Image):
        * platform/graphics/Image.h:
        (WebCore::Image::setNativeData): now virtual
        (WebCore::Image::stopAnimation): now virtual
        (WebCore::Image::resetAnimation): now virtual
        (WebCore::Image::getNSImage): now virtual
        (WebCore::Image::getTIFFRepresentation): now virtual
        (WebCore::Image::getCGImageRef): now virtual
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::getCGImageRef): use nativeImageForCurrentFrame
        (WebCore::fillWithSolidColor): added
        (WebCore::BitmapImage::draw):
        (WebCore::drawPattern): use fillWithSolidColor, mayFillWithSolidColor() and solidcolor()
        (WebCore::BitmapImage::drawTiled): use fillWithSolidColor, mayFillWithSolidColor() and solidcolor()
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::PDFDocumentImage):
        (WebCore::PDFDocumentImage::size): change to subclass from Image
        (WebCore::PDFDocumentImage::setNativeData):
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        (WebCore::PDFDocumentImage::drawTiled):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::BitmapImage::getTIFFRepresentation):
        (WebCore::BitmapImage::getNSImage):
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm:
        (WebCore::SVGFEImage::getCIFilter): remove soon-to-be unnecessary comment
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nullImage): use BitmapImage

2006-12-27  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11452
          REGRESSION (r16736-r16801): Incorrect repaint of fixed boxes

        Test: fast/repaint/fixed.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeAbsoluteRepaintRect): Re-added.
        * rendering/RenderView.h:

2006-12-27  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11930
          Specifying border-radius makes the outline shrink

        Test: fast/css/border-radius-outline-offset.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Added missing return statement.

2006-12-27  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=11108
        Replace usage of split by proper parsers
        http://bugs.webkit.org/show_bug.cgi?id=11908
        WebKit spends 40% of its time displaying "bamboo.svg" executing Regexes

        Get rid of split() when parsing transform attribute.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGParserUtilities.cpp: Added.
        (WebCore::parseNumber):
        (WebCore::parseNumberOptionalNumber):
        (WebCore::SVGPolyParser::parsePoints):
        (WebCore::SVGPathParser::parseSVG):
        (WebCore::SVGPathParser::calculateArc):
        (WebCore::SVGPathParser::svgLineToHorizontal):
        (WebCore::SVGPathParser::svgLineToVertical):
        (WebCore::SVGPathParser::svgCurveToCubicSmooth):
        (WebCore::SVGPathParser::svgCurveToQuadratic):
        (WebCore::SVGPathParser::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathParser::svgArcTo):
        * ksvg2/svg/SVGParserUtilities.h: Added.
        (WebCore::isWhitespace):
        (WebCore::skipOptionalSpaces):
        (WebCore::skipOptionalSpacesOrDelimiter):
        (WebCore::SVGPolyParser::~SVGPolyParser):
        (WebCore::SVGPathParser::~SVGPathParser):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::parseTransformParamList):
        (WebCore::SVGTransformable::parseTransformAttribute):
        * ksvg2/svg/svgpathparser.cpp:
        (WebCore::DeprecatedSVGPathParser::parseSVG):
        (WebCore::DeprecatedSVGPathParser::calculateArc):
        (WebCore::DeprecatedSVGPathParser::svgLineToHorizontal):
        (WebCore::DeprecatedSVGPathParser::svgLineToVertical):
        (WebCore::DeprecatedSVGPathParser::svgCurveToCubicSmooth):
        (WebCore::DeprecatedSVGPathParser::svgCurveToQuadratic):
        (WebCore::DeprecatedSVGPathParser::svgCurveToQuadraticSmooth):
        (WebCore::DeprecatedSVGPathParser::svgArcTo):
        * ksvg2/svg/svgpathparser.h:
        (WebCore::DeprecatedSVGPathParser::~DeprecatedSVGPathParser):

2006-12-27  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Geoff.

        - http://bugs.webkit.org/show_bug.cgi?id=11968
          BidiContext's m_basicDir is redundant

        No test possible (no functionality change)

        * rendering/bidi.cpp:
        (WebCore::BidiContext::BidiContext):
        (WebCore::operator==):
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Use the block's
        direction to resolve 'automatic' text-align.
        * rendering/bidi.h:
        (WebCore::BidiContext::dir):

2006-12-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.

        Accidently commited an older revision of this file.

        * platform/graphics/svg/SVGPaintServerPattern.h:

2006-12-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mitz & Eric.

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

        We need to cache the CGPatternRef (m_pattern) for efficiency
        in SVGPaintServerPatternCg, and keep track wheter the underlying
        ImageBuffer has changed, and only update the pattern in that case.

        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::SVGPaintServerPattern):
        (WebCore::SVGPaintServerPattern::~SVGPaintServerPattern):
        (WebCore::SVGPaintServerPattern::setTile):
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::teardown):

2006-12-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric Seidel.

        Fixed <rdar://problem/4740328> Safari crash on quit in _NPN_ReleaseObject 
        from KJS::Bindings::CInstance::~CInstance
        
        No testcase because we can't open and close windows in DumpRenderTree.
        
        * loader/FrameLoader.cpp: Removed closeDocument helper function because
        its only purpose was to call didCloseDocument, which is gone now.
        (WebCore::FrameLoader::detachFromParent): closeDocument => closeURL, 
        since didCloseDocument is gone now.

        * loader/FrameLoaderClient.h: Removed didCloseDocument because it proved
        unnecessary and harmful.
        
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::transitionToCommitted): closeDocument => closeURL, 
        since didCloseDocument is gone now.

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        ASSERT while loading SVG map
        http://bugs.webkit.org/show_bug.cgi?id=11987

        * ksvg2/css/SVGCSSParser.cpp: remove a few .impl() calls previously missed.
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * ksvg2/misc/KCanvasRenderingStyle.cpp: handle invalid colors
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::strokePaintServer):

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by ggaren.

        No test cases changed.
        
        Remove unnecessary (and inefficient) .impl() and .deprecatedString() calls.
        http://bugs.webkit.org/show_bug.cgi?id=11989

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNodeList::getOwnPropertySlot):
        * dom/Document.cpp:
        (WebCore::Document::createAttributeNS):
        * dom/Element.cpp:
        (WebCore::Element::getAttributeNS):
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeNS):
        (WebCore::Element::removeAttributeNS):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::getAttributeNodeNS):
        (WebCore::Element::hasAttribute):
        (WebCore::Element::hasAttributeNS):
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::getNamedItemNS):
        (WebCore::NamedAttrMap::removeNamedItemNS):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::process):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        * html/HTMLEmbedElement.h:
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::parseMappedAttribute):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::handleTimerEvent):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseMappedAttribute):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::parseMappedAttribute):
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::parseMappedAttribute):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::closeRenderer):
        * ksvg2/svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::parseMappedAttribute):
        * page/Frame.cpp:
        (WebCore::Frame::selectionComputedStyle):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderResources):

2006-12-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add patternContentUnits support, and cleanup SVGPaintServerGradientCg.cpp
        Fixes coords-units-01-b.svg

        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::SVGPaintServerPattern):
        (WebCore::SVGPaintServerPattern::contentBoundingBoxMode):
        (WebCore::SVGPaintServerPattern::setContentBoundingBoxMode):
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::renderPath):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by ggaren

        No test cases changed.
        
        Remove unneeded isPaintingText() and activeClient() from SVGPaintServer system

        * platform/graphics/svg/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::SVGPaintServer):
        * platform/graphics/svg/SVGPaintServer.h:
        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGPaintServerSolid.h:
        * platform/graphics/svg/cg/SVGPaintServerCg.cpp:
        (WebCore::SVGPaintServer::teardown):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::teardown):
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):

2006-12-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.
        
        Fixed <rdar://problem/4778898> REGRESSION: crash in getInstanceForView() 
        when quitting from kcbs.com
        
        No testcase because we can't open and close windows in DRT.
        
        The crash was caused by deallocating plug-ins that were later referenced
        in the unload event handler.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::closeDocument): Call didCloseDocument after closing
        instead of before, so plugins don't get deallocated until the document
        has been destroyed and all event handlers have fired.
        
        * loader/FrameLoaderClient.h: Renamed "willCloseDocument" to "didCloseDocument",
        since we call it after closing now.

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Replace bogus SVGLength::isFraction() method with valueAsPercentage() to fix:
        http://bugs.webkit.org/show_bug.cgi?id=11973
        
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::valueInSpecifiedUnits): remove extra spaces
        (WebCore::SVGLength::valueAsPercentage): new method
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient): use valueAsPercentage()
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::drawPatternContentIntoTile): return if malloc fails
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient): use valueAsPercentage()
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::createImageBuffer): return 0 if malloc fails
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::setup): return if malloc fails
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask): add comment about possible crash

2006-12-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        In the DOMParser class, we have to create content-type specific
        documents, instead of a pure "Document" object. Real-life SVG
        files us this way to convert strings "<svg><rect x=...></svg>
        to a new Document structure. 

        Add new testcase dynamic-svg-document-creation.svg.

        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):

2006-12-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed WebCoreSettings, cleaned up WebCore::Settings.

        * WebCore.exp: Exported Settings for use by WebKit, removed WebCoreSettings class.
        
        * WebCore.xcodeproj/project.pbxproj: Removed WebCoreSetttings.h/.mm.
        Added Settings.cpp.

        * page/Frame.cpp: Removed cruft that duplicated Settings data. Callers now call
        through to Settings to get Settings data.

        * page/Page.cpp: Added Settings data member, to replace the one that WebView
        used to hold.

        * page/Settings.cpp: Added.
        * page/Settings.h:
            - Renamed all functions to match WebKit API. Renamed all variables to
            match functions. Favorite old name: "isPluginsEnabled."
            - Moved EditableLinkBehavior outside of the class. Having it inside
            just made it harder to type.
            - Merged in old WebCoreSettings functionality, like guarding against re-setting
            to the same value, and making sure to update page layout.
            - Paired setters and getters, putting setters first.            

2006-12-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix some minor style issues.

        * ksvg2/svg/SVGPolygonElement.cpp:
        (WebCore::SVGPolygonElement::toPathData):
        * ksvg2/svg/SVGPolygonElement.h:
        * ksvg2/svg/SVGPolylineElement.cpp:
        (WebCore::SVGPolylineElement::toPathData):
        * ksvg2/svg/SVGPolylineElement.h:

2006-12-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11963
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11123

        Fix SVGList JS wrappers, which operate on POD types (ie. Point).
        There exists a special JSSVGPODTypeWrapperCreatorForList class now,
        which operators on specialized SVGPODList's. It makes it possible
        to support stuff like "myList.getItem(0).value = 200", for POD lists.

        Adding two new testcases demonstrating the usage of SVG DOM & SVGAnimatedPoints.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGPODTypeWrapperCreatorForList::JSSVGPODTypeWrapperCreatorForList):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::~JSSVGPODTypeWrapperCreatorForList):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::commitChange):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::updatePathSegContextMap):
        (WebCore::removeFromPathSegContextMap):
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::initialize):
        * bindings/js/JSSVGPointListCustom.cpp: Added.
        (WebCore::JSSVGPointList::clear):
        (WebCore::JSSVGPointList::initialize):
        (WebCore::JSSVGPointList::getItem):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::removeItem):
        (WebCore::JSSVGPointList::appendItem):
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::baseValueMap):
        (WebCore::SVGDocumentExtensions::genericContextMap):
        (WebCore::SVGDocumentExtensions::genericContext):
        (WebCore::SVGDocumentExtensions::setGenericContext):
        (WebCore::SVGDocumentExtensions::removeGenericContext):
        (WebCore::SVGDocumentExtensions::hasGenericContext):
        * ksvg2/svg/SVGAnimatedPathData.cpp:
        * ksvg2/svg/SVGAnimatedPathData.h:
        * ksvg2/svg/SVGAnimatedPoints.cpp:
        * ksvg2/svg/SVGAnimatedPoints.h:
        * ksvg2/svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::SVGLengthList):
        (WebCore::SVGLengthList::parse):
        * ksvg2/svg/SVGLengthList.h:
        * ksvg2/svg/SVGList.h:
        (WebCore::SVGPODListItem::SVGPODListItem):
        (WebCore::SVGPODListItem::operator Item&):
        (WebCore::SVGPODListItem::operator const Item&):
        (WebCore::SVGPODListItem::value):
        (WebCore::SVGPODListItem::setValue):
        (WebCore::SVGPODList::SVGPODList):
        (WebCore::SVGPODList::initialize):
        (WebCore::SVGPODList::getFirst):
        (WebCore::SVGPODList::getLast):
        (WebCore::SVGPODList::getItem):
        (WebCore::SVGPODList::insertItemBefore):
        (WebCore::SVGPODList::replaceItem):
        (WebCore::SVGPODList::removeItem):
        (WebCore::SVGPODList::appendItem):
        * ksvg2/svg/SVGPathSegList.idl:
        * ksvg2/svg/SVGPointList.cpp:
        (SVGPointList::SVGPointList):
        (SVGPointList::context):
        * ksvg2/svg/SVGPointList.h:
        * ksvg2/svg/SVGPointList.idl:
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        (WebCore::SVGPolyElement::points):
        (WebCore::SVGPolyElement::animatedPoints):
        (WebCore::SVGPolyElement::parseMappedAttribute):
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGPolyElement.h:
        * rendering/RenderSVGText.cpp:

2006-12-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10313
        Reproducible crash when doing importStylesheet in javascript with 
        xsl files that use xsl:import

        This doesn't fully address the bug, but makes a couple of steps
        in that direction.

        * xml/XSLTProcessor.cpp:
        (WebCore::transformToString): Set m_stylesheet even if it's created implicitly,
        rather than passed from outside. Always reset it in the end (this doesn't affect
        Document::applyXSLTransform(), which was the only user of setXSLStylesheet()).

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML): Set the loaded document's URL.

2006-12-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej and Geoff.

        - remove unused member variable m_styleSelectorDirty

        No test possible (no functionality change)

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:

2006-12-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11952
        style changes made through CSSMediaRule functions insertRule() 
        and deleteRule do not show up on the screen 

        Tests added:
        * fast/dom/css-mediarule-deleteRule-update.html
        * fast/dom/css-mediarule-insertRule-update.html

        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):

2006-12-24  Rob Buis  <buis@kde.org>

        Reviewed by Alexey.

        Get rid of unused variable.

        * ksvg2/svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::getTarget):

2006-12-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=11933
        REGRESSION: trying to change a property in a computed style declaration results in a crash

        Test: fast/dom/computed-style-set-property.html

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put): Added a check for null m_impl->stylesheet(). Also, fixed
        incorrect logic in Dashboard branch - it didn't return in time if removeProperty() raised
        an exception (credit for noticing this bug goes to Geoff).

2006-12-23  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11940
        Bad transparency in some cursor pointer images

        * Resources/northEastResizeCursor.png:
        * Resources/northEastSouthWestResizeCursor.png:
        * Resources/northWestResizeCursor.png:
        * Resources/northWestSouthEastResizeCursor.png:
        * Resources/southEastResizeCursor.png:
        * Resources/southWestResizeCursor.png:

2006-12-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11876
        CSSMediaRule functions insertRule and deleteRule don't raise exceptions

        Test added:
        * fast/dom/css-mediarule-functions.html

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSRuleFunc::callAsFunction):
        * css/CSSMediaRule.cpp: add exception handling
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):
        * css/CSSMediaRule.h: add ExceptionCode arguments
        * css/CSSMediaRule.idl: un-comment exceptions

2006-12-23  David Hyatt  <hyatt@apple.com>

        Fix 11942.  The inheritable properties array is duplicated (lame).  Make
        sure to keep both in sync.

        Reviewed by mitz

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::):

2006-12-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.
        
        Fixed <rdar://problem/4871518> Leopard9A321: Crash visiting www.audible.com 
        (WebCore::FrameLoader::loadSubframe)

        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::createFrame): Updated to reflect the fact that
        createChildFrameNamed: now returns a WebCore::Frame* instead of a 
        WebCoreFrameBridge *.
        * page/mac/WebCoreFrameBridge.h:

2006-12-22  David Hyatt  <hyatt@apple.com>

        Make sure to actually set the stroke thickness for text decorations.
        Covered by bugzilla bug 11921.

        Reviewed by mitz

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):

2006-12-22  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob.

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

        Adding/removing SVGPathSeg* items to a SVGPathElement (through SVGPathSegList
        interface) has live update problems, as the notifyAttributeChange() function
        isn't called anywhere. The context param is currently stored per SVGPathSeg,
        which is not needed - as it can be done using SVGPathSegList completely. It
        wastes memory, that is fixed. In order to get rid of the context param in
        SVGPathSeg, we need a way to map SVGPathSeg* objects to SVGStyledElement*
        objects ("context element"). That is done using a new HashMap in the
        SVGDocumentExtensions class.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGPathSegListCustom.cpp: Added.
        (WebCore::updatePathSegContextMap):
        (WebCore::removeFromPathSegContextMap):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::pathSegContextMap):
        (WebCore::SVGDocumentExtensions::pathSegContext):
        (WebCore::SVGDocumentExtensions::setPathSegContext):
        (WebCore::SVGDocumentExtensions::removePathSegContext):
        (WebCore::SVGDocumentExtensions::hasPathSegContext):
        * ksvg2/svg/SVGList.h:
        (WebCore::SVGList::getFirst):
        (WebCore::SVGList::getLast):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegMovetoRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel):
        (WebCore::SVGPathElement::createSVGPathSegArcAbs):
        (WebCore::SVGPathElement::createSVGPathSegArcRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel):
        (WebCore::SVGPathElement::svgMoveTo):
        (WebCore::SVGPathElement::svgLineTo):
        (WebCore::SVGPathElement::svgLineToHorizontal):
        (WebCore::SVGPathElement::svgLineToVertical):
        (WebCore::SVGPathElement::svgCurveToCubic):
        (WebCore::SVGPathElement::svgCurveToCubicSmooth):
        (WebCore::SVGPathElement::svgCurveToQuadratic):
        (WebCore::SVGPathElement::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathElement::svgArcTo):
        (WebCore::SVGPathElement::pathSegList):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPathSeg.cpp: Removed.
        * ksvg2/svg/SVGPathSeg.h:
        (WebCore::SVGPathSeg::SVGPathSeg):
        (WebCore::SVGPathSeg::~SVGPathSeg):
        (WebCore::SVGPathSeg::toString):
        * ksvg2/svg/SVGPathSegArc.cpp:
        (WebCore::SVGPathSegArcAbs::SVGPathSegArcAbs):
        (WebCore::SVGPathSegArcAbs::setX):
        (WebCore::SVGPathSegArcAbs::setY):
        (WebCore::SVGPathSegArcAbs::setR1):
        (WebCore::SVGPathSegArcAbs::setR2):
        (WebCore::SVGPathSegArcAbs::setAngle):
        (WebCore::SVGPathSegArcAbs::setLargeArcFlag):
        (WebCore::SVGPathSegArcAbs::setSweepFlag):
        (WebCore::SVGPathSegArcRel::SVGPathSegArcRel):
        (WebCore::SVGPathSegArcRel::setX):
        (WebCore::SVGPathSegArcRel::setY):
        (WebCore::SVGPathSegArcRel::setR1):
        (WebCore::SVGPathSegArcRel::setR2):
        (WebCore::SVGPathSegArcRel::setAngle):
        (WebCore::SVGPathSegArcRel::setLargeArcFlag):
        (WebCore::SVGPathSegArcRel::setSweepFlag):
        * ksvg2/svg/SVGPathSegArc.h:
        * ksvg2/svg/SVGPathSegClosePath.cpp:
        * ksvg2/svg/SVGPathSegClosePath.h:
        * ksvg2/svg/SVGPathSegCurvetoCubic.cpp:
        (WebCore::SVGPathSegCurvetoCubicAbs::SVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathSegCurvetoCubicAbs::setX):
        (WebCore::SVGPathSegCurvetoCubicAbs::setY):
        (WebCore::SVGPathSegCurvetoCubicAbs::setX1):
        (WebCore::SVGPathSegCurvetoCubicAbs::setY1):
        (WebCore::SVGPathSegCurvetoCubicAbs::setX2):
        (WebCore::SVGPathSegCurvetoCubicAbs::setY2):
        (WebCore::SVGPathSegCurvetoCubicRel::SVGPathSegCurvetoCubicRel):
        (WebCore::SVGPathSegCurvetoCubicRel::setX):
        (WebCore::SVGPathSegCurvetoCubicRel::setY):
        (WebCore::SVGPathSegCurvetoCubicRel::setX1):
        (WebCore::SVGPathSegCurvetoCubicRel::setY1):
        (WebCore::SVGPathSegCurvetoCubicRel::setX2):
        (WebCore::SVGPathSegCurvetoCubicRel::setY2):
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.cpp:
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::SVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setX):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setY):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setX2):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setY2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::SVGPathSegCurvetoCubicSmoothRel):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setX):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setY):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setX2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setY2):
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticAbs::SVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setX):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setY):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setX1):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setY1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::SVGPathSegCurvetoQuadraticRel):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setX):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setY):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setX1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setY1):
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::SVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::setX):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::setY):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::SVGPathSegCurvetoQuadraticSmoothRel):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::setX):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::setY):
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * ksvg2/svg/SVGPathSegLineto.cpp:
        (WebCore::SVGPathSegLinetoAbs::SVGPathSegLinetoAbs):
        (WebCore::SVGPathSegLinetoAbs::setX):
        (WebCore::SVGPathSegLinetoAbs::setY):
        (WebCore::SVGPathSegLinetoRel::SVGPathSegLinetoRel):
        (WebCore::SVGPathSegLinetoRel::setX):
        (WebCore::SVGPathSegLinetoRel::setY):
        * ksvg2/svg/SVGPathSegLineto.h:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.cpp:
        (WebCore::SVGPathSegLinetoHorizontalAbs::SVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathSegLinetoHorizontalAbs::setX):
        (WebCore::SVGPathSegLinetoHorizontalRel::SVGPathSegLinetoHorizontalRel):
        (WebCore::SVGPathSegLinetoHorizontalRel::setX):
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        * ksvg2/svg/SVGPathSegLinetoVertical.cpp:
        (WebCore::SVGPathSegLinetoVerticalAbs::SVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathSegLinetoVerticalAbs::setY):
        (WebCore::SVGPathSegLinetoVerticalRel::SVGPathSegLinetoVerticalRel):
        (WebCore::SVGPathSegLinetoVerticalRel::setY):
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        * ksvg2/svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::SVGPathSegList):
        (WebCore::SVGPathSegList::context):
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPathSegList.idl:
        * ksvg2/svg/SVGPathSegMoveto.cpp:
        (WebCore::SVGPathSegMovetoAbs::SVGPathSegMovetoAbs):
        (WebCore::SVGPathSegMovetoAbs::setX):
        (WebCore::SVGPathSegMovetoAbs::setY):
        (WebCore::SVGPathSegMovetoRel::SVGPathSegMovetoRel):
        (WebCore::SVGPathSegMovetoRel::setX):
        (WebCore::SVGPathSegMovetoRel::setY):
        * ksvg2/svg/SVGPathSegMoveto.h:

2006-12-22  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11903
          REGRESSION: outline not drawn if line style is dashed.

        This fixes a bunch of existing pixel tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorder):

2006-12-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin Decker

        - renamed markMisspellingsInAdjacentWords to markMisspellingsAfterTypingToPosition
          in anticipation of fixing it to work more correctly with grammar checking, where
          only checking adjacent words isn't good enough.

        * editing/Editor.h:
        renamed markMisspellingsInAdjacentWords to markMisspellingsAfterTypingToPosition 

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        updated for name change

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        renamed from markMisspellingsInAdjacentWords and added FIXME comment

2006-12-22  Eric Seidel  <eric@webkit.org>

        Reviewed by aroben.

        http://bugs.webkit.org/show_bug.cgi?id=11912
        Overriding visibility does not behave as expected.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint): allow children to draw when container is visibility='hidden'

2006-12-22  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob.

        Fix SVGPathSeg JS object creation. SVGPathSegList has to return
        the actual SVGPathSegLineToAbs/MoveToRel... object instead of a pure
        SVGPathSeg JS object.

        * WebCore.xcodeproj/project.pbxproj:
        * WebCore/bindings/js/JSSVGPathSegCustom.cpp: Added.
        * bindings/scripts/CodeGeneratorJS.pm:

2006-12-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/4897162> REGRESSION: Attempting to create a 
        new message in .Mac web mail causes Safari to crash 
        ( KJS::DOMCSSStyleDeclaration::put() + 368 )

        This was a regression from my clone-node change. This fix is very 
        simple.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::copyNonAttributeProperties): Must set the 
        data that getInlineStyleDecl() points to instead of setting 
        m_inlineStyleDecl directly. I also changed some variable names.
        * dom/StyledElement.h: Don't need parameter name here.

2006-12-21  Adele Peterson  <adele@apple.com>

        Reviewed by Geoff.

        - Fix for <rdar://problem/4895716> REGRESSION: Pressing return key in search field doesn't begin search

        Test: fast/events/onsearch-enter.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Calls onSearch when handling "Enter".  Also removed
         special case for AppKit search fields, so now the enter event is considered handled here.
        (WebCore::HTMLInputElement::onSearch): Added. Dispatches search event.
        * html/HTMLInputElement.h: Added onSearch.
        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::onSearch): Calls onSearch on the node.

2006-12-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.
        
        Fixed <rdar://problem/4897205> ASSERTION FAILURE in ContainerNode::queuePostAttachCallback 
        when creating an iframe from an iframe onload handler

        I added that assertion to try to "keep things simple," but I've found a 
        testcase that demonstrates why things need to be complicated.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::queuePostAttachCallback):

2006-12-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11919
        Allow setting CSS values to null.

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put):
        (KJS::DOMCSSStyleDeclarationProtoFunc::callAsFunction):
        Convert null values to null strings.

2006-12-21  Rob Buis  <buis@kde.org>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=11898
        CSSMediaRule functions insertRule and deleteRule assert when called from js in debug builds

        Test explicitly for the two media rule functions so it ends up calling callAsFunction.

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSRule::getOwnPropertySlot):

2006-12-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        * loader/FrameLoaderClient.h:
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::partClearedInBegin):
        (WebCore::FrameLoader::restoreDocumentState):
                comment out a few notImplemented() warnings
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::bindingRootObject):
        (WebCore::FrameQt::addPluginRootObject):
        * platform/qt/FrameQt.h:
                 implement these

2006-12-20  David Hyatt  <hyatt@apple.com>

        Make sure the execrable match-nearest-mail-blockquote-color CSS property is actually initialized (amazingly
        it started off with the value "match", since it wasn't even initialized).  Now that it is actually being
        initialized and properly copied and assigned to, tests have failed.  It seems that we were getting the
        behavior of "match" by default, when the initial value was supposed to be "normal."

        Because this property really should not exist at all, it's unclear to me what the right solution is here.
        
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCSS3NonInheritedData::StyleCSS3NonInheritedData):
        (WebCore::StyleCSS3NonInheritedData::operator==):
        * rendering/RenderStyle.h:

2006-12-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam's rubberstamp

        Accidentally left a logging channel on in my checkin

        * platform/Logging.cpp:
        (WebCore::):

2006-12-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix removeItem recursively calling itself (!). It was meant to call m_vector.remove(index)
        not removeItem(index, ec). This bug is in SVN for quite some time now :-)

        * ksvg2/svg/SVGList.h:
        (WebCore::SVGList::removeItem):

2006-12-20  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4893376> REGRESSION: Crash occurs at WebCoreFrameBridge fontForSelection: when drag selecting from a line break
        
        No layout test added because crash only happens in path where editing window is key,
        which is never the case for the automated tests.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge fontForSelection:]):
        Add nil check of fontForSelection() result.

2006-12-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix dynamic gradient changes, via JS. It actually worked before, but it
        wasn't repainted. Behave just like the pattern notifyAttributeChange() code now.

        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::notifyAttributeChange):

2006-12-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/4809825>. We need to check isSafeScript when converting
        a Location to string. 
        
        It's really a bug, and poor design, for objects to override toString.
        Subclasses that want custom toString implementations should add a toString 
        function to their prototypes instead of overriding the JavaScript ToString 
        operation. Following this design pattern would have avoided this bug in the
        first place.
        
        * bindings/js/kjs_window.cpp:
        (KJS::Location::toString):

2006-12-20  David Hyatt  <hyatt@apple.com>

        Fix SVG stroking.  Make strokeThickness() get pushed into CG immediately
        when set in the GraphicsContext.  Remove setLineWidth since it is
        redundant with setStrokeThickness now.

        Reviewed by mitz

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setLineWidth):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/mac/FontMac.mm:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawGlyphs):

2006-12-20  David Hyatt  <hyatt@apple.com>

        Fix for bug 11893, white text on form controls.  Just make sure that
        all form control drawing in RenderTheme is bracketed by save/restore
        calls.

        Reviewed by adele

        * platform/mac/LocalCurrentGraphicsContext.h:
        * platform/mac/LocalCurrentGraphicsContext.mm:
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):
        (WebCore::LocalCurrentGraphicsContext::~LocalCurrentGraphicsContext):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintTextArea):

2006-12-20  Mark Rowe  <bdash@webkit.org>

        Reviewed by Anders.

        Fix leak of CGContextRef from GraphicsContext::createImageBuffer.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::createImageBuffer): Release newly-created CGContextRef after passing it to GraphicsContext.

2006-12-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/4871993> WebCore-421.31 build fails with "Public API change" error when gcc 3.3 is the default compiler

        * bindings/scripts/CodeGeneratorObjC.pm: ignore blank lines in the public API check

2006-12-20  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4570218> REGRESSION (?-10.4.7): cntl-K only works the first time

        Test:
        * editing/deleting/delete-to-end-of-paragraph.html
        
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        If the selection was a caret at the end of the paragraph, extend selection so it wraps to the start of next paragraph (if any),

2006-12-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, reviewed by Mitz.

        Fix mac build, by using proper float -> int conversion.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):

2006-12-20  David Hyatt  <hyatt@apple.com>

        Make sure text decoration colors prefer stroke over fill (and honor both of the new CSS properties added
        for these values over color).

        Reviewed by mitz

        Added fast/text/stroking-decorations.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintDecorations):
        * rendering/RenderObject.cpp:
        (WebCore::decorationColor):
        (WebCore::RenderObject::getTextDecorationColors):

2006-12-20  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11746
        REGRESSION(r14931): Outlook Web Access incorrectly positions the insertion point when replying to e-mail

        Set caret at beginning of text on initial focus.

        Test: fast/forms/textarea-initial-caret-position.html

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateFocusAppearance):

2006-12-20  David Hyatt  <hyatt@apple.com>

        Fix for bug 11889, support stroking and filling of HTML text from CSS.  This patch adds four new CSS properties:
        text-fill-color, text-stroke-color, text-stroke-width and text-stroke (a shorthand for the other two).  Text
        is filled and not stroked by default and does so using the text-fill-color.  If this property is not set, then
        color is used.

        Stroking is accomplished by setting a stroke width.  Stroke color, if omitted, will be picked up from the color
        property.  You can set either color to be transparent or partially transparent.  A fully transparent fill color is
        the way to achieve an "outline" effect where only stroking happens.

        Stroking and filling are both customizable inside the ::selection pseudo-element, and so when selecting you can
        vary colors and widths.

        text-shadow applies to both the stroke and the fill.

        text-decorations do not yet respect the stroke/fill colors.  This will follow in a later patch.

        Reviewed by mitz

        Added fast/text/stroking.html as a layout test.  Enhanced RenderTreeAsText.cpp to dump fill and stroke information.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * platform/mac/FontMac.mm:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawGlyphs):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::maxHorizontalVisualOverflow):
        * rendering/InlineTextBox.cpp:
        (WebCore::updateGraphicsContext):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionForegroundColor):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCSS3InheritedData::StyleCSS3InheritedData):
        (WebCore::StyleCSS3InheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::textStrokeColor):
        (WebCore::RenderStyle::textStrokeWidth):
        (WebCore::RenderStyle::textFillColor):
        (WebCore::RenderStyle::setTextStrokeColor):
        (WebCore::RenderStyle::setTextStrokeWidth):
        (WebCore::RenderStyle::setTextFillColor):
        (WebCore::RenderStyle::initialTextStrokeWidth):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):

2006-12-19  Adele Peterson  <adele@apple.com>

        Reviewed by Anders.

        - Fix for <rdar://problem/3824247> Select All works even if -khtml-user-select:none; style is set

        Also made user-select:none work on new list boxes, and cleaned up the list box defaultEventHandler.

        Test: editing/selection/select-all-user-select-none.html

        * editing/SelectionController.cpp: (WebCore::SelectionController::selectAll): Make sure canSelect is true on the root renderer.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::canSelectAll): Check canSelect here.
        (WebCore::HTMLSelectElement::selectAll): Added nil check for renderer.
        (WebCore::HTMLSelectElement::defaultEventHandler): Return early if the event has been handled.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Check canSelect here.
        * html/HTMLSelectElement.h:

2006-12-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adele.

        <rdar://problem/4701860> 
        http://bugs.webkit.org/show_bug.cgi?id=11010
        [9A255] Crash in WebCore::EventTargetNode::dispatchEvent
        
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::notifyFinished):
        Ref the script element while running the script since it can be freed
        when executing the script.

2006-12-19  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - <rdar://problem/4885227>
          frame resizing is now live and no longer does direct drawing

        * html/HTMLFrameSetElement.h: Made frameBorder() and noResize() const.
        Added rowLengths() and colLengths() getters so that we don't have to
        have RenderFrameSet as a friend. Stopped using bit fields.

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::defaultEventHandler): Removed now-uneeded
        check for contextmenu events. Look at return value from userResize to
        decide whether to mark the event as "default handled". In the case where
        the event is handled, don't call through to the base class.

        * rendering/RenderFrameSet.h: No longer mark HTMLFrameSetElement as a
        friend. Made positionFrames and canResize private, and changed canResize
        to take an IntPoint. Added isResizingRow, isResizingColumn, canResizeRow,
        and canResizeColumn functions to be used soon for cursor feedback.
        Removed override of non-virtual element() function and replaced it with
        a private frameSet() inline function. Grouped all the data members for
        each axis into a GridAxis class, and made one called m_cols and one called
        m_rows. Used vectors for the resizable bits of this instead of new/delete
        arrays. Added a constant named "noSplit" so we don't have to use -1
        everywhere explicitly for this purpose. Renamed setResizing to
        setIsResizing and made it private. Eliminated resizing() function.
        Added new private helper functions, layOutAxis, findNonResizableSplits,
        splitPosition, hitTestSplit, startResizing, and continueResizing.
        Renamed m_resizing to m_isResizing, and m_clientResizing to
        m_isChildResizing.

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::RenderFrameSet): Removed now-unneeded initialization
        that is handled by the GridAxis and Vector constructors.
        (WebCore::RenderFrameSet::~RenderFrameSet): Ditto (for destructors).
        (WebCore::RenderFrameSet::GridAxis::GridAxis): Added.
        (WebCore::RenderFrameSet::frameSet): Added. Inline function so we don't have
        to cast the result of node() or element() everywhere.
        (WebCore::RenderFrameSet::nodeAtPoint): Updated for name changes.
        (WebCore::RenderFrameSet::GridAxis::resize): Added. Helper function to be used
        in the layout function.
        (WebCore::RenderFrameSet::layOutAxis): Added. Factored out the part of the
        layout function that used to be inside a for loop for the two axes.
        The algorithm is otherwise unchanged.
        (WebCore::RenderFrameSet::findNonResizableSplits): Added. Factored out the
        code that set up the "split variable" arrays from the layout function.
        (WebCore::RenderFrameSet::layout): Moved the bulk of this function into the
        new helpers. This allowed me to remove the use of goto.
        (WebCore::RenderFrameSet::positionFrames): Updated for change to data structures.
        Also added some more local variables for clarity.
        (WebCore::RenderFrameSet::startResizing): Added. Code factored out of the
        userResize function that handles mousedown events that might begin a resize.
        (WebCore::RenderFrameSet::continueResizing): Added. Code factored out of the
        userResize function that handles mouse events that continue a resize already
        in progress, including mouseup events that end the resizing. Uses the new
        splitPosition function so it can be used over and over again while resizing.
        (WebCore::RenderFrameSet::userResize): Restructured to use the new helper
        functions. Removed the direct drawing of a gray bar during mouse movement;
        instead we do the resizing live.
        (WebCore::RenderFrameSet::setIsResizing): Updated for name changes.
        (WebCore::RenderFrameSet::isResizingRow): Added.
        (WebCore::RenderFrameSet::isResizingColumn): Added.
        (WebCore::RenderFrameSet::canResize): Changed to use hitTestSplit for clarity.
        (WebCore::RenderFrameSet::canResizeRow): Added.
        (WebCore::RenderFrameSet::canResizeColumn): Added.
        (WebCore::RenderFrameSet::splitPosition): Added.
        (WebCore::RenderFrameSet::hitTestSplit): Added. Contains the guts of the code
        that was used both in canResize and userResize before -- now it's shared.
        (WebCore::RenderFrameSet::dump): Updated for name changes.

2006-12-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        Added Selection::removeAllRanges() and ::addRange()

        * bindings/js/kjs_window.cpp:
        (KJS::SelectionFunc::callAsFunction): Added the bindings for
        the two new functions.
        * bindings/js/kjs_window.h:
        (KJS::Selection::):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::removeAllRanges): Equivalent
        to clear().
        (WebCore::SelectionController::addRange): Until we support
        discontiguous selections, the new selected range is the 
        union of the old selected range and the passed range if
        the two intersect, and the old range if they don't.
        * editing/SelectionController.h:

2006-12-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4860924> outerHTML gives an out-of-date 
        result when applied to a clone

        We were only copying the m_inlineStyleDecl over to clones, but we 
        need to copy m_isStyleAttributeValid and 
        m_synchronizingStyleAttribute as well to know when we have to 
        update style, etc.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::copyNonAttributeProperties): Copy over all 
        three member variables.
        * dom/StyledElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::cloneNode): No longer need to copy the 
        inline style decl explicitly because copyNonAttributeProperties() 
        will take care of it.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::copyNonAttributeProperties): Call into 
        parent class implementation. This is important now that there is 
        more than one implementation of this function.

2006-12-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=11880
        REGRESSION (r18304): Assertion failure in -[WebHTMLView _canProcessDragWithDraggingInfo:] 
        when dragging over the window's a scroll bar (innerFrame)
        
        RenderLayer needs to check 'active,' when deciding what to do if hit testing 
        hasn't hit anything, because we want the default hit testing mechanism to return the 
        document when we hit a scrollbar.
        
        This problem shows that the idea of 'capturing' was a little too ambitious
        in hit testing, at least given the current state of things. So, I've replaced
        'capturing' with 'mouseUp,' the condition that provided the immediate need
        for the capturing flag in the first place.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        * rendering/HitTestRequest.h: Removed 'capturing' 
        (WebCore::HitTestRequest::HitTestRequest):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):

2006-12-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Ada

        Added a logging channel for network activity for loader work

        * platform/Logging.cpp:
        (WebCore::):
        * platform/Logging.h:
        * platform/mac/LoggingMac.mm:
        (WebCore::InitializeLoggingChannelsIfNecessary):

2006-12-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by hyatt
        
        <rdar://problem/4888891>
        Docs & Spreadsheets: Comment fails to insert if text is selected in the document
        
        * dom/Range.cpp:
        (WebCore::Range::surroundContents): If startContainer is a text node,
        it will be split when the range is extracted, and it will be its parent
        that will have to accept newParent.  Also cleaned up some code with 
        isDescendantOf.

2006-12-19  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4891774> Local WebCore/WebBrowser builds fail in 9A328 due to warning about ObjC-2.0 language features

        * WebCore.xcodeproj/project.pbxproj:

2006-12-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix SVGList index validation (off-by-one error).

        Adding new testcase js-font-test.svg, which uses SVGLengthList interface.
        (This is a very old ksvg1 testcase, adopted for SVG1.1)

        * ksvg2/svg/SVGList.h:
        (WebCore::SVGList::getItem):
        (WebCore::SVGList::replaceItem):
        (WebCore::SVGList::removeItem):

2006-12-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

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

        Fix pattern on stroke/fill of text.

        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::notifyAttributeChange):
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2006-12-19  Alice Liu  <alice.liu@apple.com>

        Build fix

        * platform/graphics/ImageBuffer.cpp:

2006-12-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=7296
        JavaScript error not thrown when trying to set a CSS property to an invalid value

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put): When not in Dashboard compatibility mode,
        raise exception for invalid values. Also removed an unnecessary call to
        removeProperty(), which prevented the property value from being preserved in 
        error case.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty): Moved the handling of
        empty property values here. Also removed an unnecessary call to removeProperty().

2006-12-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * dom/Document.h:
        * page/EventHandler.h:
        Use correct forward declarations for HitTestRequest.
        
2006-12-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.

        Fix Qt/Linux build. Missing GraphicsContext.h include.
        Fix Mac build, by adding lroundf() (I swear this compiled w/o that, locally :-)

        * platform/graphics/qt/ImageBufferQt.cpp:
        * ksvg2/svg/SVGPatternElement.cpp:

2006-12-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam. Previous attempts reviewed by Oliver & Eric.

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

        Bring back masking, by adding off-screen rendering functionality in GraphicsContext.
        Add new "static GraphicsContext* createImageContext(const IntSize& size, bool grayScale)"
        function, and implement it with CGBitmapContext in the GraphicsContextCG (stubs for Qt.)

        Mask image sizes are dynamically calculated using the passed bounding box in applyMask,
        as it was orignally planned. Gradient stroke mask image sizes aren't hardcoded to 2048x2048
        anymore, but are as well dynamically calculated using getAbsoluteRepaintRect().

        Add new ImageBuffer class encapsulating the size of the image, a platform-specific
        handle (ie. CGImageRef for CG platform) plus the GraphicsContext pointer, obtained
        via GraphicsContext::createImageBuffer. Offer a generic logic for rendering subtrees
        of the rendering tree into a ImageBuffer (see renderSubtreeToImage function)
        ImageBufferCG is completly implemented, ImageBufferQt is stubbed.

        Also add correct default values for x/y/width/height of <mask>.
        Fixes masking related LayoutTests, and speeds up gradient-on-stroke a lot.

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::attributeChanged):
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::drawMaskerContent):
        (WebCore::SVGMaskElement::canvasResource):
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        * ksvg2/svg/SVGPatternElement.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.cpp: Added.
        (WebCore::ImageBuffer::renderSubtreeToImage):
        * platform/graphics/ImageBuffer.h: Added.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::createImageBuffer):
        * platform/graphics/cg/ImageBufferCG.cpp: Added.
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::size):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::cgImage):
        * platform/graphics/mac/GraphicsContextMac.mm:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::createImageBuffer):
        * platform/graphics/qt/ImageBufferQt.cpp: Added.
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::size):
        (WebCore::ImageBuffer::context):
        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::tile):
        (WebCore::SVGPaintServerPattern::setTile):
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGResourceImage.h: Removed.
        * platform/graphics/svg/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::setMask):
        (WebCore::SVGResourceMasker::mask):
        * platform/graphics/svg/SVGResourceMasker.h:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::renderPath):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::patternCallback):
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/cg/SVGResourceImageCg.cpp: Removed.
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):
        * platform/graphics/svg/qt/SVGResourceImageQt.cpp: Removed.

2006-12-19  David Hyatt  <hyatt@apple.com>

        Make sure to initialize the CG fill and stroke colors to our initial fill/stroke colors when first
        constructing a GraphicsContextCG.  Because Safari actually draws text in the bookmarks bar using GraphicsContext
        and sets a fill color, this could only really be seen in another WebKit app.

        Patched GraphicsContextQt as well, since it has the same pattern.

        Reviewed by bdash

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::setCGFillColor):
        (WebCore::setCGStrokeColor):
        (WebCore::GraphicsContext::GraphicsContext):

2006-12-19  Lars Knoll <lars@trolltech.com>

        Reviewed by Rob.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::URL):\
                Fix a crash, because of the incompletely ported loader
        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawGlyphs):
                Adapt to the changes in GraphicsContext

2006-12-19  David Hyatt  <hyatt@apple.com>

        Convert stroke thickness to a float.  This allows the thickness argument to strokeArc to be eliminated.
       
        Reviewed by olliej

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokeThickness):
        (WebCore::GraphicsContext::strokeThickness):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorderArc):

2006-12-19  David Hyatt  <hyatt@apple.com>

        Rename drawArc to strokeArc and remove its strange behavior of trying to "fill" by stroking using the passed in
        thickness.  Now the method is purely about stroking an arc and always uses the passed in thickness.   Fix the
        border-radius code that calls the method so that it makes more sense now.  If stroke thickness is converted
        to a float, then even the extra argument can go away, and this method can be a clean stroke of an arc.

        Make sure to get square list markers right by setting both stroke and fill color properly.

        Reviewed by mitz, olliej

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::strokeArc):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::strokeArc):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorderArc):

2006-12-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/4549745> REGRESSION: scrolling on Google maps 
        continues after the mouse is released outside the window (8137)
        
        The RenderLayer hit testing code assumed that, when the mouse was outside
        the WebView, we only needed to capture mouse events while the mouse was
        down (in other words, mouse move events). We actually need to capture mouse 
        up events, as well.

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent): To match EventHandler::prepareMouseEvent, 
        I changed this function to take a HitTestRequest instead of the broken-out values of one.
        For clarity, I moved an assert to top of function.
        (WebCore::Document::addMarker): Removed stray character.
        * dom/Document.h:

        * page/EventHandler.cpp: Changed prepareMouseEvent to take a HitTestRequest,
        instead of the broken-out values of one. This simplified the code, and made
        the task of adding an extra, optional parameter to hit testing much easier.
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent): Set the 'capturing' flag
        if the move occurs while the mouse is down. This replaces RenderLayer's
        heavy-handed assumption that we should always capture if the mouse is down.
        (WebCore::EventHandler::handleMouseReleaseEvent): Set the 'capturing'
        flag, since we assume every mouse up follows a mouse down inside the WebView.
        (We'd like to ASSERT as much, but DRT's event sending mechanism is crazy, and
        violates this axiom.)
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::prepareMouseEvent):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::hoverTimerFired):
        * page/EventHandler.h:

        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::HitTestRequest): Added 'capturing' data member,
        which specifies whether the hit test should capture mouse events that occur
        outside the WebView.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer): Moved misleading comment to where
        it actually applies. Changed 'active' test to new 'capturing' test, so
        the hit test requester can decide whether we need to capture mouse events
        that don't intersect any layer.

2006-12-18  David Hyatt  <hyatt@apple.com>

        Make sure a stroke style is set for list bullets.

        Reviewed by mitz

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):

2006-12-18  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        Moved implementation of Frame::scheduleClose to Frame.cpp.
        Added canRunBeforeUnloadConfirmPanel, runBeforeUnloadConfirmPanel, and closeWindowSoon
        in Chrome and ChromeClient.

        * WebCore.exp:
        * bridge/win/FrameWin.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::canRunBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::closeWindowSoon):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::shouldClose):
        (WebCore::Frame::scheduleClose):
        * page/Frame.h:
        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * platform/gdk/FrameGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameGdk::issuePasteCommand):
        * platform/qt/FrameQt.cpp:
        * platform/qt/FrameQt.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::FrameWin::issuePasteCommand):

2006-12-18  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://problem/4766174> REGRESSION(r16081): Aspect eWFM: Unable to log in

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didExplicitOpen):

2006-12-18  David Hyatt  <hyatt@apple.com>

        Add save/restore calls around the painting of text areas on Mac, since the methods in question
        alter the current fill color in CG destructively.

        Reviewed by olliej

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintButton):
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintTextArea):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):

2006-12-18  David Hyatt  <hyatt@apple.com>

        Fix list markers to properly stroke and fill.  I screwed this up when changing how text draws.

        Reviewed by olliej

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):

2006-12-18  David Hyatt  <hyatt@apple.com>

        Eliminate the Pen object in favor of separate stroke variables, since most code just wants to set the
        stroke color.  This also makes it easier for us to push only stroke color through into CG synchronously
        while leaving the others alone.

        Reviewed by olliej

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::GraphicsContext::setStrokeThickness):
        (WebCore::GraphicsContext::setStrokeStyle):
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::strokeThickness):
        (WebCore::GraphicsContext::strokeStyle):
        (WebCore::GraphicsContext::strokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        * platform/graphics/GraphicsContext.h:
        (WebCore::):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQPenStyle):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        * platform/mac/FontMac.mm:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawGlyphs):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::updateTextColor):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintMarkedTextUnderline):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorderArc):
        (WebCore::RenderObject::drawBorder):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        * rendering/RenderText.cpp:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButton):

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

        Reviewed by Adele.

        - fix <rdar://problem/4889565> REGRESSION (r17597): Command-clicking a submit
          button does not submit in a new tab/window
          http://bugs.webkit.org/show_bug.cgi?id=11858

        - change DOMActivate events to be created as a part of default handling of
          click events instead of having the sender of the click event also send
          a DOMActivate event

        - fixed some edge cases in the slider thumb element handler; since this is
          inside a shadow DOM, it's likely none of these can arise in practice

        No easy way to test the command-click part since the behavior is in Safari.
        To make a test we'd have to provide JavaScript access to the modifiers passed
        to the policy delegate or have some way to query the underlying event from
        JavaScript.

        * dom/EventTargetNode.cpp: Change all assert to ASSERT.
        (WebCore::EventTargetNode::dispatchMouseEvent): Renamed some local variables
        for clarity. Added a RefPtr for relatedTarget since it might be deallocated
        by the handlers for the click event and is used in the code that creates the
        dblclick event. Removed the code to create a DOMActivate event, since that's
        now done in the default event handler for the click event.
        (WebCore::EventTargetNode::defaultEventHandler): Added code to check for a
        click event and dispatch a DOMActivate event using the click event as the
        underlying event. The part of this that fixes the bug is that we use the
        click event as the underlying event; the old code used the same underlying
        event as for the click event, not the click event itself. The underlying event
        for the click event is usually 0, since we propagate the key state to the click
        event instead of using an underlying event in the common case.

        * dom/Document.cpp: (WebCore::Document::defaultEventHandler): Added call
        to the base class's defaultEventHandler function, except in the case where
        the event is already handled.

        * html/HTMLInputElement.h: Removed clickX() and clickY().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData): Use xPos and yPos directly,
        so we can remove clickX() and clickY().
        (WebCore::HTMLInputElement::defaultEventHandler): Removed code that calls
        setDefaultHandled for click events since we are just recording the x and y
        coordinates of the events; that's not "handling" an event, and setting
        the flag prevents us from calling the base class's default event handler,
        which is now needed to submmit the form.

        * rendering/RenderSlider.cpp:
        (WebCore::HTMLSliderThumbElement::defaultEventHandler):
        Added some missing isMouseEvent checks in code that casts to a MouseEvent.
        Added check document()->frame() in code that manipulates the frame so that
        fake events, which might happen when there's no frame, can't cause a crash.
        Added an m_inDragMode check so we don't try to handle mouseup events when
        we are not handling a drag. Remove the setDefaultHandled call from the
        mousemove case, because mousemove events are observed, and not "handled"
        in the "nobody else should look at this event" sense. Added a call to the
        base class's default event handler, and some return statements so that we
        won't call it when the event has been handled.

        * html/HTMLLabelElement.cpp: (WebCore::HTMLLabelElement::defaultEventHandler):
        Removed an unneeded "return" for a function that has no return value.

2006-12-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/4749770> WebCore crashes on a blog website 
        in WebCore::InlineBox::root() + 6

        We null-check inlineBoxWrapper everywhere else in the code except 
        for these 3 spots. This patch adds them in. Only one of the checks 
        is required to fix the crash. What we render for the test case now 
        matches shipping Safari, but still seems wrong because we do not 
        match Firefox. I will file a follow-up about the rendering problem.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker): This is the required 
        null-check. 
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::setSelectionState): Null-check for 
        safety. 
        (WebCore::RenderListMarker::selectionRect): Same.

2006-12-18  David Hyatt  <hyatt@apple.com>

        Fix performance regression caused by adding setting of stroke colors as well as fill colors to every font drawing
        call on Mac.  Fix is rather involved:

        (1) Fill color is now updated in CG synchronously.  There is no more delay in the push.  I used the model that
        Qt added for this, setPlatformFillColor, so we're the same now.

        (2) Text was being drawn using the pen color, which is tantamount to using the stroke color.  Since text in HTML
        is really a fill and not a stroke, all cross-platform code that draws text has been patched to use fill instead
        of the pen.

        (3) Added a new API to GraphicsContext to set the text drawing mode to any combination of fill/stroke/clip.
        Ports should implement setPlatformTextDrawingMode or just query the mode in their drawGlyphs/drawComplexText
        method on their Font class to get the new functionality.

        (4) InlineTextBox will set the fill and stroke colors appropriately now rather than always assuming fill.

        (5) Fixed a bug in GraphicsContextCG where fillRectWithColor was updating the CG fill color in the state object
        as a side effect, creating a mismatch between CG's fill color and the stored cross-platform fill color.

        Reviewed by olliej

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::GraphicsContext::textDrawingMode):
        (WebCore::GraphicsContext::setTextDrawingMode):
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
        (WebCore::GraphicsContext::setPlatformPen):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
        (WebCore::GraphicsContext::setPlatformFillColor):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::teardown):
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * platform/mac/FontMac.mm:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawGlyphs):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::correctedTextColor):
        (WebCore::updateTextColor):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):

2006-12-18  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Maciej.

        Bug 11760: Animated GIFs with offsets crash WebKit
        http://bugs.webkit.org/show_bug.cgi?id=11760

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        ensure we don't write past the end of the image buffer when the offset
        is nonzero.  also fix the way we composite frames when animating.
        (WebCore::GIFImageDecoder::initFrameBuffer):
        (WebCore::GIFImageDecoder::haveDecodedRow):

2006-12-18  Pam Greene  <pam@chromium.org>

        Reviewed by Darin.

        Changed hidden input controls to reset to their initial values
        when the form is reset.  Also added layout tests for resetting
        other input controls.

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

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute):

2006-12-18  Alice Liu  <alice.liu@apple.com>

        Oops forgot a file. 

        * editing/EditorDeleteAction.h: Added.
        (WebCore::):

2006-12-18  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Have the Editor handle deletion instead of WebHTMLView

        * WebCore.exp:
        Exposed Editor::deleteWithDirection and ::deleteRange()

        * WebCore.xcodeproj/project.pbxproj:
        Added EditorDeleteAction.h

        * editing/Editor.cpp:
        (WebCore::Editor::deleteRange):
        (WebCore::Editor::deleteWithDirection):
        Implemented

        (WebCore::Editor::deleteSelectionWithSmartDelete):
        Overloaded to take no params, in which case canSmartCopyOrDelete is called

        (WebCore::execCopy):
        (WebCore::execCut):
        (WebCore::execDelete):
        (WebCore::execPaste):
        Call the editor instead of asking frame to cut/copy/paste/delete

        (WebCore::execBackwardDelete):
        (WebCore::execForwardDelete):
        Call deleteWithDirection instead of just executing a TypingCommand

        (WebCore::CommandEntry::):
        distinguished delete (which deletes selection) from backwards delete (single character, no selection)

        (WebCore::Editor::cut):
        (WebCore::Editor::performDelete):
        Trivial changes

        * editing/Editor.h:
        Added some functons.
        (WebCore::Editor::setStartNewKillRingSequence):
        (WebCore::Editor::propogateDOMException):
        (WebCore::Editor::addToKillRing):
        * editing/mac/EditorMac.mm:
        Factored out support for Kill Rings to this file

        * platform/mac/PasteboardMac.mm:
        Trivial change

2006-12-18  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Oliver.

        - Removed CG header include

        * platform/graphics/ImageSource.h:

2006-12-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher

        - fixed <rdar://problem/4887764> GMAIL: Crash occurs at WebCore::Range::cloneRange() 
          when I ctrl-click in a empty list item

        * editing/mac/EditorMac.mm:
        (WebCore::isRangeUngrammatical):
        bail out immediately for nil range (which selectionController()->toRange().get()
        can return). Also save some work by bailing out immediately for collapsed ranges.

2006-12-18  Alice Liu  <alice.liu@apple.com>

        Leopard build fix.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):

2006-12-17  Zack Rusin  <zack@kde.org>

        Fix compilation after the const changes.

        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):

2006-12-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

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

        Long standing regression. The old code in FontMac.mm, used set the fill/stroke
        color "[nsColor(graphicsContext->pen().color()) set];", and current code only
        sets the fill color. Reverting to old behaviour fixes gradient-on-stroke-of-text.

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * platform/mac/FontMac.mm:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawGlyphs):

2006-12-17  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed, tweaked and landed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=11798
        [CSS 3] missing cursor support for 'none'

        * Resources/noneCursor.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp: Also fixed previously broken -webkit-background-composite: copy.
        * manual-tests/cursor.html:
        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/gdk/CursorGdk.cpp:
        (WebCore::noneCursor):
        * platform/mac/CursorMac.mm:
        (WebCore::noneCursor):
        * platform/qt/CursorQt.cpp:
        (WebCore::noneCursor):
        * platform/win/CursorWin.cpp:
        (WebCore::noneCursor):
        * rendering/RenderStyle.h:
        (WebCore::):

2006-12-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.

        This should hopefully fix Qt build.

        * ksvg2/svg/SVGLength.cpp: Include math.h for Qt/Linux build.

2006-12-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob.

        Remove SVGHelper class. Move the last static function "parseSeparatedList"
        to the only place using it: SVGAnimationElement. Update all build files.

        Remove any lazy_create macro usage, by what it does - cleaner.

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::parseSeparatedList):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        * ksvg2/svg/SVGCircleElement.cpp:
        * ksvg2/svg/SVGClipPathElement.cpp:
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        * ksvg2/svg/SVGCursorElement.cpp:
        * ksvg2/svg/SVGEllipseElement.cpp:
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        * ksvg2/svg/SVGFETileElement.cpp:
        * ksvg2/svg/SVGFilterElement.cpp:
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGHelper.cpp: Removed.
        * ksvg2/svg/SVGHelper.h: Removed.
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGLength.cpp:
        * ksvg2/svg/SVGLineElement.cpp:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGPathElement.cpp:
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGPolyElement.cpp:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        * ksvg2/svg/SVGRectElement.cpp:
        * ksvg2/svg/SVGStopElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        * ksvg2/svg/SVGSymbolElement.cpp:
        * ksvg2/svg/SVGTests.cpp:
        * ksvg2/svg/SVGTextContentElement.cpp:
        * ksvg2/svg/SVGTextElement.cpp:
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        * ksvg2/svg/SVGTransformable.cpp:
        * ksvg2/svg/SVGURIReference.cpp:
        * ksvg2/svg/SVGUseElement.cpp:
        * ksvg2/svg/SVGViewElement.cpp:
        * ksvg2/svg/SVGZoomAndPan.cpp:

2006-12-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob.

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

        Pass SVGLength around by value, remove any SVGLength* usage.
        Bindings work fine, as the SVG POD JS Wrapper stuff is already in svn.

        No new regressions, none fixed. But the code itself is much cleaner.
        And some problems with width-full-percentage.svg have been fixed, viewport
        clipping works in any case now, also for percentual width/height values set on <svg>.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::cssPrimitiveToLength):
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        (WebCore::SVGCircleElement::parseMappedAttribute):
        (WebCore::SVGCircleElement::toPathData):
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        (WebCore::SVGCursorElement::parseMappedAttribute):
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGElement.cpp:
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        (WebCore::SVGEllipseElement::toPathData):
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        (WebCore::SVGFilterElement::parseMappedAttribute):
        (WebCore::SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseMappedAttribute):
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        (WebCore::SVGForeignObjectElement::parseMappedAttribute):
        (WebCore::SVGForeignObjectElement::createRenderer):
        (WebCore::SVGForeignObjectElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGHelper.cpp:
        (WebCore::SVGHelper::parseSeparatedList):
        * ksvg2/svg/SVGHelper.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        (WebCore::SVGImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::storeUnit):
        (WebCore::extractMode):
        (WebCore::extractType):
        (WebCore::lengthTypeToString):
        (WebCore::stringToLengthType):
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::unitType):
        (WebCore::SVGLength::value):
        (WebCore::SVGLength::setValue):
        (WebCore::SVGLength::setValueInSpecifiedUnits):
        (WebCore::SVGLength::setValueAsString):
        (WebCore::SVGLength::valueAsString):
        (WebCore::SVGLength::newValueSpecifiedUnits):
        (WebCore::SVGLength::convertToSpecifiedUnits):
        (WebCore::SVGLength::isFraction):
        (WebCore::SVGLength::dpi):
        (WebCore::SVGLength::PercentageOfViewport):
        * ksvg2/svg/SVGLength.h:
        (WebCore::):
        (WebCore::SVGLength::):
        * ksvg2/svg/SVGLength.idl:
        * ksvg2/svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::SVGLengthList):
        (WebCore::SVGLengthList::parse):
        * ksvg2/svg/SVGLengthList.h:
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        (WebCore::SVGLineElement::parseMappedAttribute):
        (WebCore::SVGLineElement::toPathData):
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        (WebCore::SVGLinearGradientElement::parseMappedAttribute):
        (WebCore::SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::canvasResource):
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::attributeChanged):
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::drawMaskerContent):
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseMappedAttribute):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        (WebCore::SVGPatternElement::getCTM):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        (WebCore::SVGRectElement::parseMappedAttribute):
        (WebCore::SVGRectElement::toPathData):
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::SVGSVGElement::createSVGLength):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::parseMappedAttribute):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::parseMappedAttribute):
        (WebCore::SVGUseElement::closeRenderer):
        * ksvg2/svg/SVGUseElement.h:
        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        * rendering/RenderPath.cpp:
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::calcViewport):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::relativeBBox):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        (WebCore::RenderSVGImage::translationForAttributes):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::translateBox):
        (WebCore::placePositionedBoxesHorizontally):
        (WebCore::placeBoxesVerticallyWithAbsBaseline):

2006-12-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11856
        Update renderName() methods to return current class names.

        * rendering/RenderPath.h:
        (WebCore::RenderPath::renderName): Returns "RenderPath" instead of "KCanvasItem".
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::renderName): Returns "RenderSVGContainer" instead of "KCanvasContainer".
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::renderName): Returns "RenderTextControl" instead of "RenderTextField".

2006-12-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11844
        Code Cleanup for more of the rendering code

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::calcMinMaxWidth):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::setStyle):
        (WebCore::RenderText::destroy):
        (WebCore::RenderText::attachTextBox):
        (WebCore::RenderText::findNextInlineTextBox):
        (WebCore::RenderText::positionForCoordinates):
        (WebCore::firstRendererOnNextLine):
        (WebCore::lastRendererOnPrevLine):
        (WebCore::RenderText::caretRect):
        (WebCore::RenderText::posOfChar):
        (WebCore::RenderText::allAscii):
        (WebCore::RenderText::shouldUseMonospaceCache):
        (WebCore::RenderText::cacheWidths):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedMinMaxWidth):
        (WebCore::RenderText::calcMinMaxWidth):
        (WebCore::isSpaceAccordingToStyle):
        (WebCore::RenderText::containsOnlyWhitespace):
        (WebCore::RenderText::minXPos):
        (WebCore::RenderText::setSelectionState):
        (WebCore::RenderText::setTextWithOffset):
        (WebCore::RenderText::setText):
        (WebCore::RenderText::position):
        (WebCore::RenderText::width):
        (WebCore::RenderText::getAbsoluteRepaintRect):
        (WebCore::RenderText::selectionRect):
        (WebCore::RenderText::verticalPositionHint):
        (WebCore::RenderText::font):
        (WebCore::RenderText::caretMinOffset):
        (WebCore::RenderText::caretMaxOffset):
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::nextOffset):
        (WebCore::RenderText::inlineBox):
        * rendering/RenderText.h:
        (WebCore::RenderText::isTextFragment):
        (WebCore::RenderText::data):
        (WebCore::RenderText::string):
        (WebCore::RenderText::paint):
        (WebCore::RenderText::layout):
        (WebCore::RenderText::nodeAtPoint):
        (WebCore::RenderText::length):
        (WebCore::RenderText::text):
        (WebCore::RenderText::stringLength):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setStyle):
        (WebCore::disabledTextColor):
        (WebCore::RenderTextControl::createInnerBlockStyle):
        (WebCore::RenderTextControl::createInnerTextStyle):
        (WebCore::RenderTextControl::createResultsButtonStyle):
        (WebCore::RenderTextControl::createCancelButtonStyle):
        (WebCore::RenderTextControl::showPlaceholderIfNeeded):
        (WebCore::RenderTextControl::hidePlaceholderIfNeeded):
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        (WebCore::RenderTextControl::updateFromElement):
        (WebCore::RenderTextControl::selectionStart):
        (WebCore::RenderTextControl::setSelectionRange):
        (WebCore::RenderTextControl::visiblePositionForIndex):
        (WebCore::RenderTextControl::subtreeHasChanged):
        (WebCore::RenderTextControl::textWithHardLineBreaks):
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::nodeAtPoint):
        (WebCore::RenderTextControl::layout):
        (WebCore::RenderTextControl::calcMinMaxWidth):
        (WebCore::RenderTextControl::addSearchResult):
        (WebCore::RenderTextControl::showPopup):
        (WebCore::RenderTextControl::itemText):
        (WebCore::RenderTextControl::itemIsEnabled):
        (WebCore::RenderTextControl::listSize):
        (WebCore::RenderTextControl::scroll):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::renderName):
        (WebCore::RenderTextControl::removeLeftoverAnonymousBoxes):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::RenderTextFragment):
        (WebCore::RenderTextFragment::originalString):
        * rendering/RenderTextFragment.h:
        (WebCore::RenderTextFragment::isTextFragment):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::stateChanged):
        (WebCore::RenderTheme::adjustCheckboxStyle):
        (WebCore::RenderTheme::adjustRadioStyle):
        * rendering/RenderTheme.h:
        (WebCore::):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeMac::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeMac::systemFont):
        (WebCore::RenderThemeMac::isControlStyled):
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::updateCheckedState):
        (WebCore::RenderThemeMac::controlSupportsTints):
        (WebCore::RenderThemeMac::setFontFromControlSize):
        (WebCore::RenderThemeMac::paintCheckbox):
        (WebCore::RenderThemeMac::checkboxMargins):
        (WebCore::RenderThemeMac::setCheckboxCellState):
        (WebCore::RenderThemeMac::setCheckboxSize):
        (WebCore::RenderThemeMac::paintRadio):
        (WebCore::RenderThemeMac::radioMargins):
        (WebCore::RenderThemeMac::setRadioCellState):
        (WebCore::RenderThemeMac::setRadioSize):
        (WebCore::RenderThemeMac::adjustButtonStyle):
        (WebCore::RenderThemeMac::buttonMargins):
        (WebCore::RenderThemeMac::setButtonSize):
        (WebCore::RenderThemeMac::setButtonCellState):
        (WebCore::RenderThemeMac::adjustTextFieldStyle):
        (WebCore::RenderThemeMac::adjustTextAreaStyle):
        (WebCore::RenderThemeMac::popupButtonMargins):
        (WebCore::RenderThemeMac::popupButtonPadding):
        (WebCore::TopGradientInterpolate):
        (WebCore::BottomGradientInterpolate):
        (WebCore::MainGradientInterpolate):
        (WebCore::TrackGradientInterpolate):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::setSearchCellState):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeIndent):
        (WebCore::printBorderStyle):
        (WebCore::getTagName):
        (WebCore::isEmptyOrUnstyledAppleStyleSpan):
        (WebCore::writeTextRun):
        (WebCore::write):
        (WebCore::writeLayers):
        (WebCore::nodePosition):
        (WebCore::writeSelection):
        * rendering/RenderTreeAsText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::calcMinMaxWidth):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::absolutePosition):
        (WebCore::RenderView::paint):
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::rendererAfterPosition):
        (WebCore::RenderView::selectionRect):
        (WebCore::RenderView::setSelection):
        (WebCore::RenderView::selectionStartEnd):
        (WebCore::RenderView::updateWidgetPositions):
        (WebCore::RenderView::addWidget):
        (WebCore::RenderView::removeWidget):
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::docHeight):
        (WebCore::RenderView::docWidth):
        (WebCore::RenderView::setBestTruncatedAt):
        * rendering/RenderView.h:
        (WebCore::RenderView::renderName):
        (WebCore::RenderView::selectionStart):
        (WebCore::RenderView::selectionEnd):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):
        (WebCore::RenderWidget::resizeWidget):
        (WebCore::RenderWidget::setStyle):
        (WebCore::RenderWidget::paint):
        (WebCore::RenderWidget::updateWidgetPosition):
        (WebCore::RenderWidget::setSelectionState):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::fillLineSelectionGap):
        (WebCore::RootInlineBox::selectionState):
        (WebCore::RootInlineBox::firstSelectedBox):
        (WebCore::RootInlineBox::lastSelectedBox):
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::closestLeafChildForXPos):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::isRootInlineBox):
        (WebCore::RootInlineBox::setVerticalOverflowPositions):
        (WebCore::RootInlineBox::setHorizontalOverflowPositions):
        (WebCore::RootInlineBox::setVerticalSelectionPositions):
        (WebCore::RootInlineBox::lineBreakObj):
        (WebCore::RootInlineBox::lineBreakPos):
        (WebCore::RootInlineBox::setLineBreakPos):
        (WebCore::RootInlineBox::blockHeight):
        (WebCore::RootInlineBox::setBlockHeight):
        (WebCore::RootInlineBox::endsWithBreak):
        (WebCore::RootInlineBox::setEndsWithBreak):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        (WebCore::paintSVGInlineFlow):
        (WebCore::translateBox):
        (WebCore::placePositionedBoxesHorizontally):
        (WebCore::placeBoxesVerticallyWithAbsBaseline):
        (WebCore::placeSVGFlowVertically):
        * rendering/SVGInlineFlowBox.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::TextStreamSeparator::TextStreamSeparator):
        (WebCore::operator<<):
        (WebCore::hasFractions):
        (WebCore::writeIndent):
        (WebCore::writeStyle):
        (WebCore::getTagName):
        (WebCore::write):
        (WebCore::writeRenderResources):
        * rendering/SVGRenderTreeAsText.h:
        (WebCore::operator<<):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::placeBoxesHorizontally):
        * rendering/SVGRootInlineBox.h:
        * rendering/TableLayout.h:

2006-12-16  Adam Roben  <aroben@apple.com>

        Build fixes.

        * platform/ContextMenuItem.h: Fixed const declarations.
        * platform/mac/ContextMenuItemMac.mm: Dito.
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):

2006-12-16  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11189
        <rdar://problem/4770249> REGRESSION (NativeListBox): When a list box has focus, pressing command- A (select all) doesn't selected all items in list

        Test: fast/forms/listbox-select-all.html

        * dom/Node.h: We should try to find a more appropriate place to put these methods.
        (WebCore::Node::canSelectAll): Added.
        (WebCore::Node::selectAll): Added.
        * editing/SelectionController.cpp: (WebCore::SelectionController::selectAll): Before selecting editable content, give the focused node
          a chance to select its content.
        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::selectAll): Selects all items in a multi-select list box.  Single-select
          list boxes will just do nothing, but we still want the select to handle this case when it has focus, rather than selecting other content.
        * html/HTMLSelectElement.h: (WebCore::HTMLSelectElement::canSelectAll): Returns true for list boxes.

2006-12-16  Zack Rusin  <zack@kde.org>

        Add a stub for SearchPopupMenu for Qt code.

        * platform/qt/SearchPopupMenuQt.cpp: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):

2006-12-16  Zack Rusin  <zack@kde.org>

        Make it compile after last nights changes.

        * WebCore.pro:
        * loader/qt/DocumentLoaderQt.cpp:
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::prepareForLoadStart):
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::insertItem):
        * platform/qt/TemporaryLinkStubs.cpp:

2006-12-16  Adele Peterson  <adele@apple.com>

        One more...

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):

2006-12-16  Adele Peterson  <adele@apple.com>

        Missed one instance of isNonWidgetTextField.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):

2006-12-16  Hunter L. Williams <hlwebkit@gmail.com>

        Reviewed by Adele.

        Fix mouse wheel scrolling in <textarea> controls.

        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:
        Override |scroll| on RenderTextControl to forward the call to the RenderObject of the 
        inner m_innerText, which has a layer that can be scrolled.

2006-12-16  Adele Peterson  <adele@apple.com>

        RS by Adam.

        Removed RenderLineEdit, TextField, WebCoreTextField classes, and use of isNonWidgetTextField,

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isKeyboardFocusable):
        (WebCore::HTMLInputElement::isMouseFocusable):
        (WebCore::HTMLInputElement::focus):
        (WebCore::HTMLInputElement::updateFocusAppearance):
        (WebCore::HTMLInputElement::aboutToUnload):
        (WebCore::HTMLInputElement::dispatchFocusEvent):
        (WebCore::HTMLInputElement::dispatchBlurEvent):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isTextField):
        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLTextFieldInnerTextElement::defaultEventHandler):
        * platform/TextField.h: Removed.
        * platform/mac/TextFieldMac.mm: Removed.
        * platform/mac/WebCoreTextField.h: Removed.
        * platform/mac/WebCoreTextField.mm: Removed.
        * rendering/RenderLineEdit.cpp: Removed.
        * rendering/RenderLineEdit.h: Removed.

2006-12-16  Adele Peterson  <adele@apple.com>

        Two more files I forgot to svn add for search fields.

        * platform/SearchPopupMenu.h: Added.
        (WebCore::SearchPopupMenu::create):
        * platform/mac/SearchPopupMenuMac.mm: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::autosaveKey):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):

2006-12-16  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        * platform/PopupMenuClient.h: Added. Broken out of PopupMenu class.
        (WebCore::PopupMenuClient::~PopupMenuClient):

2006-12-16  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        WebCore part of fix for:
        <rdar://problem/4463829> Switch to use new search field implementation for <input type="search">

        * WebCore.xcodeproj/project.pbxproj: Added SearchPopupMenu.h, SearchPopupMenuMac.mm, and PopupMenuClient.h.

        Added pseudo classes and corresponding values for -webkit appearance for the cancel button and for the three types of "decoration" that 
        correspond to the different functions of the magnifier glass in the search field.  One for the button that will show and hide the
        recent searches menu.  One for decoration when the results attribute is set, but no results are saved.  And one for decoration
        when no results attribute is set.  We added these different pseudo elements so that RenderTextControl can decide which pseudo class
        is appropriate, and each theme can decide for itself which kind of image is appropriate for each function.
        
        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h: (WebCore::CSSSelector::): Added to PseudoType enum.
        * css/CSSValueKeywords.in: Added searchfield-decoration, searchfield-results-decoration, searchfield-results-button, searchfield-cancel-button values.
        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::checkOneSelector): Added cases for -webkit-search-cancel-button, 
          -webkit-search-decoration, -webkit-search-results-decoration, -webkit-search-results-button
        * rendering/RenderStyle.cpp: Addes new pseudoBits for matching pseudoIds.
        (WebCore::):
        (WebCore::pseudoBit):
        * rendering/RenderStyle.h: Added new appearance values and pseudoIds.
        (WebCore::):
        (WebCore::RenderStyle::):
        * css/html4.css: Added style for input[type=search], and the new pseudo elements.

        The structure of the shadow DOM for new search field adds an intermediate block that contains 3 inline-blocks for the magnifier, text element, and cancel button.
        Since the tree has become deeper, some editing and event code that used to check for a shadowParent, really needs to check the shadowAncestorNode.

        * editing/Editor.cpp: (WebCore::Editor::dispatchCPPEvent): Check shadowAncestorNode instead of shadowParentNode.
        * editing/Selection.cpp: (WebCore::Selection::adjustForEditableContent): ditto.
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot): ditto.
        (WebCore::lastEditablePositionBeforePositionInRoot): ditto.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): ditto.
        (WebCore::ReplaceSelectionCommand::shouldMerge): Nil check enclosingBlock call.  I ran into this while testing search fields in mixed editability.
        (WebCore::ReplaceSelectionCommand::doApply): ditto.

        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::submit): Remove use of RenderLineEdit.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectionStart): ditto.
        (WebCore::HTMLInputElement::selectionEnd): ditto.
        (WebCore::HTMLInputElement::setSelectionStart): ditto.
        (WebCore::HTMLInputElement::setSelectionEnd): ditto.
        (WebCore::HTMLInputElement::select): ditto.
        (WebCore::HTMLInputElement::setSelectionRange): ditto.
        (WebCore::HTMLInputElement::parseMappedAttribute): ditto.
        (WebCore::HTMLInputElement::createRenderer): ditto.
        (WebCore::HTMLInputElement::defaultEventHandler): ditto.
        (WebCore::HTMLInputElement::addSearchResult): Added. Calls addSearchResult on the renderer.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isNonWidgetTextField): Added case for search field.
        (WebCore::HTMLInputElement::isSearchField): Added.

        * platform/PopupMenu.h: Broke PopupMenuClient out into a separate file.
        * platform/PopupMenuClient.h: Added.
        (WebCore::PopupMenuClient::~PopupMenuClient):
        * platform/graphics/Icon.h:

        * platform/SearchPopupMenu.h: Added. Saves and loads recent search vector.
        (WebCore::SearchPopupMenu::create):
        * platform/mac/SearchPopupMenuMac.mm: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::autosaveKey):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):

        * html/HTMLTextFieldInnerElement.h: Reorganized this class.
          Added subclasses HTMLTextFieldInnerTextElement, HTMLSearchFieldResultsButtonElement, HTMLSearchFieldCancelButtonElement
        (WebCore::HTMLTextFieldInnerElement::isMouseFocusable): Added.  Returns false so setFocusNodeIfNeeded 
         will try to focus the input element instead of nodes in the shadow tree.
        (WebCore::HTMLTextFieldInnerElement::isShadowNode): Now returns whether or not a shadowParent has been specified.
         * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLTextFieldInnerTextElement::HTMLTextFieldInnerTextElement):
        (WebCore::HTMLTextFieldInnerTextElement::defaultEventHandler): Moved this from the old HTMLTextFieldInnerElement class.
        (WebCore::HTMLSearchFieldResultsButtonElement::HTMLSearchFieldResultsButtonElement):
        (WebCore::HTMLSearchFieldResultsButtonElement::defaultEventHandler): Shows and hides recent searches menu.
        (WebCore::HTMLSearchFieldCancelButtonElement::HTMLSearchFieldCancelButtonElement):
        (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler): On mouse up, clears the value from the text field.

       * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::listSize): Changed return type to unsigned.
        * rendering/RenderMenuList.h: (WebCore::RenderMenuList::valueShouldChangeOnHotTrack): Added.
        
        * WebCore.exp: Export _wkDrawTextFieldCellFocusRing.
        * platform/mac/WebCoreSystemInterface.h: Added wkDrawTextFieldCellFocusRing
        * platform/mac/WebCoreSystemInterface.mm: ditto.

        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::popupIsVisible): Added so HTMLSearchFieldResultsButtonElement knows whether or not the menu is already up.
        (WebCore::RenderTextControl::shouldPopOver): Added as a PopupClient method so the results menu shows up under the control instead of over.
        (WebCore::RenderTextControl::valueShouldChangeOnHotTrack):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl): Initialize m_placeholderIsVisible, m_searchPopup, and m_searchPopupIsVisible.
        (WebCore::RenderTextControl::~RenderTextControl): Detach the node at the top of the shadow tree (m_innerBlock for search fields, and m_innerText for other text controls).
        (WebCore::RenderTextControl::setStyle): Sets style on new elements.
        (WebCore::disabledTextColor): Added so this can be used in setPlaceholder.
        (WebCore::RenderTextControl::createInnerBlockStyle): Added.
        (WebCore::RenderTextControl::createInnerTextStyle): Added.
        (WebCore::RenderTextControl::createResultsButtonStyle): Added.
        (WebCore::RenderTextControl::createCancelButtonStyle): Added.
        (WebCore::RenderTextControl::showPlaceholderIfNeeded): Added. Shows the placeholder if there's no value and the field doesn't have focus.
        (WebCore::RenderTextControl::hidePlaceholderIfNeeded): Added. Clears the placeholder if there's a value or the field has focus. 
        (WebCore::RenderTextControl::createSubtreeIfNeeded): Added. Creates all of the shadow tree elements.
        (WebCore::RenderTextControl::updateFromElement): Calls showPlaceholderIfNeeded.
        (WebCore::RenderTextControl::visiblePositionForIndex): Renaming (m_div to m_innerText).
        (WebCore::RenderTextControl::indexForVisiblePosition): ditto.
        (WebCore::RenderTextControl::updateCancelButtonVisibility): Shows and hides cancel button based on the value of the control.
        (WebCore::RenderTextControl::subtreeHasChanged): Fires onSearch if the incremental attribute is set.
        (WebCore::RenderTextControl::text): Renaming.
        (WebCore::RenderTextControl::textWithHardLineBreaks): ditto.
        (WebCore::RenderTextControl::calcHeight): Take the size of the results button and cancel button into account when calculating height.
        (WebCore::RenderTextControl::nodeAtPoint): Act as if we've hit the shadow tree elements based on the x coordinate of the mouse event.
        (WebCore::RenderTextControl::layout): Set the height and width of the text block taking the other shadow tree elements into account.
        (WebCore::RenderTextControl::calcMinMaxWidth): Take new shadow tree elements into account when calculating width.
        (WebCore::RenderTextControl::forwardEvent): Forward events to appropriate shadow nodes.
        (WebCore::RenderTextControl::scrollWidth): Renaming.
        (WebCore::RenderTextControl::scrollHeight): ditto.
        (WebCore::RenderTextControl::scrollLeft): ditto.
        (WebCore::RenderTextControl::scrollTop): ditto.
        (WebCore::RenderTextControl::setScrollLeft): ditto.
        (WebCore::RenderTextControl::setScrollTop): ditto.
        (WebCore::RenderTextControl::autosaveName): ditto.
        (WebCore::RenderTextControl::addSearchResult): Added. Saves value to search result list.
        (WebCore::RenderTextControl::onSearch): Added. Dispatches search event.
        (WebCore::RenderTextControl::showPopup): Added. Loads searches, and displays menu.
        (WebCore::RenderTextControl::hidePopup): Added PopupClient method.
        (WebCore::RenderTextControl::valueChanged): Added PopupClient method. Interprets the selected menu item index, and either sets the value and 
         fires onSearch, or clears all recent searches for this autosave name.
        (WebCore::RenderTextControl::itemText): Added PopupClient method.
        (WebCore::RenderTextControl::itemIsEnabled): Added PopupClient method.
        (WebCore::RenderTextControl::itemStyle): ditto.
        (WebCore::RenderTextControl::clientStyle): ditto.
        (WebCore::RenderTextControl::clientDocument): ditto.
        (WebCore::RenderTextControl::clientPaddingLeft): ditto.
        (WebCore::RenderTextControl::clientPaddingRight): ditto.
        (WebCore::RenderTextControl::listSize): ditto.
        (WebCore::RenderTextControl::selectedIndex): ditto.
        (WebCore::RenderTextControl::itemIsSeparator): ditto.
        (WebCore::RenderTextControl::itemIsLabel): ditto.
        (WebCore::RenderTextControl::itemIsSelected): ditto.
        (WebCore::RenderTextControl::setTextFromItem): ditto.

        * rendering/RenderTheme.cpp: Added search field theme.
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::isControlStyled): Returns false for search fields, until we've worked out the kinks.
        (WebCore::RenderTheme::adjustSearchFieldStyle):
        (WebCore::RenderTheme::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderTheme::adjustSearchFieldDecorationStyle):
        (WebCore::RenderTheme::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderTheme::adjustSearchFieldResultsButtonStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintSearchField):
        (WebCore::RenderTheme::paintSearchFieldCancelButton):
        (WebCore::RenderTheme::paintSearchFieldDecoration):
        (WebCore::RenderTheme::paintSearchFieldResultsDecoration):
        (WebCore::RenderTheme::paintSearchFieldResultsButton):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::sizeForSystemFont): Added.  Compares style's font to systemFontSizeForControlSize to determine
         what controlSize to use after a style's font has already been initially adjusted.
        (WebCore::RenderThemeMac::controlSizeForSystemFont): Added. ditto.
        (WebCore::RenderThemeMac::paintCheckbox):
        (WebCore::RenderThemeMac::paintRadio):
        (WebCore::RenderThemeMac::menuListSizes): 
        (WebCore::RenderThemeMac::minimumMenuListSize): Uses sizeForSystemFont instead of hardcoded adjusted font sizes.
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::setSearchCellState):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::cancelButtonSizes):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::resultsButtonSizes):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeMac::paintSearchFieldDecoration):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2006-12-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam (and partially Geoff).

        Primarily, this patch gives WebCore context menus the ability to
        enable/disable and set state. It does a few other things along the
        way, though. Some of the more noticeable things:
               -Re-architects the ContextMenuItem class a bit so that the
                ownership model is a bit less confusing. ContextMenuItem is
                now *purely* a wrapper for the platformDescription. There
                are no other member variables. If you ever need the
                platformDescription outside of the MenuItem class, you have
                to call releasePlatformDescription(), which transfers
                ownership of the platformDescription to the caller.
               -Moves fontForSelection() from FrameMac into Editor.cpp.
                Turns out I don't need to use this function for my patch
                after all, but it doesn't seem like a terrible idea to move
                it anyway since we seem to be moving things from FrameMac
                into Editor these days anyway.

        * WebCore.exp:
        * editing/Editor.cpp:
        (WebCore::Editor::fontForSelection): Moved in from FrameMac.
        * editing/Editor.h: Same, and name change.
        * editing/mac/EditorMac.mm: Name change.
        * page/ContextMenuClient.h: contextMenuItemSelected() has to take a
        pointer to the parent context menu since ContextMenuItem no longer
        holds on to it.
        * page/ContextMenuController.cpp: Same.
        (WebCore::ContextMenuController::contextMenuItemSelected): Same.
        * page/mac/FrameMac.h: Move fontForSelection to Editor
        * page/mac/FrameMac.mm: Same.
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge fontForSelection:]): Account for above.
        * platform/ContextMenu.cpp:
        (WebCore::separatorItem): Can't be const because appendItem now
        expects a non-const menu item.
        (WebCore::createAndAppendFontSubMenu): Change name for clarity.
        (WebCore::createAndAppendSpellingAndGrammarSubMenu): Same.
        (WebCore::createAndAppendSpellingSubMenu): Same.
        (WebCore::createAndAppendSpeechSubMenu): Same.
        (WebCore::createAndAppendWritingDirectionSubMenu): Same.
        (WebCore::ContextMenu::populate): Account for above.
        (WebCore::triStateToBool): New helper.
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Transfers
        logic from WebHTMLView into WebCore to determine if menu items are
        enabled or disabled and to determine if they require a check.
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h: Re-factored stuff so that our only
        member variable is the platform description.
        (WebCore::): Get rid of if-def.
        * platform/cf/RetainPtr.h: Add releaseRef like in PassRefPtr.
        (WebCore::RetainPtr::releaseRef):
        * platform/mac/ContextMenuItemMac.mm: Same as .h
        (WebCore::ContextMenuItem::ContextMenuItem): Same.
        (WebCore::ContextMenuItem::releasePlatformDescription): Same.
        (WebCore::ContextMenuItem::type): Same.
        (WebCore::ContextMenuItem::platformSubMenu): Same.
        (WebCore::ContextMenuItem::setType): Same.
        (WebCore::ContextMenuItem::setTitle): Same.
        (WebCore::ContextMenuItem::setSubMenu): Same.
        (WebCore::ContextMenuItem::setChecked): Same.
        (WebCore::ContextMenuItem::setEnabled): Same.
        * platform/mac/ContextMenuMac.mm:
        (-[WebCoreMenuTarget forwardContextMenuAction:]): Don't set the
        parent menu.
        (WebCore::setMenuItemTarget):
        (WebCore::ContextMenu::appendItem): Call releasePlatformDescription
        (WebCore::ContextMenu::insertItem): Same.

2006-12-15  Darin Fisher  <darin@chromium.org>

        Reviewed by Oliver.

        Allow images to load into frames again.  Tidy up code a bit and
        add some much needed documentation.

        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedImageMIMETypes):
        (WebCore::initialiseSupportedNonImageMimeTypes):
        * platform/MimeTypeRegistry.h:

2006-12-15  Anders Carlsson  <acarlsson@apple.com>

        Fix build.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::response):
        (WebCore::DocumentLoader::setResponse):
        (WebCore::DocumentLoader::isStopping):
        (WebCore::DocumentLoader::mainDocumentError):
        * loader/DocumentLoader.h:

2006-12-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        More loader cleanup.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::isStopping):
        (WebCore::DocumentLoader::response):
        (WebCore::DocumentLoader::mainDocumentError):
        (WebCore::DocumentLoader::setResponse):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::prepareForLoadStart):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::setResponse):
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):

2006-12-15  Anders Carlsson  <acarlsson@apple.com>

        * loader/DocumentLoader.h:
        Whoops, didn't mean to commit this.
        
2006-12-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin and Brady (in no particular order).
        
        More loader cleanup.
        
        * loader/FrameLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::cancelledError):
        (WebCore::FrameLoader::fileDoesNotExistError):
        (WebCore::FrameLoader::cannotShowMIMEType):
        (WebCore::FrameLoader::interruptionForPolicyChangeError):
        * loader/mac/MainResourceLoaderMac.mm:
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:

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

        Try to fix Windows buid.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Added EventTarget.{h,cpp}

2006-12-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11610
        XMLHttpRequest.onreadystatechange doesn't provide access to the request object

        Created a separate EventTarget class, now that EventTargetNode isn't the only kind.

        Test: http/tests/xmlhttprequest/event-target.html

        * WebCore.xcodeproj/project.pbxproj: Added EventTarget.{h,cpp}

        * bindings/js/kjs_dom.cpp:
        (KJS::toJS): Added an EventTarget variant.
        * bindings/js/kjs_dom.h: Added toJS() for EventTarget; some minor style fixes.

        * bindings/objc/DOM.mm:
        (+[DOMNode _eventTargetWith:WebCore::]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        Added an EventTarget->DOMEventTarget converter in DOMNode (WebCoreInternal). 
        It only works for nodes, since we don't have an ObjC binding for XMLHttpRequest.
        Corrected spelling of internalHeaderContent.

        * dom/Event.cpp:
        (WebCore::Event::setTarget):
        * dom/Event.h:
        (WebCore::Event::target):
        (WebCore::Event::currentTarget):
        (WebCore::Event::setCurrentTarget):
        These methods now work with EventTargets instead of Nodes.

        * dom/EventTarget.cpp: Added.
        (WebCore::EventTarget::~EventTarget):
        (WebCore::EventTarget::toNode):
        (WebCore::EventTarget::toXMLHttpRequest):
        * dom/EventTarget.h: Added.
        (WebCore::EventTarget::ref):
        (WebCore::EventTarget::deref):
        Originally, my intention was to share much of the implementation between 
        EventTargetNode and XHR, but now I don't see anything substantial worth sharing.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent): Cast Node to EventTargetNode.

        * dom/EventTargetNode.h: Made EventTarget methods virtual.
        (WebCore::EventTargetNode::toNode): Added poor man's RTTI to upcast from EventTarget.
        (WebCore::EventTargetNode::refEventTarget):
        (WebCore::EventTargetNode::derefEventTarget):

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::toElement):
        (WebCore::MouseEvent::fromElement):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::mouseEventIsInThumb):
        Cast from EventTarget to Node as appropriate.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::dispatchEvent):
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        Set target and currentTarget before dispatching.

        * xml/xmlhttprequest.h: Made EventTarget methods virtual, added a bool tempEvent parameter
        to match EventTargetNode.
        (WebCore::XMLHttpRequest::toXMLHttpRequest): Added poor man's RTTI to upcast from EventTarget.
        (WebCore::XMLHttpRequest::refEventTarget):
        (WebCore::XMLHttpRequest::derefEventTarget):

2006-12-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        More loader cleanup, use KURL instead of NSURL in a couple of places.

        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::prepareForLoadStart):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::willUseArchive):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::load):

2006-12-15  Brett Wilson  <brettw@chromium.org>

        Reviewed by Darin and Alexey.

        Fix the Windows build, move various Client implementations out of
        WebCore and into WebKit.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/ChromeClientWin.h: Removed.
        * bridge/win/ContextMenuClientWin.h: Removed.
        * bridge/win/EditorClientWin.h: Removed.
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderClientWin.cpp: Removed.
        * loader/win/FrameLoaderClientWin.h: Removed.
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::DocumentLoader::URL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::createFrame):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::~Pasteboard):
        (WebCore::PolicyCheck::call):
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::ResourceHandle::loadsBlocked):
        (WebCore::ResourceLoader::cancel):

2006-12-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11842
        REGRESSION: Using Safari's snippet editor leaves applewebdata: URLs in history
        
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::URLForHistory):
        Don't return appleweburls without an unreachable url.

2006-12-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Replace more instances of NSError with ResourceError.
        
        Also remove a check for a selector that was added pre-Tiger.
        
        * WebCore.exp:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/ResourceLoader.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::setMainDocumentError):
        (WebCore::DocumentLoader::mainDocumentError):
        (WebCore::DocumentLoader::clearErrors):
        (WebCore::DocumentLoader::mainReceivedError):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::cancelMainResourceLoad):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::mainReceivedError):
        (WebCore::FrameLoader::cancelledError):
        (WebCore::FrameLoader::fileDoesNotExistError):
        (WebCore::FrameLoader::handleUnimplementablePolicy):
        (WebCore::FrameLoader::setMainDocumentError):
        (WebCore::FrameLoader::mainReceivedCompleteError):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::cancelledError):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::didCancel):

2006-12-15  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11824
        CSSStyleSheet.title property is always null

        Set title on the stylesheet just after creating it, for the HTML
        elements <link> and <style>.

        * css/StyleSheet.h:
        (WebCore::StyleSheet::setTitle):
        * dom/Element.cpp:
        (WebCore::Element::title):
        * dom/Element.h:
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::childrenChanged):
        * dom/StyleElement.h:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseMappedAttribute):
        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::setTitle):
        (WebCore::SVGStyleElement::parseMappedAttribute):
        * ksvg2/svg/SVGStyleElement.h:

2006-12-15  Lars Knoll  <lars@trolltech.com>

        Reviewed by Zack

        Fix compilation.

        * loader/SubresourceLoader.h:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):

2006-12-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Use char* pointer + length instead of NSData in a bunch of places.

        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/SubresourceLoader.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::commitLoad):
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::receivedData):
        (WebCore::FrameLoader::committedLoad):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::addData):
        (WebCore::MainResourceLoader::didReceiveData):
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::didReceiveData):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willStopBufferingData):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):

2006-12-14  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        Added PopupMenuClient class so the PopupMenu class no longer needs to know
        about the RenderMenuList or the DOM.

        * platform/PopupMenu.h:
        (WebCore::PopupMenuClient::~PopupMenuClient):
        (WebCore::PopupMenu::create): Made this protected so PopupMenu can be subclassed.
        (WebCore::PopupMenu::disconnectClient): Renamed from disconnectMenuList.
        (WebCore::PopupMenu::client): Added.
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::PopupMenu): Created using PopupMenuClient instead of RenderMenuList.
        (WebCore::PopupMenu::populate): Asks the client for info about the list items instead of looking at the DOM or the renderer. 
        (WebCore::PopupMenu::show): ditto.
        (WebCore::PopupMenu::hide): ditto.
        * rendering/RenderMenuList.h: Now also inherits from PopupMenuClient.
        (WebCore::RenderMenuList::shouldPopOver): Added.  Tells the popup whether the menu should pop over the client, or under.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::~RenderMenuList): Calls disconnectClient().
        (WebCore::RenderMenuList::calcMinMaxWidth): Removed unnecessary (and harmful) call to updateFromElement. updateFromElmeent
         can add children, and you don't want to do that in the middle of calculating width.
        (WebCore::RenderMenuList::itemText): Added PopupClient method to provide information about the items in the menu list.
        (WebCore::RenderMenuList::itemIsEnabled): ditto.
        (WebCore::RenderMenuList::itemStyle): ditto.
        (WebCore::RenderMenuList::clientStyle): ditto.
        (WebCore::RenderMenuList::clientDocument): ditto.
        (WebCore::RenderMenuList::clientPaddingLeft): ditto.
        (WebCore::RenderMenuList::clientPaddingRight): ditto.
        (WebCore::RenderMenuList::listSize): ditto.
        (WebCore::RenderMenuList::selectedIndex): ditto.
        (WebCore::RenderMenuList::itemIsSeparator): ditto.
        (WebCore::RenderMenuList::itemIsLabel): ditto.
        (WebCore::RenderMenuList::itemIsSelected): ditto.
        (WebCore::RenderMenuList::setTextFromItem): ditto.

2006-12-14  Geoffrey Garen  <ggaren@apple.com>

        Fixed <rdar://problem/4882713> GMAIL (REGRESSION): Can't apply font style, 
        foreground or background to selected text
        
        Also <rdar://problem/4883751> REGRESSION: Caret fails to insert itself 
        automatically in a new note window
        
        I'm rolling out my change to move focus to the page level because it caused
        too many unexpected and bizarre regressions. Our code relies on focus
        being per-document so that it can make focus changes that are effectively
        no-ops, and so that it can conflate focus and selection in some cases (a bad 
        idea, since they're not the same).
        
        Hopefully we can revisit this, along with hover and active, in the future.

        * dom/Document.cpp:
        (WebCore::widgetForNode):
        (WebCore::relinquishesEditingFocus):
        (WebCore::acceptsEditingFocus):
        (WebCore::clearSelectionIfNeeded):
        (WebCore::Document::removedLastRef):
        (WebCore::Document::detach):
        (WebCore::Document::focusedNodeDetached):
        (WebCore::Document::setFocusedNode):
        * dom/Document.h:
        (WebCore::Document::focusedNode):
        * page/FocusController.cpp:
        * page/FocusController.h:

2006-12-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - fix failing drag & drop layout tests

        * platform/mac/KURLMac.mm:
        (WebCore::KURL::getNSURL): Turn empty KURL into empty NSURL, but null KURL into
        nil.

2006-12-14  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * loader/MainResourceLoader.h:

2006-12-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John.

        Convert a bunch of NSErrors to ResourceError.
        
        Make the ResourceError accessor functions const.
        
        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::interruptionForPolicyChangeError):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::interruptionForPolicyChangeError):
        (WebCore::MainResourceLoader::didFail):
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didFail):
        (WebCore::NetscapePlugInStreamLoader::didCancel):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::didCancel):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * platform/network/ResourceError.h:
        (WebCore::ResourceError::domain):
        (WebCore::ResourceError::errorCode):
        (WebCore::ResourceError::failingURL):
        (WebCore::ResourceError::localizedDescription):
        (WebCore::ResourceError::unpackPlatformErrorIfNeeded):

2006-12-14  George Staikos  <staikos@kde.org>

        Link, after the last loader changes.  Please update this directory with stubs when modifying the loader.

        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):

2006-12-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4866671>
        CrashTracer: 1 crashes in Mail after deleting a list item at WebCore::DeleteSelectionCommand::doApply()
        
        Don't allow VisiblePositions inside -webkit-user-select:none regions.
        Renamed inRenderedContent to isCandidate.

        * dom/Document.cpp:
        (WebCore::Document::updateSelection):
        * dom/Position.cpp:
        (WebCore::Position::previousCharacterPosition):
        (WebCore::Position::nextCharacterPosition):
        (WebCore::nodeIsUserSelectNone):
        (WebCore::Position::isCandidate):
        (WebCore::Position::rendersInDifferentPosition):
        * dom/Position.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition):
        * editing/htmlediting.cpp:
        (WebCore::nextCandidate):
        (WebCore::nextVisuallyDistinctCandidate):
        (WebCore::previousCandidate):
        (WebCore::previousVisuallyDistinctCandidate):
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        (WebCore::startOfParagraph):
        * page/Frame.cpp:
        (WebCore::Frame::styleForSelectionStart):

2006-12-14  David Hyatt  <hyatt@apple.com>

        Get rid of the containsStart check and just rely on the selectionState
        bits.  This allows selection gap filling to behave properly in the presence
        of inline blocks and inline tables on lines when the selection originates
        inside the inline block.

        Reviewed by ggaren

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillInlineSelectionGaps):

2006-12-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John.
        
        General loader cleanup, convert NSURLResponse to ResourceResponse in some places.
        
        * loader/DocumentLoader.h:
        * loader/SubresourceLoader.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::addResponse):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::opened):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::create):

2006-12-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Add loadResourceSynchronously to ResourceHandle and have FrameLoader use it instead of
        calling NSURLConnection directly.

        Add an isNull flag to ResourceError so we can convert correctly between nil NSErrors and ResourceErrors.

        Get rid of ServeSynchronousRequest and use the loader instead.
        
        * WebCore.exp:
        * dom/XMLTokenizer.cpp:
        (WebCore::openFunc):
        * loader/FrameLoader.h:
        * loader/LoaderFunctions.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::canLoad):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/mac/LoaderFunctionsMac.mm:
        * platform/network/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::isNull):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceRequest.cpp:
        (WebCore::ResourceRequest::isConditional):
        * platform/network/ResourceRequest.h:
        * platform/network/mac/ResourceErrorMac.mm:
        (-[NSError WebCore]):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2006-12-14  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin.

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

        Fix fundamental problems with JS SVG POD types.
        (currently: FloatPoint/FloatRect/AffineTransform)

        This doesn't affect any testcase, but when I wrote my SVGLength* -> SVGLength
        the problem got visible (aka. baseVal-animVal-equality.svg broke and more)
        With that patch applied first, none breaks - so SVG POD JS wrappers do work now.

        In detail:
        - Fix setBaseValue() confusion. ONLY use the hash map in SVGDocumentExtension
          when we're animating a property. Add "start##Property" / "stop##Property" methods
          which take care, of moving "animVal" -> "baseVal" hash, and back after animation stopped.

          These new methods are not yet used anywhere, but finally the "animated property" system is complete.

        - Offer a new JSSVGPODTypeWrapper class, wrapping around non-pointer POD types like FloatPoint etc.
          to be used in the generated JS bindings. Currently if you modified ie the "x" property of a SVGPoint
          from JS, you only actually modified the "m_x" object stored in the JSSVGPoint wrapper.

          If you take SVGLength as example (more frequently used in the JS SVG bindings, that's why I'm using it)
          "document.rootElement.width.baseVal.value = 100;" only modified the "SVGLength m_impl" object stored in
          JSSVGLength, but the "SVGSVGElement" didn't notice it width got changed. The new commitChanges() logic
          fixes these problems.

        It's quite hard too describe the actual changes, if one is not familiar with the code. This is the result
        of endless discussions with Eric Seidel, and we hope this is a decent solution addressing all issues.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPODTypeWrapper.h: Added.
        (WebCore::JSSVGPODTypeWrapper::JSSVGPODTypeWrapper):
        (WebCore::JSSVGPODTypeWrapper::~JSSVGPODTypeWrapper):
        (WebCore::JSSVGPODTypeWrapper::operator PODType&):
        (WebCore::JSSVGPODTypeWrapper::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreator::JSSVGPODTypeWrapperCreator):
        (WebCore::JSSVGPODTypeWrapperCreator::~JSSVGPODTypeWrapperCreator):
        (WebCore::JSSVGPODTypeWrapperCreator::commitChange):
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::removeBaseValue):
        * ksvg2/svg/SVGElement.h:

2006-12-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11828
        Fix a leak of NSURLRequest on each update - RetainPtr retains the object itself.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2006-12-14  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack Rusin.

        * WebCore.pro: Clean up the xpath grammar generation rule.

2006-12-14  Zack Rusin  <zack@kde.org>

        Make it link with temporary stubs.

        * loader/qt/DocumentLoaderQt.cpp:
        (WebCore::DocumentLoader::originalRequest):
        (WebCore::DocumentLoader::originalRequestCopy):
        (WebCore::DocumentLoader::request):
        (WebCore::DocumentLoader::initialRequest):
        (WebCore::DocumentLoader::actualRequest):
        (WebCore::DocumentLoader::URL):

2006-12-14  Zack Rusin  <zack@kde.org>

        Compilation fixes for the Qt port after last nights
        changes.

        * loader/qt/DocumentLoaderQt.cpp:
        (WebCore::DocumentLoader::URL):
        (WebCore::DocumentLoader::unreachableURL):
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::PolicyCheck::call):
        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::setHTTPReferrer):

2006-12-14  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=11726
        SVG Image do not take into account clip/overflow when hit testing

        Take into account the overflowRect when hit-testing <svg> container.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::viewportTransform):
        (WebCore::RenderSVGContainer::nodeAtPoint):
        * rendering/RenderSVGContainer.h:

2006-12-13  David Hyatt  <hyatt@apple.com>

        Fix for bug 11825, dragging elements via -khtml-user-drag is broken (affects Dashboard).  Make sure
        to clear the paintingRoot properly when recurring into children.  It would be nice to find a design
        that prevented this mistake from being made and didn't require explicit clearing of the root.

        Reviewed by olliej

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):

2006-12-13  Anders Carlsson  <acarlsson@apple.com>

        * loader/FrameLoader.h:
        id is mac-only.
        
2006-12-13  Brady Eidson  <beidson@apple.com>

        Implicitly reviewed by Darin, Hyatt, Maciej, and others!

        Fixes a document tear down crash.
        Changes a few long standing assertions to our new style

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::topDocument):

2006-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - converted many places to use ResourceRequest instead of NSURLRequest

        * WebCore.exp:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopPolicyCheck):
        * loader/FrameLoader.h:
        (WebCore::PolicyCheck::request):
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::originalRequest):
        (WebCore::DocumentLoader::originalRequestCopy):
        (WebCore::DocumentLoader::request):
        (WebCore::DocumentLoader::initialRequest):
        (WebCore::DocumentLoader::actualRequest):
        (WebCore::DocumentLoader::URL):
        (WebCore::DocumentLoader::unreachableURL):
        (WebCore::DocumentLoader::replaceRequestURLForAnchorScroll):
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::setLastCheckedRequest):
        (WebCore::DocumentLoader::lastCheckedRequest):
        (WebCore::DocumentLoader::URLForHistory):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::startLoadingMainResource):
        (WebCore::FrameLoader::applyUserAgent):
        (WebCore::FrameLoader::originalRequest):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::callContinueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::initialRequest):
        (WebCore::FrameLoader::setRequest):
        (WebCore::FrameLoader::checkNavigationPolicy):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::checkNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        (WebCore::FrameLoader::callContinueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::callContinueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::isReloading):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::loadEmptyDocumentSynchronously):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::originalRequestURL):
        (WebCore::PolicyCheck::set):
        (WebCore::PolicyCheck::call):
        (WebCore::PolicyCheck::clearRequest):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::callContinueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::isPostOrRedirectAfterPost):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::create):
        * loader/mac/WebDataProtocol.h:
        * loader/mac/WebDataProtocol.mm:
        * platform/KURL.cpp:
        (WebCore::operator!=):
        * platform/KURL.h:
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::getNSURL):
        * platform/network/FormData.h:
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/network/ResourceRequest.cpp:
        (WebCore::operator==):
        * platform/network/ResourceRequest.h:
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2006-12-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Dave Hyatt.
        
        Beefed up FocusController to handle frame focus. Changed implementors to
        use FocusController, rather than the widget hierarchy, to focus frames.

        (WebCore::FocusController::focusedNode): Made a minor change to focus a frame
        before focusing the element inside of it. This matches FF.
        (WebCore::FocusController::focusedFrame):
        * platform/Widget.h:

2006-12-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele

        <rdar://problem/4818145>
        Cannot setSelectedDOMRange to non-editable island unless it has editable content on both sides
        
        There are editable positions before/after a "non-editable island" if its 
        a table, but the code in canonicalPosition was not using 
        editableRootForPosition to find root editable elements.
        
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition): Use editableRootForPosition
        to fix the table case.

2006-12-13  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Added missing forwarding headers.        

        * ForwardingHeaders/kjs/value.h: Added.
        * ForwardingHeaders/wtf/HashTable.h: Added.

2006-12-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej, Zack.

        Make the Qt cbuild compile again.

        * WebCore.pro:
        * loader/qt/ResourceLoaderQt.cpp:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadsBlocked):
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClient::openURL):
        (WebCore::FrameQtClient::submitForm):

2006-12-12  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Changed #import to #include to match the rest of our ForwardingHeaders.

        * ForwardingHeaders/wtf/StringExtras.h:

2006-12-12  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4757667>
        GoogleDocs: Style menu does not open

        * bindings/js/kjs_window.cpp:
        (KJS::Selection::getValueProperty): Added rangeCount.
        * bindings/js/kjs_window.h:
        (KJS::Selection::):
        * editing/SelectionController.h:
        (WebCore::SelectionController::rangeCount): Added.

2006-12-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        * bindings/js/JSSVGMatrixCustom.cpp:
        added #ifdef SVG_SUPPORT

2006-12-12  Anders Carlsson  <acarlsson@apple.com>

        Suggested by Darin.

        * loader/ResourceLoader.cpp:
        Move down include of ResourceHandle.h.

2006-12-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben, Dave Hyatt, Darin Adler.
        
        Factored focus control into a FocusController class. I inted to use this
        class for handling window active state and the focused frame, as well.

        Layout tests pass.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::view):
        (WebCore::Document::page): New helper function.
        * dom/Document.h: Moved setters before getters.
        (WebCore::Document::hoverNode):
        (WebCore::Document::activeNode):
        * dom/Node.cpp:
        (WebCore::Node::detach): Use the FocusController.
        * page/FocusController.cpp: Added.
        (WebCore::shouldFocus): renamed and refactored this helper function.
        (WebCore::shouldUnfocus): ditto.
        * page/FocusController.h: Added.

2006-12-12  Anders Carlsson  <acarlsson@apple.com>

        Rubber Stamped by Geoff.

        * platform/Base64.cpp:
        * platform/Base64.h:
        Put functions inside of the WebCore namespace.

2006-12-12  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the non-Mac builds.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFail):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h:

2006-12-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Turn ResourceLoader into a ResourceHandleClient and stop using NSURLConnection in the loader.

        * WebCore.exp:
        Add new methods needed by WebKit.
        
        * WebCore.xcodeproj/project.pbxproj:
        Make ResourceHandle.h a private header.
        
        * loader/FrameLoaderClient.h:
        Change the download method to take a ResourceHandle instead of an NSURLConnection.
        
        * loader/MainResourceLoader.h:
        Get rid of the proxy instance variable, that's handled by ResourceHandlw now.
        
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::willStopBufferingData):
        (WebCore::ResourceLoader::willCacheResponse):
        (WebCore::ResourceLoader::receivedCredential):
        (WebCore::ResourceLoader::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceLoader::receivedCancellation):
        (WebCore::ResourceLoader::handle):
        * loader/SubresourceLoader.h:
        Make ResourceLoader a ResourceHandleClient, moving the methods from SubresourceLoader.
        
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        Use a ResourceHandle instead of an NSURLConnection.
        
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::setDefersLoading):
        (WebCore::ResourceLoader::resourceData):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFail):
        Remove the WebCoreResourceLoaderAsDelegate class, use a ResourceHandle instead of an NSURLConnection.
        
        * loader/mac/SubresourceLoaderMac.mm:
        Remove ResourceHandleClient methods.
        
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        Add an extra argument denoting whether this ResourceHandle can possibly be "converted" into one used for downloads.
        
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::releaseProxy):
        (WebCore::ResourceHandle::connection):
        New methods for creating a NSURLConnectionDelegateProxy which is used when creating a NSURLDownload from an existing
        connection.

2006-12-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::load):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        Move the didTellBridgeAboutLoad call to SubresourceLoader in preparation for getting rid of
        the DocLoader parameter to ResourceHandle::create.

2006-12-12  George Staikos  <staikos@kde.org>

        Make the last checkin compile.

        * WebCore.pro:
        * ksvg2/svg/SVGTransform.cpp:

2006-12-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam Weinig & Rob Buis.

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

        Remove SVGMatrix, replace it by AffineTransform usage everywhere.
        Changed AffineTransform API to be able to be used within generation
        (m11() -> a(), m12() -> b(), ...). Add some methods needed for SVG.

        The actual SVGMatrix -> AffineTransformation patch has been created
        by Rob - I just adapted it to the autogenerated POD style.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGMatrixCustom.cpp: Added.
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/objc/DOMInternal.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        * ksvg2/misc/SVGImageLoader.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::calculateRotationFromMatrix):
        (WebCore::SVGAnimateTransformElement::initialMatrix):
        (WebCore::SVGAnimateTransformElement::transformMatrix):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGLengthList.cpp:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getCTM):
        (WebCore::SVGLocatable::getScreenCTM):
        (WebCore::SVGLocatable::getTransformToElement):
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMatrix.cpp: Removed.
        * ksvg2/svg/SVGMatrix.h: Removed.
        * ksvg2/svg/SVGMatrix.idl:
        * ksvg2/svg/SVGNumberList.cpp:
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::notifyAttributeChange):
        (WebCore::SVGPatternElement::getCTM):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPoint.idl:
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::getCTM):
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::createSVGMatrix):
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledLocatableElement.cpp:
        (WebCore::SVGStyledLocatableElement::getCTM):
        (WebCore::SVGStyledLocatableElement::getScreenCTM):
        * ksvg2/svg/SVGStyledLocatableElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::localMatrix):
        (WebCore::SVGStyledTransformableElement::getCTM):
        (WebCore::SVGStyledTransformableElement::getScreenCTM):
        (WebCore::SVGStyledTransformableElement::updateLocalTransform):
        (WebCore::SVGStyledTransformableElement::attach):
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::localMatrix):
        (WebCore::SVGTextElement::updateLocalTransform):
        (WebCore::SVGTextElement::attach):
        (WebCore::SVGTextElement::getScreenCTM):
        (WebCore::SVGTextElement::getCTM):
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTransform.cpp:
        (SVGTransform::SVGTransform):
        (SVGTransform::matrix):
        (SVGTransform::setMatrix):
        (SVGTransform::setTranslate):
        (SVGTransform::setScale):
        (SVGTransform::setRotate):
        (SVGTransform::setSkewX):
        (SVGTransform::setSkewY):
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::createSVGTransformFromMatrix):
        (SVGTransformList::concatenate):
        * ksvg2/svg/SVGTransformList.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::getCTM):
        (WebCore::SVGTransformable::getScreenCTM):
        (WebCore::SVGTransformable::parseTransformAttribute):
        * ksvg2/svg/SVGTransformable.h:
        * platform/graphics/AffineTransform.cpp:
        (WebCore::AffineTransform::multiply):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::scaleNonUniform):
        (WebCore::AffineTransform::rotateFromVector):
        (WebCore::AffineTransform::flipX):
        (WebCore::AffineTransform::flipY):
        (WebCore::AffineTransform::skewX):
        (WebCore::AffineTransform::skewY):
        * platform/graphics/AffineTransform.h:
        * platform/graphics/cairo/AffineTransformCairo.cpp:
        (WebCore::AffineTransform::a):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::b):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::c):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::d):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::e):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::f):
        (WebCore::AffineTransform::setF):
        (WebCore::AffineTransform::inverse):
        * platform/graphics/cg/AffineTransformCG.cpp:
        (WebCore::AffineTransform::a):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::b):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::c):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::d):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::e):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::f):
        (WebCore::AffineTransform::setF):
        (WebCore::AffineTransform::inverse):
        * platform/graphics/qt/AffineTransformQt.cpp:
        (WebCore::AffineTransform::a):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::b):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::c):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::d):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::e):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::f):
        (WebCore::AffineTransform::setF):
        (WebCore::AffineTransform::inverse):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint):
        (WebCore::RenderForeignObject::nodeAtPoint):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::mapAbsolutePointToLocal):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::nodeAtPoint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::computeAbsoluteRepaintRect):
        (WebCore::RenderSVGText::nodeAtPoint):
        (WebCore::RenderSVGText::paint):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):

2006-12-12  George Staikos  <staikos@kde.org>

        Reviewed by Alexey.

        Fix the Qt build again.

        * WebCore.pro:
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::createFrame):
        (WebCore::FrameLoader::load):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::clear):

2006-12-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Moved focus control to the page level. Fixed a minor bug where a node
        would retain keyboard focus even when removed from the document.
        
        We should probably move this, along with hover and active, into a separate
        FocusController. But I'm too tired right now.

        * dom/Document.cpp: Migrated code to Page
        (WebCore::Document::removedLastRef):
        (WebCore::Document::detach):
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::focusedNode):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::detach): Clear ourselves from keyboard focus. This fixes
        the minor bug and was also necessary to prevent regressions caused by hanging
        on to a focused node after the document was replaced.
        * dom/Node.h:
        (WebCore::Node::inDetach):
        * page/Page.cpp: Migrated code from Document
        (WebCore::shouldAcquireEditingFocus):
        (WebCore::shouldRelinquishEditingFocus):
        (WebCore::clearSelectionIfNeeded):
        (WebCore::widgetForNode):
        (WebCore::Page::setFocusedNode):
        * page/Page.h:
        (WebCore::Page::focusedNode):

2006-12-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11053
        XMLHttpRequest should be an EventTarget

        Test: http/tests/xmlhttprequest/event-target.html

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::mark):
        (KJS::JSXMLHttpRequest::~JSXMLHttpRequest):
        (KJS::JSXMLHttpRequestProtoFunc::callAsFunction):
        * bindings/js/JSXMLHttpRequest.h:
        (KJS::JSXMLHttpRequest::):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::addEventListener):
        (WebCore::XMLHttpRequest::removeEventListener):
        (WebCore::XMLHttpRequest::dispatchEvent):
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        * xml/xmlhttprequest.h:
        (WebCore::XMLHttpRequest::eventListeners):
        Implement EventTarget methods (except for NS variations, which Firefox doesn't have either).

2006-12-11  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11809
          fast/dom/gc-8.html crash in alternate-thread marking code in ScriptInterpreter

        DocumentType objects were getting filed under the wrong document in the
        DOM objects structure.

        * bindings/js/kjs_binding.h: Added a destructor for debugging purposes only.
        * bindings/js/kjs_binding.cpp:
        (KJS::wrapperSet): Added. Set of outstanding wrappers for debugging.
        (KJS::addWrapper): Added.
        (KJS::removeWrapper): Added.
        (KJS::removeWrappers): Added.
        (KJS::DOMObject::~DOMObject): Added. Asserts that there is no outstanding reference
        to this wrapper since it's being destroyed.
        (KJS::ScriptInterpreter::putDOMObject): Added a call to ADD_WRAPPER.
        (KJS::ScriptInterpreter::forgetDOMObject): Added a call to REMOVE_WRAPPER.
        (KJS::ScriptInterpreter::forgetDOMNodeForDocument): Added a call to REMOVE_WRAPPER.
        (KJS::ScriptInterpreter::putDOMNodeForDocument): Added a call to ADD_WRAPPER.
        (KJS::ScriptInterpreter::forgetAllDOMNodesForDocument): Added a call to REMOVE_WRAPPERS.
        (KJS::ScriptInterpreter::updateDOMNodeDocument): Added calls to REMOVE_WRAPPER and
        ADD_WRAPPER so the out-of-order transaction doesn't upset the assertions in the functions
        we're calling. Another solution would be to reorder the two, but I think that would
        create a race where another thread could garbage collect after the forget but before the put.
        (KJS::ScriptInterpreter::wasRunByUserGesture): Tweaked formatting.

        * dom/Document.cpp: (WebCore::Document::adoptNode): Removed call to updateDOMNodeDocument
        since setDocument now takes care of that.
        * dom/Node.cpp:
        (WebCore::Node::setDocument): Added call to updateDOMNodeDocument here.
        (WebCore::Node::checkAddChild): Removed call to updateDOMNodeDocument since setDocument
        now takes care of that.

2006-12-11  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9673
        Add support for window.atob() and window.btoa()

        * WebCore.xcodeproj/project.pbxproj: Added Base64.{h,cpp}
        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * platform/Base64.cpp: Added.
        (base64Encode):
        (base64Decode):
        * platform/Base64.h: Added.
        * ForwardingHeaders/wtf/StringExtras.h: Added.
        * platform/DeprecatedString.cpp: Use strncasecmp from StringExtras.

2006-12-11  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - did some of the Mac-specific file moves mentioned in my recent mail to the WebKit list

        * WebCore.xcodeproj/project.pbxproj: Updated project for file moves.

        * bridge/mac/FrameMac.h: Moved to page/mac.
        * bridge/mac/FrameMac.mm: Ditto.
        * bridge/mac/WebCoreFrameBridge.h: Ditto.
        * bridge/mac/WebCoreFrameBridge.mm: Ditto.
        * bridge/mac/WebCoreFrameView.h: Ditto.
        * bridge/mac/WebCoreViewFactory.h: Ditto.
        * bridge/mac/WebCoreViewFactory.m: Ditto.
        * bridge/mac/WebDashboardRegion.h: Ditto.
        * bridge/mac/WebDashboardRegion.m: Ditto.

        * bridge/mac/WebCoreKeyboardAccess.h: Moved to page/mac,
        renamed WebCoreKeyboardUIMode.h, and made a C++ header.

        * page/EventHandler.h: Updated for change to WebCoreKeyboardAccess.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::tabsToLinks): Ditto.
        (WebCore::EventHandler::tabsToAllControls): Ditto.
        (WebCore::EventHandler::keyboardUIMode): Ditto.

2006-12-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Primarily, this patch implements/hooks-up actions for the sub-menu
        items in WebCore context menus. I fixed a few other things along
        the way too:
                -Made BUILDING_ON_TIGER ifdef work within C++ as well as
                 Obj-C
                -Fixed bug where we would throw and Obj-C exception and
                 fail to pop up menus with more than one separator item.
                -Re-named some of the spelling/grammar tags since Tiger and
                 Leopard share more of the actions than initially
                 anticipated.

        * WebCorePrefix.h: Make BUILDING_ON_TIGER available to C++
        * bridge/EditorClient.h: New functions to toggle
        spelling/grammar checking.
        * editing/Editor.cpp:
        (WebCore::Editor::toggleContinuousSpellChecking): Call into client.
        (WebCore::Editor::toggleGrammarChecking): Same.
        (WebCore::Editor::toggleBold): call execToggleBold()
        (WebCore::Editor::toggleUnderline): Create appropriate underline
        style and apply to selection.
        (WebCore::Editor::setBaseWritingDirection): Create appropriate
        writing direction and apply to selection.
        * editing/Editor.h:
        * editing/mac/EditorMac.mm: New functions to show spelling guesses,
        fonts, styles, and color panels.
        * page/ContextMenuClient.h: New functions for the speech sub-menu.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Fill in
        editing sub-menu actions.
        * platform/ContextMenu.cpp:
        (WebCore::separatorItem): Helper function to create a separator 
        item.
        (WebCore::createFontSubMenu): Put very mac-specific things within a
        platform ifdef.
        (WebCore::createSpellingAndGrammarSubMenu): Re-named some of the
        spelling sub-menu tags.
        (WebCore::createSpellingSubMenu): Same.
        (WebCore::ContextMenu::populate): We can't share the separator
        item. When we do, menus with more than one separator throw and obj-
        c exception and fail to pop-up.
        * platform/ContextMenuItem.h:
        (WebCore::): Re-named some of the spelling sub-menu tags.

2006-12-11  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff, Adam.

        Switch to use the Editor for copying URLs.  Also some Pasteboard and PlatformMouseEvent cleanup.

        All layout tests pass as they would without this patch. 

        * WebCore.exp:
        added Editor::copyURL to be called from WebKit
        
        * editing/Editor.cpp:
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        Pasteboard::clearTypes() changed to clear()

        (WebCore::Editor::writeSelectionToPasteboard):        
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        Changed signature of writeSelection to take raw pointer instead of PassRefPtr

        (WebCore::Editor::copyURL):
        * editing/Editor.h:
        Added copyURL.
        
        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        Removed copyLinkToClipboard
        
        * platform/KURL.cpp:
        (WebCore::KURL::lastPathComponent):
        * platform/KURL.h:
        Added lastPathComponent. 
        
        * platform/Pasteboard.h:
        Changed some function names.
        Moved some functions out of class to static.
        
        * platform/PlatformMouseEvent.h:
        (WebCore::):
        Removed MouseEventType enum, added NoButton to MouseButton without disturbing other button values.
        
        * platform/mac/PasteboardMac.mm:
        Added writeURL, and moved some things around
        
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Add some calls necessary for Pasteboard::writeURL to work

2006-12-11  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - http://bugs.webkit.org/show_bug.cgi?id=11794
          fix lifetime problems affecting Frame's ownerElement pointer

        * CMakeLists.txt:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Updated for new source files.

        * WebCore.exp: Updated for changes to entry point names.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::FrameMac):
        * bridge/win/FrameWin.h:
        * bridge/win/FrameWin.cpp: (WebCore::FrameWin::FrameWin):
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQt.cpp: (WebCore::FrameQt::FrameQt):
        Updated owner element type to HTMLFrameOwnerElement.

        * bridge/mac/WebCoreFrameBridge.h: Removed non-C++ case since we don't
        use that any more. Updated owner element type to HTMLFrameOwnerElement.

        * dom/Document.cpp: Added include so that the ownerElement function can
        compile (since it downcasts an HTMLFrameOwnerElement to an Element).

        * html/HTMLFrameElement.cpp:
        (WebCore::containingFrameSetElement): Moved this function in here; it
        doesn't need to be a member function.
        (WebCore::HTMLFrameElement::attach): Updated to call this.

        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase): Inherit from
        HTMLFrameOwnerElement. Removed contentFrame, contentDocument, and
        containingFrameSetElement. Removed friend classes.

        * html/HTMLFrameOwnerElement.h: Added.
        * html/HTMLFrameOwnerElement.cpp: Added.

        * html/HTMLEmbedElement.h:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLObjectElement.h:
        * html/HTMLObjectElement.cpp:
        Remove now-unneeded contentDocument functions.

        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement): Inherit from
        HTMLFrameOwnerElement.

        * loader/FormState.h:
        * loader/FormState.cpp: Use HTMLFormElement instead of just Element.

        * loader/FrameLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame): Use HTMLFormElement.
        (WebCore::FrameLoader::loadSubframe): Ditto.
        (WebCore::FrameLoader::requestObject): Don't pass an element parameter
        to shouldUsePlugin, and remove now-unneeded type casts.
        (WebCore::FrameLoader::shouldUsePlugin): Removed unneeded element parameter.
        (WebCore::FrameLoader::handleFallbackContent): Use HTMLFrameOwnerElement.
        (WebCore::FrameLoader::updateBaseURLForEmptyDocument): Ditto.
        (WebCore::FrameLoader::isHostedByObjectElement): Ditto.
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::load): Use HTMLFormElement.
        (WebCore::FrameLoader::post): Ditto.
        (WebCore::FrameLoader::createFrame): Use HTMLFrameOwnerElement.

        * page/Frame.h:
        * page/FramePrivate.h:
        * page/Frame.cpp:
        (WebCore::parentFromOwnerElement): Use HTMLFrameOwnerElement.
        (WebCore::Frame::Frame): Ditto. Also set m_contentFrame on the owner element.
        (WebCore::Frame::ownerElement): Ditto.
        (WebCore::Frame::ownerRenderer): Ditto.
        (WebCore::Frame::disconnectOwnerElement): Clear m_contentFrame on the owner
        element before disconnecting it.
        (WebCore::FramePrivate::FramePrivate): Use HTMLFrameOwnerElement.

        * page/mac/EventHandlerMac.mm: Include HTMLFrameOwnerElement.h so that
        the code here will compile (no code changes needed).

        * rendering/RenderFrame.cpp: (WebCore::RenderFrame::viewCleared):
        Updated so that RenderFrame doesn't need to be a friend of HTMLFrameElementBase.

        * rendering/RenderPart.h:
        * rendering/RenderPart.cpp: (WebCore::RenderPart::RenderPart):
        Use HTMLFrameOwnerElement.

        * rendering/RenderPartObject.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::RenderPartObject): Use HTMLFrameOwnerElement.
        (WebCore::RenderPartObject::viewCleared): Updated so that RenderFrame doesn't
        need to be a friend of HTMLFrameElementBase.

        - other changes

        * platform/network/ResourceHandleInternal.h: Added Noncopyable and
        fixed indentation.

2006-12-11  David Hyatt  <hyatt@apple.com>

        Fix failing layout test.  Remove WTF::Unicode::isSpace and just revert
        the caller to the old behavior.

        Reviewed by darin

        * platform/StringImpl.cpp:
        (WebCore::isSpace):

2006-12-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=11807
        Merge EventHandler::m_bMousePressed and EventHandler::m_mousePressed

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::autoscrollTimerFired):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::mouseMoved):
        Merge EventHandler::m_bMousePressed and EventHandler::m_mousePressed

        (WebCore::EventHandler::lastEventIsMouseUp):
        Check that the "new" event is newer than the "old" one - that's not always the case 
        when running in DRT, as [NSApp currentEvent] isn't updated by eventSender.

2006-12-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam Weinig.

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

        Autogenerate POD types for ObjC/JS.

        This removes the need for the hand-written JSSVG*, DOMSVG* wrappers
        in bindings/js, bindings/objc. Makes it much easier to convert more
        SVG types to POD types (ie. SVGMatrix* -> AffineTransform etc.)

        Affected test: svg/custom/SVGPoint-matrixTransform.svg

        It's failing with this patch, as the SVGPoint matrixTransform() function
        got disabled, until the SVGMatrix -> AffineTransform transition patch
        is landed. Otherwhise we'd need to add special cases to both CodeGeneratorJS/ObjC.pm
        which would be a waste of time, as SVGMatrix is about to die.

        Temporarily updating layout test result, as suggested by John Sullivan, so
        no-one notices that SVGPoint-matrixTransform.svg actually fails right now.

        Expect that to be fixed again in the next hour(s).

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGNumber.cpp: Removed.
        * bindings/js/JSSVGNumber.h: Removed.
        * bindings/js/JSSVGPoint.cpp: Removed.
        * bindings/js/JSSVGPoint.h: Removed.
        * bindings/js/JSSVGRect.cpp: Removed.
        * bindings/js/JSSVGRect.h: Removed.
        * bindings/objc/DOMSVGNumber.mm: Removed.
        * bindings/objc/DOMSVGPoint.mm: Removed.
        * bindings/objc/DOMSVGRect.mm: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * ksvg2/svg/SVGNumber.idl:
        * ksvg2/svg/SVGPoint.idl:
        * ksvg2/svg/SVGRect.idl:

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix another issue with frame loading

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::receivedData):
        (WebCore::ResourceHandleManager::receivedFinished):
        (WebCore::FileLoader::request):
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClient::openURL):

2006-12-10  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Make the xpath grammar hack more specific (and work on OS X) until
        it's cleaned up.

        * WebCore.pro:

2006-12-10  Zack Rusin  <zack@kde.org>

        Set the widgetclient correctly. This code
        should be platform independent!

        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::setClient):
        (WebCore::Widget::client):
        (WebCore::Widget::focusPolicy):

2006-12-11  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix loading of local files.

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::FileLoader::request):

2006-12-10  Zack Rusin  <zack@kde.org>

       Don't use my QTransform magic, affine QMatrix is fine for
       SVG so use setMatrix.

        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        (WebCore::SVGPaintServerLinearGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        (WebCore::setup):

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Make sure we call checkCompleted() on the FrameLoader
        to get the regression tests running.

        * WebCore.pro:
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::saveDocumentState):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::handleDrag):
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClient::openURL):
        (WebCore::FrameQtClient::didReceiveResponse):
        (WebCore::FrameQtClient::didFinishLoading):
        (WebCore::FrameQtClient::didFail):
        * platform/qt/FrameQtClient.h:

2006-12-10  Zack Rusin  <zack@kde.org>

        Enable the SVG build by default and make it build.

        * WebCore.pro:
        * loader/qt/FrameLoaderQt.cpp: Output the method name

2006-12-10  Zack Rusin  <zack@kde.org>

        Move the client classes to WebKitQt/WebCoreSupport.

        * WebCore.pro:
        * loader/qt/FrameLoaderClientQt.cpp: Removed.
        * loader/qt/FrameLoaderClientQt.h: Removed.
        * platform/qt/ChromeClientQt.cpp: Removed.
        * platform/qt/ChromeClientQt.h: Removed.
        * platform/qt/ContextMenuClientQt.cpp: Removed.
        * platform/qt/ContextMenuClientQt.h: Removed.
        * platform/qt/EditorClientQt.cpp: Removed.
        * platform/qt/EditorClientQt.h: Removed.

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Add some stubs required to link.

        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::runJavaScriptAlert):
        (WebCore::FrameQt::runJavaScriptConfirm):
        (WebCore::FrameQt::runJavaScriptPrompt):
        (WebCore::FrameQt::bindingRootObject):

2006-12-10  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10996
        WebKit needs (possibly private) XML/SVG innerText support (for DumpRenderTree)

        Create an internal method to create innerText functionality for non-HTML
        nodes. When called from DRT this omits CDATA nodes.

        * dom/Element.cpp:
        (WebCore::Element::innerText):
        (WebCore::Element::outerText):
        * dom/Element.h:
        * dom/Element.idl:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:

2006-12-10  Darin Fisher  <darin@chromium.org>

        Reviewed by Maciej.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=11790
        No way to initialize ResourceResponse::m_httpHeaderFields

        * platform/network/ResourceResponse.cpp: impl setHTTPHeaderField
        (WebCore::ResourceResponse::setHTTPHeaderField):
        * platform/network/ResourceResponse.h: decl setHTTPHeaderField

2006-12-10  Zack Rusin  <zack@kde.org>

        Cleaning up the code after removals.

        * platform/qt/FrameQt.cpp:
        * platform/qt/FrameQt.h: Remove virtual methods
        which have been moved to different objects

2006-12-10  Zack Rusin  <zack@kde.org>

        Cleanup the FrameQtClient a little bit more. Remove
        unused methods.

        * platform/qt/FrameQtClient.cpp:
        * platform/qt/FrameQtClient.h:

2006-12-09  Adam Roben  <aroben@apple.com>

        Build fix.

        * xml/XPathParser.cpp:
        (WebCore::XPath::charCat): Use C++ unsigned instead of uint.

2006-12-09  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Make it not crash, and make it set the title on Qt platform.

        * loader/qt/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::hasWebView):
        (WebCore::FrameLoaderClientQt::hasFrameView):
        (WebCore::FrameLoaderClientQt::didChangeTitle):
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::setTitle):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):

2006-12-10  Zack Rusin  <zack@kde.org>

        Renaming FrameQtClientDefault to FrameQtClient.
        Removing FrameQtClient. Adding FrameLoaderClient
        as an argument. Clenaing up the code a bit.

        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClient::FrameQtClient):
        (WebCore::FrameQtClient::~FrameQtClient):
        (WebCore::FrameQtClient::setFrame):
        (WebCore::FrameQtClient::openURL):
        (WebCore::FrameQtClient::submitForm):
        (WebCore::FrameQtClient::checkLoaded):
        (WebCore::FrameQtClient::runJavaScriptAlert):
        (WebCore::FrameQtClient::runJavaScriptConfirm):
        (WebCore::FrameQtClient::runJavaScriptPrompt):
        (WebCore::FrameQtClient::menubarVisible):
        (WebCore::FrameQtClient::toolbarVisible):
        (WebCore::FrameQtClient::statusbarVisible):
        (WebCore::FrameQtClient::personalbarVisible):
        (WebCore::FrameQtClient::locationbarVisible):
        (WebCore::FrameQtClient::loadFinished):
        (WebCore::FrameQtClient::didReceiveResponse):
        (WebCore::FrameQtClient::didFinishLoading):
        (WebCore::FrameQtClient::didFail):
        (WebCore::FrameQtClient::didReceiveData):
        (WebCore::FrameQtClient::traverseNextFrameStayWithin):
        (WebCore::FrameQtClient::numPendingOrLoadingRequests):
        (WebCore::FrameQtClient::receivedAllData):
        (WebCore::FrameQtClient::setTitle):
        * platform/qt/FrameQtClient.h:

2006-12-10  Zack Rusin  <zack@kde.org>

        Fixes compilation after the last removals.

        * WebCore.pro:

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Implement a decent network loader using QHttp.

        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::load):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::request):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/qt/ResourceHandleManager.cpp: Removed.
        * platform/network/qt/ResourceHandleManager.h: Removed.
        * platform/network/qt/ResourceHandleManagerKDE.cpp: Added.
        (WebCore::ResourceHandleManager::self):
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::ResourceHandleManager::slotData):
        (WebCore::ResourceHandleManager::slotMimetype):
        (WebCore::ResourceHandleManager::slotResult):
        (WebCore::ResourceHandleManager::remove):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        * platform/network/qt/ResourceHandleManagerKDE.h: Added.
        * platform/network/qt/ResourceHandleManagerQt.cpp: Added.
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::ResourceHandleManager::self):
        (WebCore::RequestQt::RequestQt):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::receivedResponse):
        (WebCore::ResourceHandleManager::receivedData):
        (WebCore::ResourceHandleManager::receivedFinished):
        (WebCore::LoaderThread::LoaderThread):
        (WebCore::LoaderThread::run):
        (WebCore::FileLoader::FileLoader):
        (WebCore::FileLoader::request):
        (WebCore::FileLoader::cancel):
        (WebCore::WebCoreHttp::WebCoreHttp):
        (WebCore::WebCoreHttp::~WebCoreHttp):
        (WebCore::WebCoreHttp::request):
        (WebCore::WebCoreHttp::scheduleNextRequest):
        (WebCore::WebCoreHttp::getConnection):
        (WebCore::WebCoreHttp::onResponseHeaderReceived):
        (WebCore::WebCoreHttp::onReadyRead):
        (WebCore::WebCoreHttp::onRequestFinished):
        (WebCore::WebCoreHttp::onStateChanged):
        (WebCore::WebCoreHttp::cancel):
        (WebCore::qHash):
        (WebCore::operator==):
        (WebCore::HostInfo::HostInfo):
        (WebCore::NetworkLoader::NetworkLoader):
        (WebCore::NetworkLoader::~NetworkLoader):
        (WebCore::NetworkLoader::request):
        (WebCore::NetworkLoader::connectionClosed):
        (WebCore::NetworkLoader::cancel):
        * platform/network/qt/ResourceHandleManagerQt.h: Added.
        (WebCore::LoaderThread::):
        (WebCore::LoaderThread::waitForSetup):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::keyEvent):
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::FrameQtClientDefault):
        (WebCore::FrameQtClientDefault::openURL):
        (WebCore::FrameQtClientDefault::submitForm):
        (WebCore::FrameQtClientDefault::didReceiveResponse):
        (WebCore::FrameQtClientDefault::didFinishLoading):
        (WebCore::FrameQtClientDefault::didFail):
        (WebCore::FrameQtClientDefault::didReceiveData):
        (WebCore::FrameQtClientDefault::receivedAllData):
        (WebCore::FrameQtClientDefault::setTitle):
        * platform/qt/FrameQtClient.h:

2006-12-09  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Fix bison again on qmake build.

        * WebCore.pro:

2006-12-09  Zack Rusin  <zack@kde.org>

        Reviewed by Zack.

        Use the correct filename.

        * WebCore.pro: it's PasteboardQt.cpp

2006-12-09  Zack Rusin  <zack@kde.org>

        Reviewed by Lars.

        Correctly set the font on widgets.

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setFont):

2006-12-09  Adam Treat  <treat@kde.org>

        Reviewed by Zack

        No more nil renderer warnings

        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::paintEvent):

2006-12-09  Friedemann Kleint  <fkleint@trolltech.com>

        Reviewed by Zack

        Removed compiler warnings about rounding issues

        * platform/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):

2006-12-09  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Qt 4.1 (especially Qtopia) build fixes

        * platform/qt/FrameQtClient.cpp:
        * platform/qt/GraphicsContextQt.cpp:
        * platform/qt/PlatformKeyboardEventQt.cpp:
        * platform/qt/CursorQt.cpp:
        * platform/qt/WidgetQt.cpp:
        * platform/Cursor.h:
        * platform/Arena.h:

2006-12-09  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Make it possible to build WebKit with qmake.

        * WebCore.pro: Added.
        * platform/graphics/qt/GraphicsContextQt.cpp:

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Compile after latest WebKit changes and don't depend
        on deprecated methods in Qt.

        * platform/network/qt/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::remove):
        (WebCore::ResourceHandleManager::deliverJobData):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::extractCharsetFromHeaders):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Use the Qt image loading framework.

        * CMakeLists.txt:
        * platform/graphics/ImageSource.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/ImageDecoderQt.cpp: Added.
        (WebCore::ImageDecoderQt::ImageData::ImageData):
        (WebCore::ImageDecoderQt::ReadContext::):
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        (WebCore::ImageDecoderQt::~ImageDecoderQt):
        (WebCore::ImageDecoderQt::hasFirstImageHeader):
        (WebCore::ImageDecoderQt::reset):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::isSizeAvailable):
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::repetitionCount):
        (WebCore::ImageDecoderQt::ImageDecoderQt::supportsAlpha):
        (WebCore::ImageDecoderQt::duration):
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::imageAtIndex):
        * platform/graphics/qt/ImageDecoderQt.h: Added.
        (WebCore::ImageDecoderQt::):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::):
        (WebCore::detectImageFormat):
        (WebCore::createDecoder):
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):

2006-12-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Maciej.

        Remove an explicit ICU dependency.

        * xml/XPathParser.cpp:
        (WebCore::XPath::charCat):

2006-12-09  Zack Rusin  <zack@kde.org>

        Adjusting the build after the icu changes.

        * CMakeLists.txt:

2006-12-09  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Changed all ForwardingHeaders to use #include instead of #import.

        * ForwardingHeaders/kjs/JSLock.h:
        * ForwardingHeaders/kjs/SavedBuiltins.h:
        * ForwardingHeaders/kjs/collector.h:
        * ForwardingHeaders/kjs/dtoa.h:
        * ForwardingHeaders/kjs/internal.h:
        * ForwardingHeaders/kjs/interpreter.h:
        * ForwardingHeaders/kjs/lookup.h:
        * ForwardingHeaders/kjs/object.h:
        * ForwardingHeaders/kjs/property_map.h:
        * ForwardingHeaders/kjs/protect.h:
        * ForwardingHeaders/wtf/AlwaysInline.h:
        * ForwardingHeaders/wtf/Assertions.h:
        * ForwardingHeaders/wtf/FastMalloc.h:
        * ForwardingHeaders/wtf/GetPtr.h:
        * ForwardingHeaders/wtf/HashCountedSet.h:
        * ForwardingHeaders/wtf/HashMap.h:
        * ForwardingHeaders/wtf/HashSet.h:
        * ForwardingHeaders/wtf/HashTraits.h:
        * ForwardingHeaders/wtf/MathExtras.h:
        * ForwardingHeaders/wtf/Noncopyable.h:
        * ForwardingHeaders/wtf/OwnArrayPtr.h:
        * ForwardingHeaders/wtf/OwnPtr.h:
        * ForwardingHeaders/wtf/PassRefPtr.h:
        * ForwardingHeaders/wtf/Platform.h:
        * ForwardingHeaders/wtf/RefPtr.h:
        * ForwardingHeaders/wtf/Vector.h:

2006-12-09  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11625
        Investigate possibility to share code between HTMLStyleElement and SVGStyleElement

        Add a class shared by both HTMLStyleElement and SVGStyleElement that
        encapsulates the common logic.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyleSelector):
        Generalize stylesheet processing of svg and html.

        * dom/StyleElement.cpp: Added.
        (WebCore::StyleElement::StyleElement):
        (WebCore::StyleElement::sheet):
        (WebCore::StyleElement::insertedIntoDocument):
        (WebCore::StyleElement::removedFromDocument):
        (WebCore::StyleElement::childrenChanged):
        * dom/StyleElement.h: Added.
        (WebCore::StyleElement::~StyleElement):
        (WebCore::StyleElement::isLoading):
        Common base class for SVGStyleElement and HTMLStyleElement.

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        (WebCore::HTMLStyleElement::parseMappedAttribute):
        (WebCore::HTMLStyleElement::insertedIntoDocument):
        (WebCore::HTMLStyleElement::removedFromDocument):
        (WebCore::HTMLStyleElement::childrenChanged):
        (WebCore::HTMLStyleElement::media):
        (WebCore::HTMLStyleElement::setMedia):
        (WebCore::HTMLStyleElement::type):
        (WebCore::HTMLStyleElement::setType):
        * html/HTMLStyleElement.h:
        Use new common class.

        * ksvg2/svg/SVGElement.cpp:
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::contentScriptType):
        (WebCore::SVGSVGElement::contentStyleType):
        * ksvg2/svg/SVGSVGElement.h:
        Do not use tryGetAttribute(NS) anymore.

        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::SVGStyleElement):
        (WebCore::SVGStyleElement::xmlspace):
        (WebCore::SVGStyleElement::type):
        (WebCore::SVGStyleElement::media):
        (WebCore::SVGStyleElement::title):
        (WebCore::SVGStyleElement::insertedIntoDocument):
        (WebCore::SVGStyleElement::removedFromDocument):
        (WebCore::SVGStyleElement::childrenChanged):
        * ksvg2/svg/SVGStyleElement.h:
        Use new common class.

2006-12-08  David Hyatt  <hyatt@apple.com>

        Land the new ICU abstraction layer (WTF::Unicode).  Patch
        by Lars with a couple of fixes thrown in by me.

        Reviewed by hyatt

        * ForwardingHeaders/wtf/icu/UnicodeIcu.h: Added.
        * ForwardingHeaders/wtf/unicode/Unicode.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * css/cssparser.cpp:
        (WebCore::ParseString::lower):
        * dom/Document.cpp:
        (WebCore::isValidNameStart):
        (WebCore::isValidNamePart):
        * editing/TextIterator.cpp:
        (WebCore::CircularSearchBuffer::append):
        * html/HTMLFontElement.cpp:
        (WebCore::parseFontSizeNumber):
        * html/HTMLInputElement.cpp:
        (WebCore::numGraphemeClusters):
        (WebCore::numCharactersInGraphemeClusters):
        * html/HTMLSelectElement.cpp:
        (WebCore::stripLeadingWhiteSpace):
        * page/Frame.h:
        * platform/DeprecatedString.h:
        (WebCore::DeprecatedChar::isSpace):
        (WebCore::DeprecatedChar::lower):
        (WebCore::DeprecatedChar::upper):
        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::normalizeVoicingMarks):
        * platform/FontCache.h:
        * platform/FontData.h:
        * platform/GlyphMap.cpp:
        * platform/GlyphMap.h:
        * platform/GlyphWidthMap.h:
        * platform/KURL.cpp:
        (WebCore::encodeHostname):
        * platform/StringHash.h:
        (WTF::):
        * platform/StringImpl.cpp:
        (WebCore::isSpace):
        (WebCore::parseLength):
        (WebCore::StringImpl::isLower):
        (WebCore::StringImpl::lower):
        (WebCore::StringImpl::upper):
        (WebCore::StringImpl::secure):
        (WebCore::StringImpl::foldCase):
        (WebCore::StringImpl::capitalize):
        (WebCore::StringImpl::toInt):
        (WebCore::equalIgnoringCase):
        (WebCore::StringImpl::find):
        * platform/StringImpl.h:
        * platform/TextBoundaries.h:
        * platform/TextBreakIterator.h: Added.
        (WebCore::):
        * platform/TextBreakIteratorICU.cpp: Added.
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::textBreakFirst):
        (WebCore::textBreakNext):
        (WebCore::textBreakPreceding):
        (WebCore::textBreakFollowing):
        (WebCore::textBreakCurrent):
        * platform/TextCodec.h:
        * platform/TextCodecLatin1.cpp:
        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/TextEncoding.h:
        * platform/TextEncodingRegistry.cpp:
        (WebCore::buildTextEncodingNameMap):
        (WebCore::buildTextCodecMap):
        * platform/TextEncodingRegistry.h:
        * platform/UChar.h: Removed.
        * platform/graphics/GraphicsContext.h:
        * platform/qt/GlyphMapQt.cpp:
        * platform/qt/TextBreakIteratorQt.cpp: Added.
        (WebCore::TextBreakIterator::following):
        (WebCore::TextBreakIterator::preceding):
        (WebCore::WordBreakIteratorQt::first):
        (WebCore::WordBreakIteratorQt::next):
        (WebCore::WordBreakIteratorQt::previous):
        (WebCore::CharBreakIteratorQt::first):
        (WebCore::CharBreakIteratorQt::next):
        (WebCore::CharBreakIteratorQt::previous):
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::textBreakFirst):
        (WebCore::textBreakNext):
        (WebCore::textBreakPreceding):
        (WebCore::textBreakFollowing):
        (WebCore::textBreakCurrent):
        * platform/qt/TextCodecQt.cpp: Added.
        (WebCore::getAtomicName):
        (WebCore::TextCodecQt::registerEncodingNames):
        (WebCore::newTextCodecQt):
        (WebCore::TextCodecQt::registerCodecs):
        (WebCore::TextCodecQt::TextCodecQt):
        (WebCore::TextCodecQt::~TextCodecQt):
        (WebCore::TextCodecQt::decode):
        (WebCore::TextCodecQt::encode):
        * platform/qt/TextCodecQt.h: Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::nextOffset):
        (WebCore::RenderText::widthFromCache):
        * rendering/RenderText.h:
        * rendering/bidi.cpp:
        (WebCore::BidiState::BidiState):
        (WebCore::BidiContext::BidiContext):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::BidiIterator::direction):
        (WebCore::appendRun):
        (WebCore::embed):
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::bidiReorderLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/bidi.h:
        (WebCore::BidiStatus::BidiStatus):
        (WebCore::BidiContext::dir):
        (WebCore::BidiContext::basicDir):
        (WebCore::BidiRun::BidiRun):
        * rendering/break_lines.h:

2006-12-08  Adam Roben  <aroben@apple.com>

        Rolling out r17865 because it caused a performance regression.

        * loader/TextResourceDecoder.cpp:
        (WebCore::findXMLEncoding):
        * platform/CString.cpp:
        (WebCore::CString::data):
        * platform/CString.h:
        * platform/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * platform/TextStream.h:

2006-12-08  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        Fix the Qt/KDE build after all the API changes.

        * CMakeLists.txt:
        * editing/qt/EditorQt.cpp: Added.
        (WebCore::Editor::newGeneralClipboard):
        (WebCore::Editor::ignoreSpelling):
        (WebCore::Editor::learnSpelling):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::Editor::markMisspellingsInAdjacentWords):
        (WebCore::Editor::markMisspellings):
        * loader/NavigationAction.h:
        * loader/qt/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientQt::canHandleRequest):
        * loader/qt/FrameLoaderClientQt.h:
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::load):
        * loader/qt/ResourceLoaderQt.cpp:
        * platform/ContextMenu.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        (WebCore::SVGPaintServerLinearGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        (WebCore::setup):
        * platform/network/ResourceHandle.h:
        (WebCore::ResourceHandle::getInternal):
        * platform/network/ResourceHandleInternal.h:
        * platform/network/qt/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::slotData):
        (WebCore::ResourceHandleManager::remove):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        * platform/qt/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addMessageToConsole):
        (WebCore::ChromeClientQt::chromeDestroyed):
        * platform/qt/ChromeClientQt.h:
        * platform/qt/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::copyLinkToClipboard):
        (WebCore::ContextMenuClientQt::downloadURL):
        (WebCore::ContextMenuClientQt::copyImageToClipboard):
        (WebCore::ContextMenuClientQt::contextMenuDestroyed):
        (WebCore::ContextMenuClientQt::contextMenuItemSelected):
        * platform/qt/ContextMenuClientQt.h:
        * platform/qt/ContextMenuItemQt.cpp: Added.
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::platformDescription):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::setSubMenu):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::setPlatformDescription):
        * platform/qt/CursorQt.cpp:
        (WebCore::copyCursor):
        * platform/qt/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldInsertNode):
        (WebCore::WebCore::EditorClientQt::pageDestroyed):
        (WebCore::EditorClientQt::smartInsertDeleteEnabled):
        * platform/qt/EditorClientQt.h:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::keyEvent):
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::openURL):
        (WebCore::FrameQtClientDefault::submitForm):
        * platform/qt/LoaderFunctionsQt.cpp:
        * platform/qt/PasteboardQt.cpp: Added.
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::clearTypes):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

=== Safari-521.32 ===

2006-12-08  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10188
        Form elements added via appendChild() are not accessible via form.element

        Make sure looking up form elements works when the form is not appended
        to the document.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerFormElement):

2006-12-08  Rob Buis  <buis@kde.org>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=11765
        REGRESSION: Clicking on a select with size other than 1 and no children results in a crash

        Make sure returned value is -1 for selects without children.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::listIndexAtOffset):

2006-12-08  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        This is a mo' better fix for ensuring we don't use macro definitions
        of min/max.

        * config.h:

2006-12-08  Peter Kasting  <pkasting@google.com>

        Reviewed and landed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=11759:
        Windows build bustage

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/ContextMenuClientWin.h:
        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::submitForm):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::ResourceHandle::fileLoadTimer):
        (WebCore::ResourceHandle::cancel):
        * platform/win/MouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::inputElementAltText):
        (WebCore::copyCursor):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::ContextMenuClientWin::contextMenuItemSelected):
        (WebCore::ContextMenuClientWin::copyLinkToClipboard):
        (WebCore::ContextMenuClientWin::downloadURL):
        (WebCore::ContextMenuClientWin::copyImageToClipboard):
        (WebCore::Editor::ignoreSpelling):
        (WebCore::Editor::learnSpelling):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::markMisspellingsInAdjacentWords):
        (WebCore::FrameLoader::load):
        (WebCore::FrameWin::scheduleClose):
        (WebCore::FrameWin::respondToChangedSelection):

2006-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11777
        Crash when using XMLSerializer.serializeToString() on
        documentless, DocumentType nodes.

        Test: fast/dom/XMLSerializer-doctype.html
        Test: fast/dom/XMLSerializer-doctype2.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): set the document of the 
        DocumentType node to the new document.
        * xml/XMLSerializer.cpp: Cleanup.
        (WebCore::XMLSerializer::serializeToString): now throws an exception
        for documentless nodes. 
        * xml/XMLSerializer.h: cleanup
        * xml/XMLSerializer.idl: add exception

2006-12-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4836287>
        Cannot expand selection out of editable element when containing element is non-editable.

        * editing/Selection.cpp:
        (WebCore::Selection::adjustForEditableContent): Restrict the selection endpoints
        to the same *highest* editable root.  This bug only happened when creating selections
        based in an editable region and extending into a higher editable root, so this change 
        doesn't expose any new kinds of deletions, but we should start thinking about how
        those deletions should behave.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectAll): Ditto.

2006-12-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Add a new member variable to ContextMenuItem to hold on to the sub-
        menu. The new member variable is an OwnPtr<ContextMenu>

        * platform/ContextMenu.cpp: Because of the OwnPtr in
        ContextMenuItem, we have to separate the declaration of
        ContextMenuItems away from the calls to appendItem(). Not doing so
        causes a build failure because OwnPtr inherits from Noncopyable.
        (WebCore::createFontSubMenu): Same.
        (WebCore::createSpellingAndGrammarSubMenu): Same.
        (WebCore::createSpellingSubMenu): Same.
        (WebCore::createSpeechSubMenu): Same.
        (WebCore::createWritingDirectionSubMenu): Same.
        (WebCore::ContextMenu::populate): Same.
        * platform/ContextMenuItem.h:  New member variable m_subMenu.
        * platform/mac/ContextMenuItemMac.mm: Take care of setting
        m_subMenu in addition to setting the submenu of the NSMenuItem when
        we have a sub-menu.
        (WebCore::menuToArray):
        (WebCore::ContextMenuItem::ContextMenuItem): Same.
        (WebCore::ContextMenuItem::platformSubMenu): Same.
        (WebCore::ContextMenuItem::setSubMenu): Same.

2006-12-08  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11778
        CString::data() should be documented as returning a null terminated char array

        * platform/CString.h:
        Add some basic documentation to CString.h

2006-12-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=11718
        REGRESSION: When I mouse up after dragging a selection outside of a iframe, the iframe
        continues to scroll automatically.

        Test: manual-tests/autoscroll.html

        * manual-tests/autoscroll.html: Added.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        Assign to m_mousePressNode earlier, so that it is available in the superframe as well.
        Reset m_mouseDownWasInSubframe to false when starting to handle a mousedown - previously, its value
        was only defined if the event was passed down to a widget or a subframe.

        (WebCore::EventHandler::stopAutoscrollTimer):
        If the mouse down event was in a subframe, stop the subframe's timer.

2006-12-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=6275
        XMLHttpRequest.getResponseHeader should return a null string for non-existent headers

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestProtoFunc::callAsFunction):
        Convert null getResponseHeader strings to JS null, rather than undefined.

2006-12-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9854
        HTTP Refresh header with quotes is parsed incorrectly

        Test: http/tests/misc/redirect-with-quotes.php

        * WebCore.xcodeproj/project.pbxproj:
        Added HTTPParsers.{h,cpp}. I intend to move Content-Type parsing here, as well.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        Use the new implementation in HTTPHeaders.

        * platform/network/HTTPParsers.cpp: Added.
        (WebCore::skipWhiteSpace):
        (WebCore::parseHTTPRefresh):
        * platform/network/HTTPParsers.h: Added.
        Merged and rewrote existing implementations for better Firefox compatibility.

2006-12-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=11772
        REGRESSION: XMLSerializer.serializeToString incorrect value for CDATA nodes

        Test: fast/dom/serialize-cdata.html

        * editing/markup.cpp:
        (WebCore::startMarkup): Dump CDATA sections, too.

2006-12-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by hyatt.

        Deleted misplaced comment.

        * rendering/RenderWidget.cpp:

2006-12-08  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6074
        WebKit+SVG and FireFox disagree on invalid "transform" handling

        Test for parsing failure on transform attribute and clear the transform
        list upon failure to match FF behaviour.

        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute):
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::parseMappedAttribute):
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute):
        * ksvg2/svg/SVGTransformable.h:

2006-12-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/4870551> 9A320: <input type="text"> no longer 
        dispatches onchange event in response to enter key
        
        To match our old behavior and FF, we need to dispatch onchange in response to the
        ENTER key. The strategy here is just to dispatch a blur event, since that's how
        the search field always worked, and the DOM spec says onchange only fires
        as a precursor to blur.

        * ChangeLog:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):

2006-12-07  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Some small context menu-related fixes.

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::defaultEventHandler): Don't try to
        resize on a contextmenuEvent.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Only pass the event
        off to HTMLGenericFormElement if we haven't handled it.

2006-12-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4838778>
        Title: DashboardClient crashing in WebCore::SubresourceLoader::didFail
        
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::stopLoading):
        * loader/SubresourceLoader.h:
        Add stopLoading method which currently just clears the client. This isn't the ideal fix,
        since it doesn't actually stop the load.
        
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        Add null-checks.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::abort):
        Call stopLoading.

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

        Reviewed by Geof.

        - added the ability to set the auto repeating variable to force a keyPressed
        event from a keyDown event.

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::setIsAutoRepeat):

2006-12-07  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11749
        Don't call updateThumbProportion() unnecessarily.

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::setProportion):

2006-12-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Brady.

        Fixes "Open in new Window" item in WebCore ContextMenus. It wasn't 
        doing anything before, and now it works! Also some formatting 
        changes, etc.

        * page/ContextMenuClient.h: Several of the parameters to several of 
        the functions here should be const or const references. And now 
        they are!
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow): Moved the open new window functionality 
        into a helper function since it is used by several menu item tags. 
        Now after calling chrome()->createWindow() we call chrome()->show() 
        on the new window, and so it appears!
        (WebCore::ContextMenuController::contextMenuItemSelected): Call new 
        openNewWindow function to do the right thing. Shift some 
        formatting, use local variable for HitTestResult. Implement action 
        for ContextMenuItemTagOpenLink.

2006-12-06  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by.

        - Removed a conflict marker

        * ChangeLog:

2006-12-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4818134>
        Crash in WebCore::selectRange when invoking WebView:insertNewLine in any empty content editable DIV.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed RebalanceWhitespaceCommand.*.
        * editing/visible_units.cpp:
        (WebCore::startOfLine): There are VisiblePositions at offset 0 in blocks without
        RootInlineBoxes, like empty editable blocks and bordered blocks.
        (WebCore::endOfLine): Ditto.
        
2006-12-06  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by.

        - Removed a conflict marker

        * ChangeLog:

2006-12-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4854869>
        Inserting a new line in a contenteditable=true SPAN whose parent is a DIV asserts

        * editing/htmlediting.cpp:
        (WebCore::enclosingBlock): Use enclosingNodeWithType to prevent escape
        from editable content.
        * editing/markup.cpp:
        (WebCore::createMarkup): A null commonAncestorBlock will happen
        if commonAncestor is inside an inline editable root that doesn't
        contain any blocks.  Removed an early return for this case: the 
        code below the early return can and must handle it.

2006-12-06  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/4843505> Fix cross-library ivar use for 64-bit Objective-C

        Adds a new WebCore.LP64.exp file that gets appended to the normal export file.
        This new file will have 64-bit only symbols we need to export.

        * WebCore.LP64.exp: Added.
        * WebCore.xcodeproj/project.pbxproj:

2006-12-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.
        
        Change SubresourceLoader to use a ResourceHandle, and change ResourceHandle to use a NSURLConnection.
        
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        * loader/SubresourceLoader.h:
        (WebCore::SubresourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::SubresourceLoader::didCancelAuthenticationChallenge):
        (WebCore::SubresourceLoader::willStopBufferingData):
        (WebCore::SubresourceLoader::willCacheResponse):
        (WebCore::SubresourceLoader::receivedCredential):
        (WebCore::SubresourceLoader::receivedRequestToContinueWithoutCredential):
        (WebCore::SubresourceLoader::receivedCancellation):
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didFail):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didFail):
        * loader/icon/IconLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::didFail):
        * loader/loader.h:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::resourceData):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::setDefersLoading):
        (WebCore::SubresourceLoader::resourceData):
        (WebCore::SubresourceLoader::load):
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveData):
        (WebCore::ResourceHandleClient::didFail):
        (WebCore::ResourceHandleClient::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandleClient::didCancelAuthenticationChallenge):
        (WebCore::ResourceHandleClient::willStopBufferingData):
        (WebCore::ResourceHandleClient::willCacheResponse):
        (WebCore::ResourceHandleClient::receivedCredential):
        (WebCore::ResourceHandleClient::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandleClient::receivedCancellation):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::setDefersLoading):
        (WebCore::ResourceHandle::delegate):
        (WebCore::ResourceHandle::releaseDelegate):
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::bufferedData):
        (-[WebCoreResourceHandleAsDelegate initWithHandle:]):
        (-[WebCoreResourceHandleAsDelegate detachHandle]):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):
        (-[WebCoreResourceHandleAsDelegate useCredential:forAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate continueWithoutCredentialForAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate cancelAuthenticationChallenge:]):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::didFail):
        * xml/xmlhttprequest.h:

2006-12-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        There are two bugs with WebCore ContextMenus due to the static 
        ContextMenuItems. One bug is that we often crashed in 
        NSAutoreleasePool upon quitting the browser. The other bug is that 
        we were adding static NSMenuItems to multiple NSMenus, which is 
        disallowed. To fix these bugs, the MenuItems are no longer static. 
        This is in line with the current design in WebKit anyway. I made 
        some re-arrangements in the code because I also removed the macro 
        that was used to create the menu items since it was a bit 
        confusing.

        * platform/ContextMenu.cpp:
        (WebCore::createFontSubMenu):
        (WebCore::createSpellingAndGrammarSubMenu):
        (WebCore::createSpellingSubMenu):
        (WebCore::createSpeechSubMenu):
        (WebCore::createWritingDirectionSubMenu):
        (WebCore::ContextMenu::populate):
        * platform/ContextMenuItem.h:
        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::ContextMenuItem): Use the NSMenuItem 
        global separator item if we have SeparatorType.
        * platform/mac/ContextMenuMac.mm:
        (WebCore::setMenuItemTarget):  Change name of getNSMenuItem since 
        that is no longer accurate.
        (WebCore::ContextMenu::appendItem): Above name change.
        (WebCore::ContextMenu::insertItem): Same.

2006-12-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof.

        - Returned the semantic meaning of the mask to be the actual repeat count,
        and changed auto_repeat to correctly differnetiate between keypressed and keydown.

        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2006-12-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4753545>
        REGRESSION: Edited whitespace sequences are all nbsps (10636)

        * WebCore.xcodeproj/project.pbxproj: Removed RebalanceWhitespaceCommand.* from the project.
        * editing/CompositeEditCommand.cpp:
        (WebCore::isWhitespace): Moved from htmlediting.
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt): Moved the work that was
        once done in its own command here.  
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit): Prevents
        whitespace around a position from collapsing when it's pushed apart during Paste.
        This function can eventually be deployed to eliminate the need for leading/trailing 
        whitespace handling in InsertParagraphSeparator, InsertLineBreak, Delete, and BreakBlockquote.
        (WebCore::CompositeEditCommand::rebalanceWhitespace): Cleaned up.
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply): Do rebalanceWhitespaceAt *before*
        saving the typing style, because whitespace rebalancing is no longer it's own
        command that claims to preserve the typing style.
        * editing/RebalanceWhitespaceCommand.cpp: Removed.
        * editing/RebalanceWhitespaceCommand.h: Removed.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Moved the code to prepare whitespace
        arond a position for being pushed aparat to its own method.
        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace): Added.  Returns a rebalanced string.
        Takes in whether or not the beginning of that string will be at the start of
        a paragraph, because a space at such a position must have be nbsp, even if
        that doesn't follow the nbsp/space pattern used.  Similar stuff for the end 
        of a paragraph.
        * editing/htmlediting.h:
        * editing/markup.cpp:
        (WebCore::fillContainerFromString): Call stringWithRelabacedWhitespace.  Pass 
        it the startOfParagraph/endOfParagraph bools.

2006-12-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Beth

        Moved spelling and grammar code from Frame to Editor

        * WebCore.exp:
        updated for these changes

        * page/Frame.h:
        removed declarations of spelling and grammar functions

        * bridge/mac/FrameMac.h:
        removed declarations of spelling and grammar functions

        * bridge/mac/FrameMac.mm:
        moved implementation of spelling and grammar functions from here
        (WebCore::FrameMac::respondToChangedSelection):
        updated for moved functions

        * editing/Editor.h:
        moved declarations of spelling and grammar functions to here

        * editing/mac/EditorMac.mm:
        moved implementation of spelling and grammar functions to here; changed
        only to make it compile (e.g. removing "editor()->" and adding "frame()->"
        where appropraite.
        (WebCore::findFirstMisspellingInRange):
        (WebCore::paragraphAlignedRangeForRange):
        (WebCore::findFirstGrammarDetailInRange):
        (WebCore::findFirstBadGrammarInRange):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::isRangeUngrammatical):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::core):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::Editor::markMisspellingsInAdjacentWords):
        (WebCore::markAllMisspellingsInRange):
        (WebCore::markAllBadGrammarInRange):
        (WebCore::Editor::markMisspellings):

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        updated for moved functions

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        updated for moved functions

2006-12-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        General cleanup, get rid of PlatformResponse (we have ResourceResponse now)
        and remove a couple of functions that were unused.

        * loader/CachedResource.h:
        * loader/LoaderFunctions.h:
        * loader/mac/LoaderFunctionsMac.mm:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::~ResourceHandle):

2006-12-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by John.

        - keydown is now a keydown event instead of a keypress event.
          Fixes some form submission oddities.

        * platform/win/KeyEventWin.cpp:

2006-12-05  John Sullivan  <sullivan@apple.com>

        Tiger build fix

        * editing/mac/EditorMac.mm:
        declare -[NSSpellChecker learnWord:], on Tiger only (it's API on Leopard)

2006-12-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff Garen

        * page/Frame.h:
        remove declarations of ignoreSpelling() and learnSpelling()

        * bridge/mac/FrameMac.h:
        remove declarations of ignoreSpelling() and learnSpelling()
        * bridge/mac/FrameMac.mm:
        moved implementations of ignoreSpelling() and learnSpelling() from here

        * editing/Editor.h:
        added declarations of ignoreSpelling() and learnSpelling()

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::ignoreSpelling):
        moved here from FrameMac.mm
        (WebCore::Editor::learnSpelling):
        ditto

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        updated callers to use frame()->editor() rather than frame()

2006-12-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam

        New context-menu mechanism fix for:
        <rdar://problem/4864351> Should leave out "No Guesses Found" from context menu for bad grammar

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        Leave out "No Guesses Found" and separator for grammar-checking case.

2006-12-05  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11686
        WebKit draws Carto.net tabgroup example completely incorrectly (ff does fine)

        Make sure the SVG render objects are laid out before measuring their 
        dimensions using relativeBBox.

        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getBBox):

2006-12-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        Grammar/Spelling code re-homing, baby step one: put isGrammarCheckingEnabled in Editor
        since that's where isContinousSpellCheckingEnabled lives.

        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::Editor::isGrammarCheckingEnabled):
        new method, calls through to client a la isContinuousSpellCheckingEnabled

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        call editor() rather than editor()->client()
        (WebCore::FrameMac::markMisspellings):
        ditto

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        ditto

2006-12-05  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - a little cleanup

        * html/HTMLInputElement.h: Removed unneeded includes of RenderObject.h
        and RenderStyle.h.
        * html/HTMLSelectElement.h: Removed unneeded include of RenderStyle.h.
        * ksvg2/svg/SVGStyledElement.h: Removed unneeded include of RenderStyle.h.

        * ksvg2/svg/SVGSVGElement.h: Remove unneeded parameter to createSVGPoint.
        * ksvg2/svg/SVGSVGElement.cpp: (WebCore::SVGSVGElement::createSVGPoint):
        Ditto.

        * ksvg2/scripts/generateJSBindings.pl: Removed unused script.

2006-12-05  Darin Adler  <darin@apple.com>

        * doc: Removed empty directory. It's not clear this is a good place for
        documentation, so lets add it back later if we actually start using it.

2006-12-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady, Darin.

        * loader/loader.cpp:
        (WebCore::Loader::receivedAllData):
        Remove ref() call that was left around by mistake.

2006-12-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim H.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11758
        Don't compile custom SVG and XSLT bindings in non-svg build

        * bindings/js/JSSVGNumber.cpp:
        * bindings/js/JSSVGNumber.h:
        * bindings/js/JSSVGPoint.cpp:
        * bindings/js/JSSVGPoint.h:
        * bindings/js/JSSVGRect.cpp:
        * bindings/js/JSSVGRect.h:
        * bindings/js/JSXSLTProcessor.cpp:
        * bindings/js/JSXSLTProcessor.h:

2006-12-04  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        WebCore part of fix for:
        <rdar://problem/4817188> Context menu for bad grammar should include suggestions and "Ignore Grammar"

        The context menu mechanism is currently in flux; the old mechanism is still in place, but an
        up-and-coming new mechanism is waiting in the wings. I updated both of them, but couldn't
        test the new mechanism because it doesn't work well enough yet. Also, some of this code 
        should move from Frame to Editor, but that will wait for another checkin.

        * page/Frame.h:
        added pure virtual function declarations for isSelectionUngrammatical() and guessesForUngrammaticalSelection()

        * bridge/mac/FrameMac.h:
        added virtual functions declarations for isSelectionUngrammatical() and guessesForUngrammaticalSelection()

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::isSelectionMisspelled):
        now updates spelling panel (whether or not it's showing), since this is now needed to make -[NSSSpellChecker
        ignoreWord:inSpellDocumentWithTag:] work correctly
        (WebCore::isRangeUngrammatical):
        new function, helper used by both isSelectionUngrammatical() and guessesForUngrammaticalSelection()
        (WebCore::FrameMac::isSelectionUngrammatical):
        new function, calls isRangeUngrammatical
        (WebCore::FrameMac::guessesForUngrammaticalSelection):
        ditto

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        now considers bad grammar as well as misspellings
        
        * platform/ContextMenuItem.h:
        added ContextMenuItemTagIgnoreGrammar
        
2006-12-05  Pam Greene  <pam@chromium.org>

        Reviewed, tweaked and landed by Alexey.

        <http://bugs.webkit.org/show_bug.cgi?id=11639> Form buttons don't look different when clicked

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::determineState): Moved test for active 
        state before test for hover state, since active should override hover 
        when both are true.

        * platform/gdk/RenderThemeGdk.cpp: 
        (WebCore::RenderThemeGdk::determineState): Same fix.

2006-12-05  Pam Greene  <pam@chromium.org>

        Reviewed and landed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=11681
        Don't select the first option when resetting a listbox-style form 
        control (i.e., a multi-select control or one with size > 1) that
        has no default selection.

        Test: fast/dom/HTMLSelectElement/listbox-select-reset.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::reset):

2006-12-05  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed and landed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=11752
        [CSS 3] missing support for cursor selector 'copy'

        * Resources/copyCursor.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * manual-tests/cursor.html:
        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::copyCursor):
        * rendering/RenderStyle.h:
        (WebCore::):

2006-12-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix from last check-in. This line was badbad.

        * platform/mac/ContextMenuMac.mm:
        (WebCore::ContextMenu::~ContextMenu):

2006-12-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        With the new changes to ContextMenuItems, WebCore context menus 
        stopped appearing at all. And then when I got them to appear, they 
        crashed. This fixes both of these problems.

        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::ContextMenuItem): keyEquivalent cannot 
        be nil. This was causing Obj-C to throw an exception preventing the 
        menus from popping up at all. 
        * platform/mac/ContextMenuMac.mm:
        (+[WebCoreMenuTarget sharedMenuTarget]): Re-name our static 
        MenuTarget so that it is more clear that it is a static and shared 
        WebCoreMenuTarget.
        (WebCore::ContextMenu::ContextMenu): Initialize the 
        WebCoreMenuTarget's controller in the ContextMenu constructor 
        instead of in getNSMenuItem since the controller will only possibly 
        change when a new ContextMenu has been created.
        (WebCore::ContextMenu::~ContextMenu): Set the target's controller 
        to 0.
        (WebCore::getNSMenuItem): A lot of this work is being done other 
        places now. Call new class method on WebCoreMenuTarget to get the 
        shared target.
        (WebCore::ContextMenu::appendItem): We should not be releasing the 
        menuItem here! This caused the crashes I saw.
        (WebCore::ContextMenu::insertItem): Same.

2006-12-04  Anders Carlsson  <acarlsson@apple.com>

        Fix the build.
        
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::~SubresourceLoader):
        Add back the destructor.

2006-12-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.
        
        Change all ResourceHandleClients to be SubresourceLoaderClients instead. Also,
        make SubresourceLoader a ResourceHandleClient. This is a first step towards turning ResourceHandle into a 
        standalone class which doesn't need to know about SubresourceLoader.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::setDefersLoading):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::~SubresourceLoader):
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFailWithError):
        (WebCore::SubresourceLoader::receivedAllData):
        * loader/SubresourceLoader.h:
        (WebCore::SubresourceLoader::loaderAsResourceHandleClient):
        (WebCore::SubresourceLoader::handle):
        * loader/SubresourceLoaderClient.h: Added.
        (WebCore::SubresourceLoaderClient::~SubresourceLoaderClient):
        (WebCore::SubresourceLoaderClient::willSendRequest):
        (WebCore::SubresourceLoaderClient::didReceiveResponse):
        (WebCore::SubresourceLoaderClient::didReceiveData):
        (WebCore::SubresourceLoaderClient::didFinishLoading):
        (WebCore::SubresourceLoaderClient::didFailWithError):
        (WebCore::SubresourceLoaderClient::receivedAllData):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::stopLoading):
        (WebCore::IconLoader::didReceiveResponse):
        (WebCore::IconLoader::didReceiveData):
        (WebCore::IconLoader::didFailWithError):
        (WebCore::IconLoader::didFinishLoading):
        (WebCore::IconLoader::clearLoadingState):
        * loader/icon/IconLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::receivedAllData):
        (WebCore::Loader::didFailWithError):
        (WebCore::Loader::didReceiveResponse):
        (WebCore::Loader::didReceiveData):
        (WebCore::Loader::cancelRequests):
        * loader/loader.h:
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::finishJobAndHandle):
        (WebCore::ResourceHandle::loader):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::didFailWithError):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::willSendRequest):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/xmlhttprequest.h:

2006-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix another part of http://bugs.webkit.org/show_bug.cgi?id=11628
          REGRESSION (r17597): Command-return in text fields doesn't open a new tab or window

        This fixes command-return when the focus is on a link.
        Despite the title of the bug, Mitz wanted me to fix both, and I will not
        say no to him!

        Test: fast/events/simulated-key-state.html

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchSimulatedMouseEvent): Instead of always passing
        false for all the key state in simulated mouse events, pass the state from the
        first underlying event in the chain that has key state; in the case in the bug,
        the keyboard event will be the underlying event itself and we'll propagate the
        alt key modifier to the mouse event, resulting in the effect we want. It's nice
        that JavaScript also gets to see the proper modifiers in the mouse event.

        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::defaultEventHandler):
        Added code to pass in an underlying event to dispatchSimulatedClick. After looking
        at all the other callers, this seems to be the only one that needs to pass an
        event that is currently passing 0. Also removed the code that only simulated a
        click when the event has a PlatformKeyboardEvent -- no reason for that and it
        prevented me from writing a layout test for the fix. 

        * dom/UIEventWithKeyState.h: Added findEventWithKeyState function that walks the
        underlyingEvent chain to find the first event that has key state. This already
        existed in WebKit, but I wanted to use it in dispatchSimulatedMouseEvent.
        * dom/UIEventWithKeyState.cpp: Added.

        * CMakeLists.txt: Added UIEventWithKeyState.cpp.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Added UIEventWithKeyState.cpp.
        * WebCore.xcodeproj/project.pbxproj: Added UIEventWithKeyState.cpp.
        * WebCoreSources.bkl: Added UIEventWithKeyState.cpp.

        * WebCore.exp: Added findEventWithKeyState, used by WebKit.

2006-12-04  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Darin.

        - rdar://problem/4833935
        - removed the guards for the "multiple forms submission" issue, which may not be
          an issue anymore and the guards prevent perfectly legitimate websites from
          working correctly.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::setView):
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityPerformAction:]):
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::keyPress):
        * config.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        * loader/FrameLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::receivedMainResourceError):
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::submitForm):
        * page/Frame.cpp:
        (WebCore::Frame::setView):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::mouseDown):
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::keyEvent):

2006-12-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Added support for Dashboard backward compatibility mode.
        
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::stroke): Added support for old behavior
        of automatically clearing the stroke path buffer after a call to stroke().
        * html/HTMLCanvasElement.cpp: Added supoprt for old behavior of the canvas
        tag being self-closing.
        (WebCore::HTMLCanvasElement::endTagRequirement):
        (WebCore::HTMLCanvasElement::tagPriority):
        * html/HTMLCanvasElement.h:
        * html/HTMLParser.cpp: Ditto.
        (WebCore::HTMLParser::canvasCreateErrorCheck):
        * xml/xmlhttprequest.cpp: Added support for old behavior of silently ignoring
        a call to setRequestHeader() if it preceded a call to open() or followed a call
        to send().
        (WebCore::XMLHttpRequest::setRequestHeader):

2006-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Alice.

        * bridge/EditorClient.h: Removed "_web_" prefix from
        C++ userVisibleString member function. Alice will probably change
        this so it's not on the editor client any more later.

        * editing/Editor.h: Removed "_web_" prefix from
        C++ userVisibleString member function.
        * editing/Editor.cpp: Tweaked formatting a bit. Removed Mac-specific
        code from this file.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::newGeneralClipboard): Removed unnneded local variable.
        (WebCore::Editor::userVisibleString): Moved this function here.

        * platform/Pasteboard.h: Added some FIXMEs. Removed unneeded includes.
        Made Pasteboard noncopyable. Removed use of "protected" where we should
        be using "private". Removed s_generalPasteboard.
        * platform/mac/PasteboardMac.mm: Added some FIXMEs. Removed the
        s_generalPasteboard global. Removed the unused destructor. Updated call
        to userVisibleString for name change. Tweaked formatting.

2006-12-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Moved some constants from EventHandlerMac.mm to EventHandler.cpp
        Added some platform-specific data members and functions.

        * page/EventHandler.cpp:
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        * platform/PlatformMouseEvent.h:
        (WebCore::):
        (WebCore::PlatformMouseEvent::timestamp):
        (WebCore::PlatformMouseEvent::activatedWebView):
        (WebCore::PlatformMouseEvent::type):

2006-12-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin, Geoff.

        Get rid of ResourceHandle::kill(), all it did was to balance out a ref() in ResourceHandle::start().
        We use RefPtrs to ResourceHandle instead.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::~IconLoader):
        (WebCore::IconLoader::stopLoading):
        (WebCore::IconLoader::didReceiveResponse):
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::jobForRequest):
        * loader/loader.h:
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::finishJobAndHandle):
        (WebCore::ResourceHandle::reportError):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::didFinishLoading):

2006-12-04  Oliver Hunt  <oliver@apple.com>

        Build fix for non-SVG builds

        * bindings/js/JSSVGPoint.cpp:
        (WebCore::JSSVGPointProtoFunc::callAsFunction):

2006-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11632
          AKA <rdar://problem/4858866> REGRESSION (r17770): Overflow areas' scrollbars don't work

        No test case added at the moment, but Beth said she'd investigate
        adding one after the fact.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        Fix obvious-in-retrospect copy and paste error -- call
        passMouseDownEventToWidget instead of passWheelEventToWidget.

2006-12-04  Peter Kasting  <pkasting@google.com>

        Reviewed and landed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=11738:
        Make link clicking work again on Windows.

        This re-implements a few functions that used to be part of FrameWin in
        their new loader-based locations, and copies a few things from the Mac
        and Qt event handling code that aren't strictly necessary but are
        pretty simple.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/ChromeClientWin.h:
        * bridge/win/ContextMenuClientWin.h:
        * bridge/win/EditorClientWin.h:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::client):
        * bridge/win/FrameWin.h:
        * loader/win/DocumentLoaderWin.cpp: Added.
        (WebCore::DocumentLoader::setTitle):
        * loader/win/FrameLoaderClientWin.cpp: Added.
        (WebCore::FrameLoaderClientWin::userAgent):
        * loader/win/FrameLoaderClientWin.h:
        * loader/win/FrameLoaderWin.cpp: Added.
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::setTitle):
        * page/win/EventHandlerWin.cpp: Added.
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::EventHandler::tabsToLinks):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::lastEventIsMouseUp):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::FrameLoader::getHistoryLength):
        (WebCore::FrameLoader::historyURL):
        (WebCore::FrameLoader::createFrame):
        (WebCore::FrameLoaderClientWin::setTitle):

2006-12-04  Peter Kasting  <pkasting@google.com>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11748:
        Windows build bustage.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/ContextMenuItem.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::platformDescription):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):

2006-12-04  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders

        Moved EditorMac.mm to its appropriate location

        * platform/mac/EditorMac.mm: Removed.
        * editing/mac/EditorMac.mm: Added

        * WebCore.xcodeproj/project.pbxproj:
        updated for this change

2006-12-04  Rob Buis  <buis@kde.org>

        Reviewed by dhyatt.

        Patch by pmax.

        http://bugs.webkit.org/show_bug.cgi?id=3280
        With LEGEND element, align=right value is not supported
        http://bugs.webkit.org/show_bug.cgi?id=11544
        <legend> rendering doesn't take align into account

        Allow aligning for legends in both RTL and LTR mode.

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::layoutLegend):

2006-12-03  Mark Rowe  <bdash@webkit.org>

        Reviewed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=11730
        Bug 11730: Meta HTTP Refresh that contains a fraction / decimal get ignored.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Parse the refresh interval as a double rather than an integer.

2006-12-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix following bugs:
        http://bugs.webkit.org/show_bug.cgi?id=11734
        http://bugs.webkit.org/show_bug.cgi?id=11685

        SVGPoint/SVGRect/SVGNumber were missing put() support.
        SVGPoint.matrixTransform() was missing.

        In SVG DOM there are no cases where a readwrite property
        exists of type SVGRect/SVGNumber/SVGPoint. Only function
        calls returns instances of these objects. It would make
        no sense to be able to write "someObj.getBbox().x = 100", and
        modify the actual stored internal value of "someObj".

        The only cases where these modification makes sense, is
        when these SVGPoint/SVGRect/SVGNumber objects are created
        via document.rootElement.createSVGPoint/Rect/Number (SVGSVGElement interface).

        Result: The current implementation, where we just modify the stored FloatPoint/FloatRect/double
        values in the JSSVGPoint/Rect/Number wrappers directly, is sufficient.

        Patch created by Rob & me - co production.
        Long live the great carto.next examples! :-)

        * CMakeLists.txt:
        * DerivedSources.make:
        * bindings/js/JSSVGNumber.cpp:
        (WebCore::):
        (WebCore::JSSVGNumber::getOwnPropertySlot):
        (WebCore::JSSVGNumber::getValueProperty):
        (WebCore::JSSVGNumber::put):
        (WebCore::JSSVGNumber::putValueProperty):
        * bindings/js/JSSVGNumber.h:
        (WebCore::JSSVGNumber::):
        (WebCore::JSSVGNumber::impl):
        * bindings/js/JSSVGPoint.cpp:
        (WebCore::JSSVGPoint::JSSVGPoint):
        (WebCore::JSSVGPoint::put):
        (WebCore::JSSVGPoint::putValueProperty):
        (WebCore::JSSVGPointProtoFunc::callAsFunction):
        * bindings/js/JSSVGPoint.h:
        (WebCore::JSSVGPoint::):
        * bindings/js/JSSVGRect.cpp:
        (WebCore::JSSVGRect::put):
        (WebCore::JSSVGRect::putValueProperty):
        * bindings/js/JSSVGRect.h:
        * bindings/objc/DOMSVGPoint.mm:
        (-[DOMSVGPoint matrixTransform:]):
        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::matrixTransform):
        * platform/graphics/FloatPoint.h:

2006-12-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Dave.

        Another missing piece in the platform/graphics move.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ImageAnimationObserver.h: Moved to platform/graphics.

2006-12-03  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=11667
        SVG: method .getTransformToElement(elt) in SVGLocatable not implemented

        Implement getTransformToElement functionality. Introduce virtual
        baseclass SVGLocatable to allow one implementation of the functionality.
        Finally cleanup some code.

        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement):
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGStyledLocatableElement.cpp:
        (WebCore::SVGStyledLocatableElement::SVGStyledLocatableElement):
        (WebCore::SVGStyledLocatableElement::nearestViewportElement):
        (WebCore::SVGStyledLocatableElement::farthestViewportElement):
        (WebCore::SVGStyledLocatableElement::getCTM):
        (WebCore::SVGStyledLocatableElement::getScreenCTM):
        * ksvg2/svg/SVGStyledLocatableElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        (WebCore::SVGStyledTransformableElement::localMatrix):
        (WebCore::SVGStyledTransformableElement::getCTM):
        (WebCore::SVGStyledTransformableElement::getScreenCTM):
        (WebCore::SVGStyledTransformableElement::updateLocalTransform):
        (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
        (WebCore::SVGStyledTransformableElement::nearestViewportElement):
        (WebCore::SVGStyledTransformableElement::farthestViewportElement):
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTransformable.h:

2006-12-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob.

        Move some files around, which have been forgotton in the platform/graphics move.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/GraphicsContextMac.mm: Moved to platform/graphics/mac.
        * platform/qt/GraphicsContextQt.cpp: Moved to platform/grahpics/qt.

2006-12-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mitz.

        Fix non-svg build.

        * platform/graphics/GraphicsContext.h:
        * platform/mac/GraphicsContextMac.mm:

2006-12-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick

        Removed a couple of big chunks of duplicated code from the spelling and grammar stuff by merging
        the find-next-instance functions with the mark-all-instances functions.

        * bridge/mac/FrameMac.mm:
        (WebCore::findFirstMisspellingInRange):
        added markAll parameter, and reworked loop so that if markAll parameter is true, this function loops
        through the entire range and marks each misspelling
        (WebCore::findFirstGrammarDetailInRange):
        extracted from findFirstBadGrammarInRange; loops through the potentially-multiple details in a given
        ungrammatical phrase (e.g., multiple grammar errors in one sentence). Has a markAll parameter akin
        to the one in findFirstMisspellingInRange.
        (WebCore::findFirstBadGrammarInRange):
        added markAll parameter like the one in findFirstMisspellingInRange, and extracted findFirstGrammarDetailInRange
        (WebCore::FrameMac::advanceToNextMisspelling):
        pass "false" for new markAll parameters
        (WebCore::markAllMisspellingsInRange):
        now just calls findFirstMisspellingInRange with markAll = true, thus removing a big hunk of duplicated code
        (WebCore::markAllBadGrammarInRange):
        now just calls findFirstBadGrammarInRange with markAll = true, thus removing a big hunk of duplicated code

2006-12-02  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11672
          REGRESSION (r17068): Repro crash due to painting without layout

        Test: fast/dynamic/containing-block-change.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): Changed the logic used
        to find absolutely positioned descendant's current containing block to
        match the changes made to containingBlock() in the fix for bug 9347.

2006-12-02  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11709
        DeprecatedString::format is broken on Windows

        Use _vscprintf on Windows to compute the length of the buffer that
        vsnprintf would need.

        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::format):
        * platform/String.cpp:
        (WebCore::String::format):

2006-12-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Support for sub-menus in WebCore context menus. This also re-
        architects the ContextMenuItem class so that it is more like
        ContextMenu in that the class is now really just a wrapper for the
        platformDescription

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Add
        place-holders for new tags for the sub-menu items. I will flesh
        these out in a separate check-in.
        * platform/ContextMenu.cpp:
        (WebCore::createFontSubMenu):
        (WebCore::createSpellingAndGrammarSubMenu):
        (WebCore::createSpellingSubMenu):
        (WebCore::createSpeechSubMenu):
        (WebCore::createWritingDirectionSubMenu):
        (WebCore::ContextMenu::populate): Call the above functions to add
        the appropriate sub-menus to editing context menus.
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        (WebCore::): New tags in the ContextMenuAction enumeration.
        (WebCore::ContextMenuItem::parentMenu):
        (WebCore::ContextMenuItem::setType):
        * platform/PlatformMenuDescription.h: Added. This defines
        PlatformMenuDesciption. It needs to be its own header because we
       have to include it from ContextMenu.h and ContextMenuItem.h
        * platform/mac/ContextMenuItemMac.mm: Lots of adjustments here to
        make this class basically just be a wrapper for NSMenuItem.
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::platformDescription):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::setSubMenu):
        * platform/mac/ContextMenuMac.mm:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::getNSMenuItem): Now we only have to get the
        platformDescription of the ContextMenuItem and then set its target
        and action.
        (WebCore::ContextMenu::itemCount):

2006-12-01  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by .

        - accidentally checked in with previous checkin

        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::keyEvent):

2006-12-01  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adam.

        - better solution to the ambiguous reference

        * platform/Widget.h:
        (WebCore::Widget::handleMouseMoveEvent):
        (WebCore::Widget::handleMouseReleaseEvent):
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::keyEvent):
        * platform/win/PlatformScrollBar.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):

2006-12-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4826940>
        Selection change performed even when delete delegate replies NO (11415)

        No layout test for the bug fix, because there's no way to register a custom
        editing delegate from a layout test.  Layout tests are effected by the change
        to avoid sending unnecessary shouldChangeSelections, however. 

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing): Don't bother sending shouldChangeSelection
        if the editing operation didn't change the selection.  Still call
        setSelection though, because it does work in this case that's necessary,
        like clearing the typing style.
        (WebCore::Editor::unappliedEditing): Ditto.
        (WebCore::Editor::reappliedEditing): Ditto.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Don't set the starting
        selection if the editing delegate returns NO from shouldDeleteRange.
        Notice we now call setStartingSelection in the case where
        the current selection was a range selection.  This is fine because
        it's a no-op (the starting selection is already the current selection).
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.

2006-12-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        Move subrange helper function from spellchecking code to TextIterator

        * editing/TextIterator.h:
        added TextIterator::subrange
        * editing/TextIterator.cpp:
        (WebCore::CharacterIterator::advance):
        early return if count is <= 0; assert that it's not < 0
        (WebCore::TextIterator::subrange):
        new function, moved from FrameMac.mmm

        * bridge/mac/FrameMac.mm:
        moved subrange() function to TextIterator
        (WebCore::FrameMac::advanceToNextMisspelling):
        use TextIterator::subrange
        (WebCore::markAllMisspellingsInRange):
        ditto
        (WebCore::markAllBadGrammarInRange):
        ditto

2006-12-01  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11628
          REGRESSION (r17597): Command-return in native text fields doesn't open a new tab or window

        I couldn't think of an easy way to make a regression test for this, but maybe
        I'll get an idea later about how to do it.

        The main thing I did was add a concept of a DOM event having an "underlying event".
        That allows the DOM activate event to contain inside it the original keyboard event
        that triggered the form submission, and thus allows WebKit to see the modifier keys
        from that original event. The code that uses the underlying event is in WebKit, but
        the code to set it up is here in WebCore.

        - also do some clean-up to related event handling code

        * bindings/js/kjs_events.cpp: (KJS::DOMEvent::getValueProperty): Updated for the
        name change of cancelBubble.

        * dom/Event.h: Removed a useless comment. Fixed some whitespace and formatting.
        Renamed getCancelBubble to cancelBubble to match the DOM -- I suspect the old
        name predated the use of the m_ prefix on data members. Added the underlying event,
        and a getter and setter.
        * dom/Event.cpp:
        (WebCore::Event::setTarget): Updated to take a PassRefPtr.
        (WebCore::Event::setUnderlyingEvent): Added.

        * dom/EventTargetNode.h: Added an optional underlyingEvent parameter to
        dispatchUIEvent, one of the overloads of dispatchMouseEvent, and
        dispatchSimulatedMouseEvent. Added a new dispatchSimulatedClick function here that
        mostly replaces the click function in HTMLElement.
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent): Updated for the name change
        of cancelBubble.
        (WebCore::EventTargetNode::dispatchUIEvent): Added an underlying event parameter,
        which gets attached to the UIEvent object after it's created.
        (WebCore::EventTargetNode::dispatchMouseEvent): Tweaked formatting and parameter
        name for the version that creates a mouse event for a real platform mouse event.
        Added an underlying event parameter to the main version, and attached it to all
        three of the events that can be dispatched.
        (WebCore::EventTargetNode::dispatchSimulatedMouseEvent): Added an underlying
        event parameter, passed it along to dispatchMouseEvent.
        (WebCore::EventTargetNode::dispatchSimulatedClick): Moved this here from HTMLElement
        and renamed it from click. Added an underlyingEvent parameter, and passed that along
        in all three of the calls to dispatchSimulatedMouseEvent.

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::shouldClose): Updated call to
        setTarget that no longer needs a get().
        * ksvg2/svg/SVGElement.cpp: (WebCore::SVGElement::sendSVGLoadEventIfPossible): Ditto.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler): Converted a call to click
        to a call to dispatchSimulatedClick.
        (WebCore::HTMLAnchorElement::accessKeyAction): Ditto.
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::accessKeyAction): Ditto.
        * html/HTMLElement.h: Removed the parameters to click and made it non-virtual.
        We could move it down to the input and button elements, now that it's just
        a single function call, but it's also OK to just leave it here.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::click): Removed the parameters and changed this to just
        call dispatchSimulatedClick. The real work is now in dispatchSimulatedClick.
        (WebCore::HTMLElement::accessKeyAction): Converted a call to click to a call to
        dispatchSimulatedClick.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitClick): Ditto. But unlike accessKeyAction callers,
        pass the event along as the underlying event.
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.cpp: Removed override of virtual click function. The
        special cases for the file control and hidden input elements aren't needed.
        (WebCore::HTMLInputElement::accessKeyAction): Converted a call to click to a call to
        dispatchSimulatedClick.
        (WebCore::HTMLInputElement::defaultEventHandler): Converted calls to click to calls to
        dispatchSimulatedClick, passing along the event as the underlying event.
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler): Converted a call to click to a call
        to dispatchSimulatedClick, passing the event along as the underlying event. Also
        changed the local variable for the element to a RefPtr since the code assumes it's
        still around after calling arbitrary JavaScript code.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::accessKeyAction): Converted a call to click to a call to
        dispatchSimulatedClick.

        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::click):
        Removed unneeded ignored parameter to the click function, and also made it non-virtual.

        * loader/NavigationAction.h: Removed unneeded includes.
        * loader/NavigationAction.cpp: Moved all the code here from NavigationActionMac.mm,
        since none of it is Mac-specific any more.
        * loader/mac/NavigationActionMac.mm: Removed.
        * WebCore.xcodeproj/project.pbxproj: Updated for removed file.

        * ksvg2/svg/SVGAElement.cpp: Removed an unnecessary include.

        * loader/FrameLoader.cpp: Added a newly-needed incluude.
        * loader/mac/DocumentLoaderMac.mm: Ditto.
        * loader/mac/FrameLoaderMac.mm: Ditto.
        * rendering/RenderWidget.cpp: Ditto.

2006-12-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        - fixed <rdar://problem/4811175> Many false reports of bad grammar appear, caused by 
          insufficient context passed to grammar checker

        * bridge/mac/FrameMac.mm:
        (WebCore::markAllMisspellingsInRange):
        new function, extracted from markMisspellings -- ignores grammar
        (WebCore::markAllBadGrammarInRange):
        new function, extracted from markMisspellings -- ignores spelling, and operates on
        appropriately-sized chunks of text
        (WebCore::FrameMac::markMisspellings):
        now calls markAllMisspellingsInRange and (optionally) markAllBadGrammarInRange rather
        than trying to interweave the spelling and grammar logic

2006-12-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        With these changes, grammar checking works correctly for the one-by-one case.
        It still doesn't work correctly for the check-as-you-type case; I need to make these
        same kinds of changes in markMisspellings, and refactor to share more code between
        the two cases, but I wanted to get this working code in before modifying it further.

        The major change here is that advanceToNextMisspelling used to look at small chunks of
        text at a time, checking each one for both misspellings and questionable grammar. But
        grammar checking needs at least paragraph-sized chunks of text to have enough context
        to work correctly, so the old mechanism was causing many spurious complaints of bad
        grammar (e.g., almost every word seemed to be at the start of a sentence so the checker
        would complain about missing capitalization). So now the spell checker runs in the
        specified range first. Then the grammar checker runs on the same range (stopping at the
        next misspelling, if any), but expanded to paragraph-aligned boundaries.

        * bridge/mac/FrameMac.mm:
        (WebCore::findFirstMisspellingInRange):
        new function, extracted from advanceToNextMisspelling, and ignores grammar
        (WebCore::paragraphAlignedRangeForRange):
        new function, used by findNextBadGrammarInRange
        (WebCore::findFirstBadGrammarInRange):
        new function, extracted from advanceToNextMisspelling, and rewritten to use paragraph-aligned
        chunks, and ignores spelling
        (WebCore::subrange):
        new helper function, used by advanceToNextMisspelling
        (WebCore::FrameMac::advanceToNextMisspelling):
        now calls out to both findFirstMisspellingInRange and findFirstBadGrammarInRange separately
        instead of trying to interweave the spelling and grammar logic

2006-12-01  Peter Kasting  <pkasting@google.com>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11732:
        Windows build bustage.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/ChromeClientWin.h:
        * bridge/win/ContextMenuClientWin.h:
        * bridge/win/EditorClientWin.h:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::keyPress):
        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderClientWin.h:
        * platform/ContextMenu.h:
        * platform/Widget.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ChromeClientWin::chromeDestroyed):
        (WebCore::ChromeClientWin::addMessageToConsole):
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenuClientWin::contextMenuDestroyed):
        (WebCore::ContextMenuClientWin::contextMenuItemSelected):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::Editor::newGeneralClipboard):
        (WebCore::EditorClientWin::pageDestroyed):
        (WebCore::EditorClientWin::smartInsertDeleteEnabled):
        (WebCore::EditorClientWin::shouldInsertNode):
        (WebCore::FrameLoader::createPlugin):
        (WebCore::FrameLoaderClientWin::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientWin::hasWebView):
        (WebCore::FrameLoaderClientWin::canHandleRequest):
        (WebCore::FrameWin::unfocusWindow):
        (WebCore::FrameWin::bindingRootObject):
        (WebCore::FrameWin::issueCopyCommand):
        (WebCore::FrameWin::markMisspellings):
        (WebCore::FrameWin::issueTransposeCommand):
        (WebCore::FrameWin::markedTextRange):
        (WebCore::FrameWin::respondToChangedSelection):
        (WebCore::FrameWin::markMisspellingsInAdjacentWords):
        (WebCore::FrameWin::isSelectionMisspelled):
        (WebCore::FrameWin::guessesForMisspelledSelection):
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::clearTypes):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::~Pasteboard):
        (WebCore::Pasteboard::registerSelectionPasteboardTypes):
        (WebCore::Pasteboard::replaceNBSP):
        (WebCore::Pasteboard::createHandle):
        (WebCore::Pasteboard::createCF_HTMLFromRange):

2006-11-30  Geoffrey Garen  <ggaren@apple.com>

        Rubber Stamped by Anders Carlsson.

        Global rename of Document::focusNode to Document::focusedNode. 'focusNode'
        suggested a command, and conflicted with a different meaning for 'focusNode'
        in the Mozilla selection API.

2006-11-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Justin

        With Darin, fixed a problem in the Range constructors found while implementing grammar checking.
        That revealed another problem in the layout tests involving bad parameters passed to the Range
        constructors.
        
        With these fixes in place, one layout test (editing/execCommand/create-list-from-range-selection.html)
        no longer works as intended. This is apparently due to yet another bug being flushed out somewhere.
        I'm going to update the results for that test and file a separate radar about it, which Justin will
        investigate.

        * dom/Position.h:
        removed equivalentRangeCompliantPosition(), which was declared but not implemented or called.
        
        * dom/Range.cpp:
        (WebCore::Range::Range):
        Call setStart and setEnd in the two Range constructors that take parameters, rather than just 
        directly setting the instance variables. This makes Range perform the boundary checks and
        compensations that the DOM spec requires.
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        Use rangeCompliantEquivalent() on "editing-style" Positions before creating Ranges from them.
        
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        Assert that the boundary points of the range are valid.

2006-11-30  Lou Amadio  <lamadio@apple.com>

        Reviewed by Dave Hyatt
        Cleaned up generated files.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isRecognizedTagName):
                Uses the new method for retrieving the list of supported tags
        * ksvg2/scripts/make_names.pl:
                Generates tag lists without using macros.

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

        Reviewed by Beth.

        Store ContextMenu's NSMutableArray inside a RetainPtr so that we
        will retain/release it correctly.

        * WebCore.exp:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Added a FIXME.
        * platform/ContextMenu.h:
        * platform/mac/ContextMenuMac.mm: 
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::getNSMenuItem):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::platformDescription):

2006-11-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Rubber stamped by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10383
     
        This is the final patch after the long "die kcanvas" journey.

        All old kcanvas code is gone now, and properly integrated within
        WebCore (stuff like GraphicsContext changes etc.). It shares
        the platform/ design concept: no subclassing, but instead
        implementing parts of the classes/methods per-platform.

        This commit removes the last pieces: KRenderingDevice & KRenderingDeviceContext.
        This layer was just obsolete, given the powerful GraphicsContext API we have
        since quite a while now. All the ugly pushContext/popContext stuff is gone now.

        LayoutTests affected: svg/W3C-SVG-1.1/pservers-grad-11-b.svg
        Radial gradients as fill color for texts, work again!
        Though "Gradient on text stroke" remains broken. Funny thing:
        With this patch, if you "select" the text using the mouse, as
        soon as the selection rectangle is drawn, you see the correct
        gradient on stroke rendering - at least a hint where it breaks!

        All svg layout tests have subtle text rendering changes - with and without this
        patch, it seems it was forgotton to update svg pixel test baseline, a while ago.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/device/KRenderingDevice.cpp: Removed.
        * kcanvas/device/KRenderingDevice.h: Removed.
        * kcanvas/device/qt/KRenderingDeviceQt.cpp: Removed.
        * kcanvas/device/qt/KRenderingDeviceQt.h: Removed.
        * kcanvas/device/qt/RenderPathQt.cpp: Moved to platform/graphics/qt
        * kcanvas/device/quartz/KCanvasItemQuartz.cpp: Moved to platform/graphics/svg/cg/RenderPathCg.cpp
        * kcanvas/device/quartz/KRenderingDeviceQuartz.cpp: Removed.
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h: Removed.
        * kcanvas/device/quartz/QuartzSupport.cpp: Moved to platform/graphics/svg/cg/CgSupport.cpp
        * kcanvas/device/quartz/QuartzSupport.h: Moved to platform/graphics/svg/cg/CgSupport.h
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::sharedSolidPaintServer):
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGClipPathElement.cpp:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        (WebCore::SVGFEComponentTransferElement::parseMappedAttribute):
        (WebCore::SVGFEComponentTransferElement::filterEffect):
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::filterEffect):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        (WebCore::SVGFEDiffuseLightingElement::updateLights):
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::SVGFEDistantLightElement):
        (WebCore::SVGFEDistantLightElement::lightSource):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::SVGFEFloodElement):
        (WebCore::SVGFEFloodElement::parseMappedAttribute):
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEFuncAElement.cpp:
        * ksvg2/svg/SVGFEFuncBElement.cpp:
        * ksvg2/svg/SVGFEFuncGElement.cpp:
        (WebCore::SVGFEFuncGElement::SVGFEFuncGElement):
        * ksvg2/svg/SVGFEFuncRElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        (WebCore::SVGFEImageElement::parseMappedAttribute):
        (WebCore::SVGFEImageElement::notifyFinished):
        (WebCore::SVGFEImageElement::filterEffect):
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::filterEffect):
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        (WebCore::SVGFEOffsetElement::parseMappedAttribute):
        (WebCore::SVGFEOffsetElement::filterEffect):
        * ksvg2/svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::lightSource):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (WebCore::SVGFESpecularLightingElement::filterEffect):
        (WebCore::SVGFESpecularLightingElement::updateLights):
        * ksvg2/svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::SVGFESpotLightElement):
        (WebCore::SVGFESpotLightElement::lightSource):
        * ksvg2/svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        (WebCore::SVGFETileElement::parseMappedAttribute):
        (WebCore::SVGFETileElement::filterEffect):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::filterEffect):
        * ksvg2/svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::canvasResource):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::drawMaskerContent):
        (WebCore::SVGMaskElement::canvasResource):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::canvasResource):
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledElement.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/svg/SVGPaintServer.h:
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        * platform/graphics/svg/SVGPaintServerSolid.h:
        * platform/graphics/svg/SVGResource.cpp:
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceClipper.h:
        * platform/graphics/svg/SVGResourceFilter.h:
        * platform/graphics/svg/SVGResourceMasker.h:
        * platform/graphics/svg/cg/RenderPathCg.cpp: Added.
        * platform/graphics/svg/cg/SVGPaintServerCg.cpp:
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::teardown):
        (WebCore::SVGPaintServer::renderPath):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::renderPath):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::teardown):
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * platform/graphics/svg/cg/SVGResourceClipperCg.cpp:
        (WebCore::SVGResourceClipper::applyClip):
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::createFilterEffect):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm:
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        (WebCore::SVGPaintServerLinearGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerPatternQt.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp:
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::teardown):
        (WebCore::SVGPaintServer::renderPath):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        (WebCore::setup):
        * platform/graphics/svg/qt/SVGPaintServerSolidQt.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * platform/graphics/svg/qt/SVGResourceClipperQt.cpp:
        (WebCore::SVGResourceClipper::applyClip):
        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp:
        (WebCore::SVGResourceFilter::createFilterEffect):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * platform/graphics/svg/qt/SVGResourceMaskerQt.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::setFillRule):
        (WebCore::GraphicsContext::currentPath):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::contextForImage):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::RenderSVGInline):
        (WebCore::RenderSVGInline::createInlineBox):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::RenderSVGInlineText):
        * rendering/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::RenderSVGTSpan):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):

2006-11-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed up garbage collection at window close time.

        * bindings/js/kjs_proxy.cpp: Don't garbage collect in the KJSProxy
        destructor, since the global object hasn't been freed yet.
        * bindings/js/kjs_proxy.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachFromParent): Made this function cross-
        platform.
        * loader/FrameLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::setTitle): Moved this function to FrameLoaderMac,
        since it's Mac-only.
        (WebCore::FrameLoader::closeBridge):
        * page/Page.cpp:
        (WebCore::Page::~Page): Don't garbage collect in the Page destructor,
        since the Interpreter destructor will do it for us.

2006-11-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim's rubberstamp

        Amazingly, DocumentLoader.h survived all this time without a header guard...

        * loader/DocumentLoader.h:  Added header guard

2006-11-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady and Eric.

        XMLHttpRequest fails in a page loaded with WebFrame's loadHTMLString: or loadData:
        http://bugs.webkit.org/show_bug.cgi?id=11723

        Allow cross-domain XMLHTTPRequest for applewebdata URLs. No automated way to test,
        tested in Safari's debug Snippet Editor.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::urlMatchesDocumentDomain):

2006-11-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Get rid of PlatformResponse, the platform specific response object is stored inside of 
        the ResourceResponse object now. This also gets rid of receivedResponse in ResourceHandleClient.
        
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::response):
        * loader/loader.cpp:
        * loader/loader.h:
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::didReceiveResponse):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::nsURLResponse):
        (WebCore::ResourceResponse::cfURLResponse):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveResponse):

2006-11-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by sullivan
        
        <rdar://problem/4845371>
        In Mail, a crash occurs at WebCore::Node::traverseNextNode() when cutting selected text from a HTML message
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd): The start/end were
        being inflated even when they were the start/end of a partially selected
        special element.

2006-11-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Fix fast/dom/xmlhttprequest-get layout test failure.
        
        * platform/network/mac/ResourceResponseMac.mm:
        Initialize the status code to 0 for non-http responses.
        
2006-11-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=11712
        REGRESSION: Crash when clicking JS link on crateandbarrel.com (window.open("http[...]"))
        
        This was an accidental commit by Anders.

        Chrome can't use the FrameView at window.open time, because it doesn't
        exist yet.
        
        * page/Chrome.cpp:
        (WebCore::Chrome::pageRect):

2006-11-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mitz Pettel.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=11710
        REGRESSION (r17906): Crash in WebCore::FrameMac

        Added null checks for EditorClient, since it can be NULL when the page
        has been destroyed. Removed external access to EditorClient, since it's
        an implementation detail of the Editor.

        No test case because this crash depends on window tear-down. Layout tests
        pass.
        
2006-11-29  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::receivedResponse):
        Fix tyop.

2006-11-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Have ResourceResponse hold on to the platform object and do lazy
        initialization of the data members.
        
        * WebCore.xcodeproj/project.pbxproj:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * platform/network/ResourceRequest.cpp:
        (WebCore::ResourceRequest::updatePlatformRequest):
        (WebCore::ResourceRequest::updateResourceRequest):
        * platform/network/ResourceResponse.cpp: Added.
        (WebCore::ResourceResponse::url):
        (WebCore::ResourceResponse::mimeType):
        (WebCore::ResourceResponse::expectedContentLength):
        (WebCore::ResourceResponse::textEncodingName):
        (WebCore::ResourceResponse::suggestedFilename):
        (WebCore::ResourceResponse::httpStatusCode):
        (WebCore::ResourceResponse::setHTTPStatusCode):
        (WebCore::ResourceResponse::httpStatusText):
        (WebCore::ResourceResponse::setHTTPStatusText):
        (WebCore::ResourceResponse::httpHeaderField):
        (WebCore::ResourceResponse::httpHeaderFields):
        (WebCore::ResourceResponse::setExpirationDate):
        (WebCore::ResourceResponse::expirationDate):
        (WebCore::ResourceResponse::setLastModifiedDate):
        (WebCore::ResourceResponse::lastModifiedDate):
        (WebCore::ResourceResponse::updateResourceResponse):
        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::isMultipart):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::receivedResponse):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceResponseMac.h: Removed.
        * platform/network/mac/ResourceResponseMac.mm:
        (-[NSURLResponse WebCore]):

2006-11-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        A fix for a couple failing layout tests involving copy/cut in iframes.

        * bridge/EditorClient.h:
        Add frame parameter to dataForArchivedSelectionInFrame instead of
        just getting the webview's selectedFrame.

        * platform/mac/PasteboardMac.mm:
        (Pasteboard::writeSelection):
        Pass in the frame

2006-11-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/4844855> Should clarify when to create clients in 
        the WebCore client API
        
        All clients must now be supplied as constructor arguments. This clarifies 
        when you need to create clients, and also guarantees that objects can't 
        (for the most part) be in a clientless state.

        Layout tests pass. No leaks reported.
        
        * bridge/mac/WebCoreFrameBridge.mm: I had to move some initialization up into
        WebKit to resolve circular dependencies at init time.

2006-11-28  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Add platform-specific constructor/destructor to ContextMenu so we can
        properly retain/release the platform menu description.

        * platform/ContextMenu.h:
        (WebCore::ContextMenu::platformDescription):
        * platform/mac/ContextMenuMac.mm:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::getNSMenuItem):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::setPlatformDescription):

2006-11-28  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/network/mac/ResourceRequestMac.mm:

2006-11-28  David Harrison  <harrison@apple.com>

        Reviewed by Adele.

        <rdar://problem/4852804> selection color does not get drawn over the missing image rectangle

        Test:
        * editing/selection/select-missing-image.html: Added.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        Draw the selection tint even if the image itself is not available.

2006-11-28  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Have ResourceRequest hold on to the platform object so we don't
        have to convert back and forth when nothing in the object changes.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        * page/Chrome.cpp:
        (WebCore::Chrome::pageRect):
        * platform/network/ResourceRequest.cpp: Added.
        (WebCore::ResourceRequest::isEmpty):
        (WebCore::ResourceRequest::url):
        (WebCore::ResourceRequest::setURL):
        (WebCore::ResourceRequest::cachePolicy):
        (WebCore::ResourceRequest::setCachePolicy):
        (WebCore::ResourceRequest::timeoutInterval):
        (WebCore::ResourceRequest::setTimeoutInterval):
        (WebCore::ResourceRequest::mainDocumentURL):
        (WebCore::ResourceRequest::setMainDocumentURL):
        (WebCore::ResourceRequest::httpMethod):
        (WebCore::ResourceRequest::setHTTPMethod):
        (WebCore::ResourceRequest::httpHeaderFields):
        (WebCore::ResourceRequest::httpHeaderField):
        (WebCore::ResourceRequest::setHTTPHeaderField):
        (WebCore::ResourceRequest::httpBody):
        (WebCore::ResourceRequest::setHTTPBody):
        (WebCore::ResourceRequest::allowHTTPCookies):
        (WebCore::ResourceRequest::setAllowHTTPCookies):
        (WebCore::ResourceRequest::updatePlatformRequest):
        (WebCore::ResourceRequest::updateResourceRequest):
        (WebCore::ResourceRequest::addHTTPHeaderField):
        (WebCore::ResourceRequest::addHTTPHeaderFields):
        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceRequestMac.h: Removed.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::nsURLRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2006-11-28  Adam Roben  <aroben@apple.com>

        Reviewed by Beth.

        More WebCore context menu work (still not turned on, however).

        Split ContextMenuItem into its own files and make it a class.

        * WebCore.exp: Updated symbols.
        * WebCore.xcodeproj/project.pbxproj: Added new ContextMenuItem files.
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Code cleanup.
        * platform/ContextMenu.h: Split ContextMenuItem into a separate file,
        removed redundant "Menu" part of platformMenuDescription(),
        setPlatformMenuDescription().
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::hitTestResult):
        (WebCore::ContextMenu::platformDescription):
        * platform/ContextMenuItem.h: Added. Made ContextMenuItem a
        full-fledged class.
        (WebCore::):
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::menu):
        (WebCore::ContextMenuItem::platformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::title):
        * platform/mac/ContextMenuItemMac.mm: Added.
        (WebCore::ContextMenuItem::ContextMenuItem):
        * platform/mac/ContextMenuMac.mm: Updated for ContextMenuItem changes.
        (-[MenuTarget forwardContextMenuAction:]):
        (getNSMenuItem): Handle separator items.
        (ContextMenu::appendItem):
        (ContextMenu::itemCount):
        (ContextMenu::insertItem):
        (ContextMenu::setPlatformDescription):
        * page/ContextMenuController.h: Updated declaration, added getter.
        (WebCore::ContextMenuController::contextMenu):

        Added some more context menu plumbing.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::defaultEventHandler): Added code to call the
        ContextMenuController when a context menu event is received.
        * page/ContextMenuClient.h: New client method declaration.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Set the event
        defaultHandled after handling it.
        (WebCore::ContextMenuController::contextMenuItemSelected): Take a
        ContextMenuItem instead of a separate action and title.

        Changed event-handling methods to return bools to signify whether the
        event was handled or not. This is needed so we can know whether to hand
        the event off to the OS. Also restructured some code to use early
        returns instead of nesting ifs.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventDoubleClick):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::canMouseDownStartSelect):
        * page/EventHandler.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::handleMouseMoveEvent):
        (WebCore::FrameView::handleMouseReleaseEvent):
        * page/FrameView.h:
        * platform/ScrollBar.h: More bool return values.
        (WebCore::Scrollbar::handleMouseMoveEvent):
        (WebCore::Scrollbar::handleMouseOutEvent):
        * platform/Widget.h: Ditto.
        (WebCore::Widget::handleMouseMoveEvent):
        (WebCore::Widget::handleMouseReleaseEvent):

        Reverted the changes made in r17805 so that we can have fewer header
        #includes.

        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h: Ditto.
        (WebCore::Page::dragCaretController):
        (WebCore::Page::chrome):
        (WebCore::Page::contextMenuController):

2006-11-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Justin and Adam.

        All layout tests pass as they do without this patch

        * WebCore.exp:
        Exposed functions in Editor and removed functions in FrameMac due to changes in WebHTMLView.m

        * WebCore.xcodeproj/project.pbxproj:
        Added Pasteboard.h, PasteboardMac.mm, WebNSAttributedStringExtras.h&mm, EditorMac.mm

        * bridge/EditorClient.h:
        Added smartInsertDeleteEnabled and shouldInsertNode and some mac-specific functions

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        Removed dispatchCPPEvent and [can|try]DHTML[cut|copy|paste] since the Editor's are called now

        * dom/CharacterData.h:
        (WebCore::CharacterData::isCharacterDataNode):
        * dom/Node.h:
        (WebCore::Node::isCharacterDataNode):
        Added a type-identifying function to Node and the proper subclass

        * dom/Clipboard.h:
        Exposed setAccessPolicy as public
        
        * editing/Editor.h:
        * editing/Editor.cpp:
        Implemented the following
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::canDHTMLPaste):
        (WebCore::Editor::canSmartCopyOrDelete):
        (WebCore::Editor::deleteSelection):
        (WebCore::Editor::pasteAsPlainTextWithPasteboard):
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::canSmartReplaceWithPasteboard):
        (WebCore::Editor::shouldInsertFragment):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::replaceSelectionWithText):
        (WebCore::Editor::selectedRange):
        (WebCore::Editor::shouldDeleteRange):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::tryDHTMLPaste):
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::dispatchCPPEvent):
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::paste):
                
        * platform/mac/ClipboardAccessPolicy.h: Removed.
        Not removed, but moved to dom/ClipboardAccessPolicy.h
        
        * platform/mac/EditorMac.mm: Added.
        (WebCore::Editor::newGeneralClipboard):

        * platform/Pasteboard.h: Added.
        * platform/mac/PasteboardMac.mm: Added.
        The pasteboard class follows a singleton pattern
        (Pasteboard::generalPasteboard):
        (Pasteboard::~Pasteboard):
        (Pasteboard::Pasteboard):
        (Pasteboard::clearTypes):
        (Pasteboard::writeSelection):
        (Pasteboard::selectionPasteboardTypes):
        (Pasteboard::canSmartReplace):
        (Pasteboard::plainText):
        (Pasteboard::documentFragment):
        
        * platform/mac/WebNSAttributedStringExtras.h: Added.
        * platform/mac/WebNSAttributedStringExtras.mm: Added.
        Added select portions of this file from WebKit because the pasteboard needed the following function:
        (-[NSAttributedString _web_attributedStringByStrippingAttachmentCharacters]):

2006-11-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4397952>
        Cannot select buttons at the end of a document, preventing copy/paste
        
        There were no VisiblePositions before/after buttons because editingIgnoresContent
        returned false for buttons. 

        * dom/Position.cpp:
        (WebCore::Position::upstream): Fixed a comment.
        (WebCore::Position::downstream): Ditto.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::editingIgnoresContent): It's unnecessary to prefer renderer 
        checks over tag name checks because it seems that a node of a tag name 
        that we do not ignore content for can't have a renderer of a type that we do.
        (WebCore::canHaveChildrenForEditing): Added selects, buttons, applets, and embeds.
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition): Migrate to enclosingBlock.  Fixes a bug where the
        caret would get stuck moving up/down a line from a caret just before an 
        input element.
        (WebCore::nextLinePosition): Ditto.

2006-11-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam.

        Fixed <rdar://problem/4844848> REGRESSION: extra cross-library ref/deref 
        calls cause .5% PLT regression.
        
        Changed ref/deref calls to a single 'xxxDestroyed' call. Moved EditorClient
        from the Frame to the Page, since it's only responsible for
        Webview-level delegate calls.
        
        I don't really love this design, but it fixes the regression and allows
        a single WebKit object to implement multiple client interfaces.
        
        Layout tests pass.

2006-11-27  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the build.
        
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::IntRect):

2006-11-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Getting rid of some of the critical FIXMEs in ContextMenu.cpp.

        * bridge/mac/FrameMac.h: Two new spell checker functions from 
        WebKit. (We will be able to delete the WebKit versions once we 
        switch over to WebCore context menus.)
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::isSelectionMisspelled):
        (WebCore::core): Convert from NSArray of Strings to a Vector of 
        Strings.
        (WebCore::FrameMac::guessesForMisspelledSelection):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canHandleRequest):
        * loader/FrameLoader.h: Make canHandleRequest available through the 
        FrameLoader.
        * loader/FrameLoaderClient.h: canHandleRequest takes a 
        ResourceRequest instead of an NSURLRequest.
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::continueAfterNavigationPolicy): Same
        * page/Frame.h: New spell checker functions moved to Frame. These 
        should be moved some place better some day, but FrameMac currently 
        seems to be the place to be for spell checker stuff.
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Use new FrameLoader and spell 
        checking functionality to get rid of two if (true) statements. Also 
        add spelling guesses to the editing context menus.

2006-11-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=11694
        XSLT output method does not default to HTML when the target document is HTML

        Test: fast/xsl/default-html.html

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::transformToString): Make mimeType an input/output parameter, 
        serving as a hint when the stylesheet doesn't specify the output method.
        (WebCore::XSLTProcessor::transformToFragment): Set mimeType to text/html if the target
        document is HTML.

2006-11-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fixes a crash in SVG caused by an attempt to 
        perform css overflow clipping by preventing
        the css overflow clip from being set in SVG.
        
        <rdar:/problems/4839568>

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::RenderForeignObject):
        * rendering/RenderForeignObject.h:
        * rendering/RenderSVGBlock.cpp: Added.
        (WebCore::RenderSVGBlock::RenderSVGBlock):
        (WebCore::RenderSVGBlock::setStyle):
        * rendering/RenderSVGBlock.h: Added.
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::RenderSVGText):
        * rendering/RenderSVGText.h:

2006-11-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add an explicit IntRect constructor that takes a FloatRect.
        
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::IntRect):
        * platform/graphics/IntRect.h:

2006-11-27  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        Moved WebCoreCache up to WebKit.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreCache.h: Removed.
        * bridge/mac/WebCoreCache.mm: Removed.

2006-11-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Move addMessageToConsole to Chrome.
        
        * bindings/js/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        (KJS::ScheduledAction::execute):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreFrameBridge.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::addMessageToConsole):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.h:

2006-11-27  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=8062
          Caret color in new text field should take background color and foreground color into consideration

        * editing/SelectionController.cpp: (WebCore::SelectionController::paintCaret):
          Use the foreground color of the rootEditableElement to determine the caret color.  This will work well for text controls in web pages (since the root is always the actual form control)
          as well as in editable WebViews, like in Mail, which will just pick up the color from the body element.

2006-11-26  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11693
        Fix the Qt build, adapt to various enum/class renamings.

        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
        (WebCore::KRenderingDeviceQt::createResource):
        (WebCore::KRenderingDeviceQt::createPaintServer):
        * kcanvas/device/qt/KRenderingDeviceQt.h:
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        (WebCore::SVGPaintServerLinearGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp:
        (WebCore::SVGPaintServer::renderPath):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        (WebCore::setup):
        * platform/graphics/svg/qt/SVGPaintServerSolidQt.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2006-11-24  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

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

        Take into account the local transform matrix too and
        so fix getScreenCTM/getCTM for <text>.

        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (SVGStyledTransformableElement::getCTM):
        (SVGStyledTransformableElement::getScreenCTM):
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::getScreenCTM):
        (WebCore::SVGTextElement::getCTM):
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::getCTM):
        (WebCore::SVGTransformable::getScreenCTM):
        * ksvg2/svg/SVGTransformable.h:

2006-11-22  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=11661
        SVG: stroke not sensitive to mouse events (hit testing fails)

        Use mapAbsolutePointToLocal when hit-testing strokes.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::fillContains):
        (WebCore::RenderPath::nodeAtPoint):

2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Mitz.

        General SVG cleanup. Change some enums to match the style guidelines, use PLATFORM(CG) instead of PLATFORM(MAC).
        Remove config.h inluce from AffineTransform.h
        
        * kcanvas/device/quartz/KRenderingDeviceQuartz.cpp:
        (WebCore::KRenderingDeviceQuartz::createPaintServer):
        (WebCore::KRenderingDeviceQuartz::createResource):
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::sharedSolidPaintServer):
        * ksvg2/svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGLinearGradientElement.h:
        (WebCore::SVGLinearGradientElement::gradientType):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::canvasResource):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRadialGradientElement.h:
        (WebCore::SVGRadialGradientElement::gradientType):
        * platform/graphics/AffineTransform.h:
        * platform/graphics/svg/SVGPaintServer.h:
        (WebCore::):
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        (WebCore::SVGPaintServerGradient::~SVGPaintServerGradient):
        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        (WebCore::SVGPaintServerLinearGradient::type):
        * platform/graphics/svg/SVGPaintServerPattern.h:
        (WebCore::SVGPaintServerPattern::type):
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        (WebCore::SVGPaintServerRadialGradient::type):
        * platform/graphics/svg/SVGPaintServerSolid.h:
        (WebCore::SVGPaintServerSolid::type):
        * platform/graphics/svg/SVGResource.h:
        (WebCore::):
        * platform/graphics/svg/cg/SVGPaintServerCg.cpp:
        (WebCore::SVGPaintServer::renderPath):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::updateQuartzGradientCache):
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::renderPath):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):

2006-11-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

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

        Move KRenderingPaintServer* classes to the location
        of all other resources (platform/graphics/svg).

        Soon the whole platform/graphics/svg stuff will bemoved
        into ksvg2/ itself, as discussed with Darin.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingPaintServer.h: Removed.
        * kcanvas/device/KRenderingPaintServerGradient.cpp: Removed.
        * kcanvas/device/KRenderingPaintServerGradient.h: Removed.
        * kcanvas/device/KRenderingPaintServerPattern.cpp: Removed.
        * kcanvas/device/KRenderingPaintServerPattern.h: Removed.
        * kcanvas/device/KRenderingPaintServerSolid.cpp: Removed.
        * kcanvas/device/KRenderingPaintServerSolid.h: Removed.
        * kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp: Removed.
        * kcanvas/device/qt/KRenderingPaintServerGradientQt.h: Removed.
        * kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp: Removed.
        * kcanvas/device/qt/KRenderingPaintServerPatternQt.h: Removed.
        * kcanvas/device/qt/KRenderingPaintServerQt.cpp: Removed.
        * kcanvas/device/qt/KRenderingPaintServerQt.h: Removed.
        * kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp: Removed.
        * kcanvas/device/qt/KRenderingPaintServerSolidQt.h: Removed.
        * kcanvas/device/quartz/KCanvasItemQuartz.h: Removed.
        * kcanvas/device/quartz/KRenderingDeviceQuartz.cpp:
        (WebCore::KRenderingDeviceQuartz::createPaintServer):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.cpp: Removed.
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.cpp: Removed.
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h: Removed.
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::sharedSolidPaintServer):
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::strokePaintServer):
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::canvasResource):
        (WebCore::SVGGradientElement::resourceNotification):
        (WebCore::SVGGradientElement::rebuildStops):
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGLinearGradientElement.h:
        (WebCore::SVGLinearGradientElement::gradientType):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::canvasResource):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRadialGradientElement.h:
        (WebCore::SVGRadialGradientElement::gradientType):
        * platform/graphics/svg/SVGPaintServer.cpp: Added.
        (WebCore::SVGPaintServer::SVGPaintServer):
        (WebCore::SVGPaintServer::~SVGPaintServer):
        (WebCore::SVGPaintServer::activeClient):
        (WebCore::SVGPaintServer::setActiveClient):
        (WebCore::SVGPaintServer::isPaintingText):
        (WebCore::SVGPaintServer::setPaintingText):
        (WebCore::operator<<):
        (WebCore::getPaintServerById):
        * platform/graphics/svg/SVGPaintServer.h: Added.
        (WebCore::):
        (WebCore::SVGPaintServer::isPaintServer):
        * platform/graphics/svg/SVGPaintServerGradient.cpp: Added.
        (WebCore::compareStopOffset):
        (WebCore::operator<<):
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        (WebCore::SVGPaintServerGradient::~SVGPaintServerGradient):
        (WebCore::SVGPaintServerGradient::gradientStops):
        (WebCore::SVGPaintServerGradient::setGradientStops):
        (WebCore::SVGPaintServerGradient::spreadMethod):
        (WebCore::SVGPaintServerGradient::setGradientSpreadMethod):
        (WebCore::SVGPaintServerGradient::boundingBoxMode):
        (WebCore::SVGPaintServerGradient::setBoundingBoxMode):
        (WebCore::SVGPaintServerGradient::gradientTransform):
        (WebCore::SVGPaintServerGradient::setGradientTransform):
        (WebCore::SVGPaintServerGradient::listener):
        (WebCore::SVGPaintServerGradient::setListener):
        (WebCore::SVGPaintServerGradient::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerGradient.h: Added.
        (WebCore::):
        (WebCore::SVGPaintServerGradient::):
        (WebCore::makeGradientStop):
        * platform/graphics/svg/SVGPaintServerLinearGradient.cpp: Added.
        (WebCore::SVGPaintServerLinearGradient::SVGPaintServerLinearGradient):
        (WebCore::SVGPaintServerLinearGradient::~SVGPaintServerLinearGradient):
        (WebCore::SVGPaintServerLinearGradient::gradientStart):
        (WebCore::SVGPaintServerLinearGradient::setGradientStart):
        (WebCore::SVGPaintServerLinearGradient::gradientEnd):
        (WebCore::SVGPaintServerLinearGradient::setGradientEnd):
        (WebCore::SVGPaintServerLinearGradient::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerLinearGradient.h: Added.
        (WebCore::SVGPaintServerLinearGradient::type):
        * platform/graphics/svg/SVGPaintServerPattern.cpp: Added.
        (WebCore::SVGPaintServerPattern::SVGPaintServerPattern):
        (WebCore::SVGPaintServerPattern::~SVGPaintServerPattern):
        (WebCore::SVGPaintServerPattern::bbox):
        (WebCore::SVGPaintServerPattern::setBbox):
        (WebCore::SVGPaintServerPattern::boundingBoxMode):
        (WebCore::SVGPaintServerPattern::setBoundingBoxMode):
        (WebCore::SVGPaintServerPattern::tile):
        (WebCore::SVGPaintServerPattern::setTile):
        (WebCore::SVGPaintServerPattern::patternTransform):
        (WebCore::SVGPaintServerPattern::setPatternTransform):
        (WebCore::SVGPaintServerPattern::listener):
        (WebCore::SVGPaintServerPattern::setListener):
        (WebCore::SVGPaintServerPattern::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerPattern.h: Added.
        (WebCore::SVGPaintServerPattern::type):
        * platform/graphics/svg/SVGPaintServerRadialGradient.cpp: Added.
        (WebCore::SVGPaintServerRadialGradient::SVGPaintServerRadialGradient):
        (WebCore::SVGPaintServerRadialGradient::~SVGPaintServerRadialGradient):
        (WebCore::SVGPaintServerRadialGradient::gradientCenter):
        (WebCore::SVGPaintServerRadialGradient::setGradientCenter):
        (WebCore::SVGPaintServerRadialGradient::gradientFocal):
        (WebCore::SVGPaintServerRadialGradient::setGradientFocal):
        (WebCore::SVGPaintServerRadialGradient::gradientRadius):
        (WebCore::SVGPaintServerRadialGradient::setGradientRadius):
        (WebCore::SVGPaintServerRadialGradient::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerRadialGradient.h: Added.
        (WebCore::SVGPaintServerRadialGradient::type):
        * platform/graphics/svg/SVGPaintServerSolid.cpp: Added.
        (WebCore::SVGPaintServerSolid::SVGPaintServerSolid):
        (WebCore::SVGPaintServerSolid::~SVGPaintServerSolid):
        (WebCore::SVGPaintServerSolid::color):
        (WebCore::SVGPaintServerSolid::setColor):
        (WebCore::SVGPaintServerSolid::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerSolid.h: Added.
        (WebCore::SVGPaintServerSolid::type):
        * platform/graphics/svg/SVGResource.cpp:
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceClipper.cpp:
        * platform/graphics/svg/SVGResourceMarker.cpp:
        * platform/graphics/svg/SVGResourceMasker.cpp:
        * platform/graphics/svg/cg/SVGPaintServerCg.cpp: Added.
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::teardown):
        (WebCore::SVGPaintServer::renderPath):
        (WebCore::SVGPaintServer::strokePath):
        (WebCore::SVGPaintServer::clipToStrokePath):
        (WebCore::SVGPaintServer::fillPath):
        (WebCore::SVGPaintServer::clipToFillPath):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp: Added.
        (WebCore::cgGradientCallback):
        (WebCore::CGShadingRefForLinearGradient):
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::SVGPaintServerGradient::invalidateCaches):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientCache):
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::renderPath):
        (WebCore::SVGPaintServerGradient::setup):
        (WebCore::SVGPaintServerGradient::invalidate):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp: Added.
        (WebCore::patternCallback):
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::teardown):
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp: Added.
        (WebCore::SVGPaintServerSolid::setup):
        * platform/graphics/svg/qt/SVGPaintServerGradientQt.cpp: Added.
        (WebCore::SVGPaintServerGradient::fillColorArray):
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp: Added.
        (WebCore::SVGPaintServerLinearGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerPatternQt.cpp: Added.
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp: Added.
        (WebCore::SVGPaintServer::setPenProperties):
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::teardown):
        (WebCore::SVGPaintServer::renderPath):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp: Added.
        (WebCore::setup):
        * platform/graphics/svg/qt/SVGPaintServerSolidQt.cpp: Added.
        (WebCore::SVGPaintServerSolid::setup):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::writeRenderResources):

2006-11-21  Alex Taylor  <darwin@techvisual.co.nz>

        Reviewed by Mitz.

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

        Adds calculations for bottom right radius's position
        which was being drawn incorrectly.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorder):

2006-11-20  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11519
        REGRESSION: Disabled file upload control doesn't have disabled appearance, failing fast/forms/file-input-disabled.html

        Transport disabled state from DOM element to the shadow
        DOM/render object.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::updateFromElement):
        * rendering/RenderTheme.h:

2006-11-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        * loader/TextResourceDecoder.cpp:
        (WebCore::findXMLEncoding):
        Use CString instead of DeprecatedCString.
        
        * platform/CString.cpp:
        (WebCore::CString::find):
        * platform/CString.h:
        (WebCore::CString::data):
        Add find method, make data method inline.
        
        * platform/TextStream.cpp:
        * platform/TextStream.h:
        Remove DeprecatedCString functions.

2006-11-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Use CString instead of DeprecatedCString.
        
        * html/FormDataList.cpp:
        (WebCore::FormDataList::appendString):
        (WebCore::fixLineBreaks):
        (WebCore::FormDataList::appendFile):

2006-11-20  Samuel Weinig  <sam@webkit.org>

        Reviewed by Alexey.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11656
        Fix Windows build

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/ContextMenuClientWin.h:
        * bridge/win/EditorClientWin.h:
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ContextMenu::show):
        (WebCore::ContextMenuClientWin::copyLinkToClipboard):
        (WebCore::ContextMenuClientWin::downloadURL):
        (WebCore::ContextMenuClientWin::copyImageToClipboard):
        (WebCore::ContextMenuClientWin::lookUpInDictionary):
        (WebCore::EditorClientWin::shouldInsertText):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameWin::ignoreSpelling):
        (WebCore::FrameWin::learnSpelling):

2006-11-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10736
        XMLHttpRequest.responseXML should be null on error

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::wellFormed):
        * dom/XMLTokenizer.h:
        (WebCore::Tokenizer::wellFormed):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::implicitClose):
        * dom/Document.h:
        (WebCore::Document::wellFormed):
        Tell whether XMLTokenizer saw an error. Always true (success) for HTML.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML): Set the document to null if it's not well-formed.

2006-11-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=11633
        Implement XMLDocument properties xmlEncoding, xmlVersion, xmlStandalone

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setXMLVersion):
        (WebCore::Document::setXMLStandalone):
        * dom/Document.h:
        (WebCore::Document::xmlEncoding):
        (WebCore::Document::xmlVersion):
        (WebCore::Document::xmlStandalone):
        (WebCore::Document::setXMLEncoding):
        * dom/Document.idl:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startDocument):
        (WebCore::startDocumentHandler):
        (WebCore::XMLTokenizer::initializeParserContext):
        Added support for these properties, getting them from an libxml2 context.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        HTMLDocument is the only kind of document that doesn't have xmlVersion default to "1.0".

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        Added WK_ucfirst to properly uppercase xmlVersion and xmlStandalone.

2006-11-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob.

        Fix Qt/Linux build.

        * platform/qt/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::ref):
        (WebCore::ContextMenuClientQt::deref):
        (WebCore::ContextMenuClientQt::copyLinkToClipboard):
        (WebCore::ContextMenuClientQt::downloadURL):
        (WebCore::ContextMenuClientQt::copyImageToClipboard):
        (WebCore::ContextMenuClientQt::lookUpInDictionary):
        * platform/qt/ContextMenuClientQt.h:
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::show):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        * platform/qt/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldInsertText):
        * platform/qt/EditorClientQt.h:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::ignoreSpelling):
        (WebCore::FrameQt::learnSpelling):
        * platform/qt/FrameQt.h:
        * platform/qt/TemporaryLinkStubs.cpp:
        (FrameLoader::reload):

2006-11-20  Samuel Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11647
        Fix Win32 build

        * config.h: add #define NOMINMAX for windows build
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/win/TemporaryLinkStubs.cpp: add definitions for 
        new cursors.
        (WebCore::aliasCursor):
        (WebCore::noDropCursor):
        (WebCore::progressCursor):

2006-11-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Implementation of actions for the new context menus.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/EditorClient.h: Declaration of shouldInsertText.
        * bridge/mac/FrameMac.h: Two new spelling functions.
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::ignoreSpelling):
        (WebCore::FrameMac::learnSpelling):
        * editing/Editor.cpp:
        (WebCore::Editor::shouldInsertText): Call into the client.
        * editing/Editor.h:
        * editing/EditorInsertAction.h: Added.
        (WebCore::): The WebCore equivalent of WebViewInsertAction. This is 
        defined in its own header so that we can use it from Editor.h and 
        EditorClient.h without having one of the above include the other.
        * page/ContextMenuClient.h: A few currently WebKit-implemented 
        function needed for menu actions.
        * page/ContextMenuController.cpp:
        (WebCore::makeGoogleSearchURL):
        (WebCore::ContextMenuController::contextMenuActionSelected): The 
        actions!
        * page/ContextMenuController.h:
        * page/Frame.h: New pure-virtual spelling functions.
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::controller): Get the controller from the 
        menu.
        * platform/ContextMenu.h:
        * platform/mac/ContextMenuMac.mm:
        (-[MenuTarget 
        forwardContextMenuAction:initWithContextMenuController:WebCore::]): 
        Use the controller instead of the menu
        (-[MenuTarget WebCore::]):
        (-[MenuTarget setMenuController:WebCore::]):
        (-[MenuTarget forwardContextMenuAction:]):
        (getNSMenuItem):
        (ContextMenu::show):
        (ContextMenu::hide):

2006-11-19  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        http://bugs.webkit.org/show_bug.cgi?id=11649
        Fix CMake files for Qt-only build without KDE cmake files.
        Fix Qt/KDE build for the SVG support.
        Fix Qt-only build in the resource handler.

        * CMakeLists.txt:
        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp: Added.
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::~SVGResourceFilter):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * platform/network/qt/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::slotData):
        (WebCore::ResourceHandleManager::slotMimetype):
        (WebCore::ResourceHandleManager::slotResult):
        (WebCore::ResourceHandleManager::deliverJobData):
        * platform/network/qt/ResourceHandleManager.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/qt/CursorQt.cpp:
        (WebCore::noDropCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):

2006-11-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=11626
          Automate test for rdar://problem/4056100

        * manual-tests/delete-into-nested-block.html: Removed.

2006-11-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

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

        Split up KCanvasFilters & KCanvasFilterQuartz into several
        new classes (SVGFEBlend, SVGFEComposite...) and move them
        into platform/graphics/svg. This is still a temporary location,
        as discussed with Darin; the whole platform/graphics/svg directory
        will probably be moved into ksvg2/ in near future.

        This finally removes the duplicated enumerations in the svg filter
        classes and within kcanvas. ksvg2/ and platform/graphics/svg share
        their enums now. As KCanvasFilters is gone now, The kcanvas/ subdirectory
        is empty.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        * kcanvas/KCanvasFilters.cpp: Removed.
        * kcanvas/KCanvasFilters.h: Removed.
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
        (WebCore::KRenderingDeviceQt::createFilterEffect):
        * kcanvas/device/qt/KRenderingDeviceQt.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.h: Removed.
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm: Removed.
        * kcanvas/device/quartz/KCanvasItemQuartz.cpp:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.cpp:
        (WebCore::KRenderingDeviceQuartz::createResource):
        (WebCore::KRenderingDeviceQuartz::createFilterEffect):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/filters/WKArithmeticFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKArithmeticFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKArithmeticFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKComponentMergeFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKComponentMergeFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKComponentMergeFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKDiffuseLightingFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKDiffuseLightingFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKDiffuseLightingFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKDiscreteTransferFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKDiscreteTransferFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKDiscreteTransferFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKDisplacementMapFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKDisplacementMapFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKDisplacementMapFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKDistantLightFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKDistantLightFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKDistantLightFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKGammaTransferFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKGammaTransferFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKGammaTransferFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKIdentityTransferFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKIdentityTransferFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKLinearTransferFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKLinearTransferFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKLinearTransferFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKNormalMapFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKNormalMapFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKNormalMapFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKPointLightFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKPointLightFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKPointLightFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKSpecularLightingFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKSpecularLightingFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKSpecularLightingFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKSpotLightFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKSpotLightFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKSpotLightFilter.m: Removed.
        * kcanvas/device/quartz/filters/WKTableTransferFilter.cikernel: Removed.
        * kcanvas/device/quartz/filters/WKTableTransferFilter.h: Removed.
        * kcanvas/device/quartz/filters/WKTableTransferFilter.m: Removed.
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::transferFunction):
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::filterEffect):
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        (WebCore::SVGFEDiffuseLightingElement::updateLights):
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::stringToChannel):
        (WebCore::SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::lightSource):
        * ksvg2/svg/SVGFEDistantLightElement.h:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::filterEffect):
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::filterEffect):
        * ksvg2/svg/SVGFEMergeElement.h:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::filterEffect):
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::lightSource):
        * ksvg2/svg/SVGFEPointLightElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::filterEffect):
        (WebCore::SVGFESpecularLightingElement::updateLights):
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource):
        * ksvg2/svg/SVGFESpotLightElement.h:
        * ksvg2/svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::filterEffect):
        * ksvg2/svg/SVGFETileElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::filterEffect):
        * ksvg2/svg/SVGFETurbulenceElement.h:
        (WebCore::):
        * ksvg2/svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        * platform/graphics/FloatPoint3D.cpp: Added.
        (WebCore::FloatPoint3D::FloatPoint3D):
        (WebCore::FloatPoint3D::x):
        (WebCore::FloatPoint3D::setX):
        (WebCore::FloatPoint3D::y):
        (WebCore::FloatPoint3D::setY):
        (WebCore::FloatPoint3D::z):
        (WebCore::FloatPoint3D::setZ):
        (WebCore::FloatPoint3D::normalize):
        * platform/graphics/FloatPoint3D.h: Added.
        * platform/graphics/svg/SVGResourceFilter.cpp: Added.
        (WebCore::SVGResourceFilter::clearEffects):
        (WebCore::SVGResourceFilter::addFilterEffect):
        (WebCore::SVGResourceFilter::filterBBoxForItemBBox):
        (WebCore::SVGResourceFilter::externalRepresentation):
        (WebCore::getFilterById):
        * platform/graphics/svg/SVGResourceFilter.h: Added.
        (WebCore::SVGResourceFilter::isFilter):
        (WebCore::SVGResourceFilter::filterBoundingBoxMode):
        (WebCore::SVGResourceFilter::setFilterBoundingBoxMode):
        (WebCore::SVGResourceFilter::effectBoundingBoxMode):
        (WebCore::SVGResourceFilter::setEffectBoundingBoxMode):
        (WebCore::SVGResourceFilter::filterRect):
        (WebCore::SVGResourceFilter::setFilterRect):
        * platform/graphics/svg/SVGResourceImage.h:
        * platform/graphics/svg/SVGResourceListener.h:
        (SVGResourceListener::SVGResourceListener):
        (SVGResourceListener::~SVGResourceListener):
        * platform/graphics/svg/cg/SVGResourceClipperCg.cpp:
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm: Added.
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::~SVGResourceFilter):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        (WebCore::SVGResourceFilter::getCIFilterStack):
        (WebCore::SVGResourceFilter::imageForName):
        (WebCore::SVGResourceFilter::setImageForName):
        (WebCore::SVGResourceFilter::setOutputImage):
        (WebCore::alphaImageForImage):
        (WebCore::SVGResourceFilter::inputImage):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.h: Removed.
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        * platform/graphics/svg/filters/SVGDistantLightSource.h: Added.
        (WebCore::SVGDistantLightSource::SVGDistantLightSource):
        (WebCore::SVGDistantLightSource::azimuth):
        (WebCore::SVGDistantLightSource::elevation):
        * platform/graphics/svg/filters/SVGFEBlend.cpp: Added.
        (WebCore::SVGFEBlend::in2):
        (WebCore::SVGFEBlend::setIn2):
        (WebCore::SVGFEBlend::blendMode):
        (WebCore::SVGFEBlend::setBlendMode):
        (WebCore::operator<<):
        (WebCore::SVGFEBlend::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEBlend.h: Added.
        (WebCore::):
        * platform/graphics/svg/filters/SVGFEColorMatrix.cpp: Added.
        (WebCore::SVGFEColorMatrix::type):
        (WebCore::SVGFEColorMatrix::setType):
        (WebCore::SVGFEColorMatrix::values):
        (WebCore::SVGFEColorMatrix::setValues):
        (WebCore::operator<<):
        (WebCore::SVGFEColorMatrix::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEColorMatrix.h: Added.
        (WebCore::):
        * platform/graphics/svg/filters/SVGFEComponentTransfer.cpp: Added.
        (WebCore::SVGFEComponentTransfer::redFunction):
        (WebCore::SVGFEComponentTransfer::setRedFunction):
        (WebCore::SVGFEComponentTransfer::greenFunction):
        (WebCore::SVGFEComponentTransfer::setGreenFunction):
        (WebCore::SVGFEComponentTransfer::blueFunction):
        (WebCore::SVGFEComponentTransfer::setBlueFunction):
        (WebCore::SVGFEComponentTransfer::alphaFunction):
        (WebCore::SVGFEComponentTransfer::setAlphaFunction):
        (WebCore::operator<<):
        (WebCore::SVGFEComponentTransfer::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEComponentTransfer.h: Added.
        (WebCore::):
        (WebCore::SVGComponentTransferFunction::SVGComponentTransferFunction):
        * platform/graphics/svg/filters/SVGFEComposite.cpp: Added.
        (WebCore::SVGFEComposite::in2):
        (WebCore::SVGFEComposite::setIn2):
        (WebCore::SVGFEComposite::operation):
        (WebCore::SVGFEComposite::setOperation):
        (WebCore::SVGFEComposite::k1):
        (WebCore::SVGFEComposite::setK1):
        (WebCore::SVGFEComposite::k2):
        (WebCore::SVGFEComposite::setK2):
        (WebCore::SVGFEComposite::k3):
        (WebCore::SVGFEComposite::setK3):
        (WebCore::SVGFEComposite::k4):
        (WebCore::SVGFEComposite::setK4):
        (WebCore::SVGFEComposite::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEComposite.h: Added.
        (WebCore::):
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.cpp: Added.
        (WebCore::SVGFEConvolveMatrix::kernelSize):
        (WebCore::SVGFEConvolveMatrix::setKernelSize):
        (WebCore::SVGFEConvolveMatrix::kernel):
        (WebCore::SVGFEConvolveMatrix::setKernel):
        (WebCore::SVGFEConvolveMatrix::divisor):
        (WebCore::SVGFEConvolveMatrix::setDivisor):
        (WebCore::SVGFEConvolveMatrix::bias):
        (WebCore::SVGFEConvolveMatrix::setBias):
        (WebCore::SVGFEConvolveMatrix::targetOffset):
        (WebCore::SVGFEConvolveMatrix::setTargetOffset):
        (WebCore::SVGFEConvolveMatrix::edgeMode):
        (WebCore::SVGFEConvolveMatrix::setEdgeMode):
        (WebCore::SVGFEConvolveMatrix::kernelUnitLength):
        (WebCore::SVGFEConvolveMatrix::setKernelUnitLength):
        (WebCore::SVGFEConvolveMatrix::preserveAlpha):
        (WebCore::SVGFEConvolveMatrix::setPreserveAlpha):
        (WebCore::operator<<):
        (WebCore::SVGFEConvolveMatrix::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.h: Added.
        (WebCore::):
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.cpp: Added.
        (WebCore::SVGFEDiffuseLighting::SVGFEDiffuseLighting):
        (WebCore::SVGFEDiffuseLighting::~SVGFEDiffuseLighting):
        (WebCore::SVGFEDiffuseLighting::lightingColor):
        (WebCore::SVGFEDiffuseLighting::setLightingColor):
        (WebCore::SVGFEDiffuseLighting::surfaceScale):
        (WebCore::SVGFEDiffuseLighting::setSurfaceScale):
        (WebCore::SVGFEDiffuseLighting::diffuseConstant):
        (WebCore::SVGFEDiffuseLighting::setDiffuseConstant):
        (WebCore::SVGFEDiffuseLighting::kernelUnitLengthX):
        (WebCore::SVGFEDiffuseLighting::setKernelUnitLengthX):
        (WebCore::SVGFEDiffuseLighting::kernelUnitLengthY):
        (WebCore::SVGFEDiffuseLighting::setKernelUnitLengthY):
        (WebCore::SVGFEDiffuseLighting::lightSource):
        (WebCore::SVGFEDiffuseLighting::setLightSource):
        (WebCore::SVGFEDiffuseLighting::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.h: Added.
        * platform/graphics/svg/filters/SVGFEDisplacementMap.cpp: Added.
        (WebCore::SVGFEDisplacementMap::SVGFEDisplacementMap):
        (WebCore::SVGFEDisplacementMap::in2):
        (WebCore::SVGFEDisplacementMap::setIn2):
        (WebCore::SVGFEDisplacementMap::xChannelSelector):
        (WebCore::SVGFEDisplacementMap::setXChannelSelector):
        (WebCore::SVGFEDisplacementMap::yChannelSelector):
        (WebCore::SVGFEDisplacementMap::setYChannelSelector):
        (WebCore::SVGFEDisplacementMap::scale):
        (WebCore::SVGFEDisplacementMap::setScale):
        (WebCore::operator<<):
        (WebCore::SVGFEDisplacementMap::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEDisplacementMap.h: Added.
        (WebCore::):
        * platform/graphics/svg/filters/SVGFEFlood.cpp: Added.
        (WebCore::SVGFEFlood::floodColor):
        (WebCore::SVGFEFlood::setFloodColor):
        (WebCore::SVGFEFlood::floodOpacity):
        (WebCore::SVGFEFlood::setFloodOpacity):
        (WebCore::SVGFEFlood::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEFlood.h: Added.
        * platform/graphics/svg/filters/SVGFEGaussianBlur.cpp: Added.
        (WebCore::SVGFEGaussianBlur::stdDeviationX):
        (WebCore::SVGFEGaussianBlur::setStdDeviationX):
        (WebCore::SVGFEGaussianBlur::stdDeviationY):
        (WebCore::SVGFEGaussianBlur::setStdDeviationY):
        (WebCore::SVGFEGaussianBlur::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEGaussianBlur.h: Added.
        * platform/graphics/svg/filters/SVGFEImage.cpp: Added.
        (WebCore::SVGFEImage::SVGFEImage):
        (WebCore::SVGFEImage::~SVGFEImage):
        (WebCore::SVGFEImage::cachedImage):
        (WebCore::SVGFEImage::setCachedImage):
        (WebCore::SVGFEImage::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEImage.h: Added.
        * platform/graphics/svg/filters/SVGFEMerge.cpp: Added.
        (WebCore::SVGFEMerge::mergeInputs):
        (WebCore::SVGFEMerge::setMergeInputs):
        (WebCore::SVGFEMerge::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEMerge.h: Added.
        * platform/graphics/svg/filters/SVGFEMorphology.cpp: Added.
        (WebCore::SVGFEMorphology::morphologyOperator):
        (WebCore::SVGFEMorphology::setMorphologyOperator):
        (WebCore::SVGFEMorphology::radiusX):
        (WebCore::SVGFEMorphology::setRadiusX):
        (WebCore::SVGFEMorphology::radiusY):
        (WebCore::SVGFEMorphology::setRadiusY):
        (WebCore::operator<<):
        (WebCore::SVGFEMorphology::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEMorphology.h: Added.
        (WebCore::):
        * platform/graphics/svg/filters/SVGFEOffset.cpp: Added.
        (WebCore::SVGFEOffset::dx):
        (WebCore::SVGFEOffset::setDx):
        (WebCore::SVGFEOffset::dy):
        (WebCore::SVGFEOffset::setDy):
        (WebCore::SVGFEOffset::externalRepresentation):
        * platform/graphics/svg/filters/SVGFEOffset.h: Added.
        * platform/graphics/svg/filters/SVGFESpecularLighting.cpp: Added.
        (WebCore::SVGFESpecularLighting::SVGFESpecularLighting):
        (WebCore::SVGFESpecularLighting::~SVGFESpecularLighting):
        (WebCore::SVGFESpecularLighting::lightingColor):
        (WebCore::SVGFESpecularLighting::setLightingColor):
        (WebCore::SVGFESpecularLighting::surfaceScale):
        (WebCore::SVGFESpecularLighting::setSurfaceScale):
        (WebCore::SVGFESpecularLighting::specularConstant):
        (WebCore::SVGFESpecularLighting::setSpecularConstant):
        (WebCore::SVGFESpecularLighting::specularExponent):
        (WebCore::SVGFESpecularLighting::setSpecularExponent):
        (WebCore::SVGFESpecularLighting::kernelUnitLengthX):
        (WebCore::SVGFESpecularLighting::setKernelUnitLengthX):
        (WebCore::SVGFESpecularLighting::kernelUnitLengthY):
        (WebCore::SVGFESpecularLighting::setKernelUnitLengthY):
        (WebCore::SVGFESpecularLighting::lightSource):
        (WebCore::SVGFESpecularLighting::setLightSource):
        (WebCore::SVGFESpecularLighting::externalRepresentation):
        * platform/graphics/svg/filters/SVGFESpecularLighting.h: Added.
        * platform/graphics/svg/filters/SVGFETile.h: Added.
        * platform/graphics/svg/filters/SVGFETurbulence.cpp: Added.
        (WebCore::SVGFETurbulence::type):
        (WebCore::SVGFETurbulence::setType):
        (WebCore::SVGFETurbulence::baseFrequencyY):
        (WebCore::SVGFETurbulence::setBaseFrequencyY):
        (WebCore::SVGFETurbulence::baseFrequencyX):
        (WebCore::SVGFETurbulence::setBaseFrequencyX):
        (WebCore::SVGFETurbulence::seed):
        (WebCore::SVGFETurbulence::setSeed):
        (WebCore::SVGFETurbulence::numOctaves):
        (WebCore::SVGFETurbulence::setNumOctaves):
        (WebCore::SVGFETurbulence::stitchTiles):
        (WebCore::SVGFETurbulence::setStitchTiles):
        (WebCore::operator<<):
        (WebCore::SVGFETurbulence::externalRepresentation):
        * platform/graphics/svg/filters/SVGFETurbulence.h: Added.
        (WebCore::):
        * platform/graphics/svg/filters/SVGFilterEffect.cpp: Added.
        (WebCore::SVGFilterEffect::subRegion):
        (WebCore::SVGFilterEffect::setSubRegion):
        (WebCore::SVGFilterEffect::in):
        (WebCore::SVGFilterEffect::setIn):
        (WebCore::SVGFilterEffect::result):
        (WebCore::SVGFilterEffect::setResult):
        (WebCore::SVGFilterEffect::externalRepresentation):
        (WebCore::operator<<):
        * platform/graphics/svg/filters/SVGFilterEffect.h: Added.
        (WebCore::):
        (WebCore::SVGFilterEffect::SVGFilterEffect):
        (WebCore::SVGFilterEffect::~SVGFilterEffect):
        (WebCore::SVGFilterEffect::effectType):
        * platform/graphics/svg/filters/SVGLightSource.cpp: Added.
        (WebCore::operator<<):
        (WebCore::SVGPointLightSource::externalRepresentation):
        (WebCore::SVGSpotLightSource::externalRepresentation):
        (WebCore::SVGDistantLightSource::externalRepresentation):
        * platform/graphics/svg/filters/SVGLightSource.h: Added.
        (WebCore::):
        (WebCore::SVGLightSource::SVGLightSource):
        (WebCore::SVGLightSource::~SVGLightSource):
        (WebCore::SVGLightSource::type):
        * platform/graphics/svg/filters/SVGPointLightSource.h: Added.
        (WebCore::SVGPointLightSource::SVGPointLightSource):
        (WebCore::SVGPointLightSource::position):
        * platform/graphics/svg/filters/SVGSpotLightSource.h: Added.
        (WebCore::SVGSpotLightSource::SVGSpotLightSource):
        (WebCore::SVGSpotLightSource::position):
        (WebCore::SVGSpotLightSource::direction):
        (WebCore::SVGSpotLightSource::specularExponent):
        (WebCore::SVGSpotLightSource::limitingConeAngle):
        * platform/graphics/svg/filters/cg/SVGFEBlendCg.mm: Added.
        (WebCore::SVGFEBlend::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm: Added.
        (WebCore::SVGFEColorMatrix::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm: Added.
        (WebCore::genImageFromTable):
        (WebCore::setParametersForComponentFunc):
        (WebCore::filterForComponentFunc):
        (WebCore::getFilterForFunc):
        (WebCore::SVGFEComponentTransfer::getFunctionFilter):
        (WebCore::SVGFEComponentTransfer::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFECompositeCg.mm: Added.
        (WebCore::SVGFEComposite::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEDiffuseLightingCg.mm: Added.
        (WebCore::SVGFEDiffuseLighting::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEDisplacementMapCg.mm: Added.
        (WebCore::SVGFEDisplacementMap::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEFloodCg.mm: Added.
        (WebCore::SVGFEFlood::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEGaussianBlurCg.mm: Added.
        (WebCore::SVGFEGaussianBlur::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h: Added.
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.mm: Added.
        (WebCore::getVectorForChannel):
        (WebCore::ciColor):
        (WebCore::getPointLightVectors):
        (WebCore::getLightVectors):
        (WebCore::getNormalMap):
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm: Added.
        (WebCore::SVGFEImage::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEMergeCg.mm: Added.
        (WebCore::SVGFEMerge::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEOffsetCg.mm: Added.
        (WebCore::SVGFEOffset::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFESpecularLightingCg.mm: Added.
        (WebCore::SVGFESpecularLighting::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFETileCg.mm: Added.
        (WebCore::SVGFETile::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFilterEffectCg.mm: Added.
        (WebCore::SVGFilterEffect::getCIFilter):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::getAbsoluteRepaintRect):
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::getAbsoluteRepaintRect):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):

2006-11-18  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11321
        Element with :target pseudo-class still matched after fragment identifier change

        Make sure the page does a style recalculation and possible rendering
        when navigating back from a page with an anchor to a page without
        an anchor.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor):

2006-11-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=11634:
        Fix segfault on startup for Windows build.  Also fix segfault when
        typing in a URL.
        Clean up some of the style of the patch that landed in r17816.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/ChromeClientWin.h:
        (WebCore::ChromeClientWin::~ChromeClientWin):
        (WebCore::ChromeClientWin::ref):
        (WebCore::ChromeClientWin::deref):
        * bridge/win/ContextMenuClientWin.h:
        (WebCore::ContextMenuClientWin::~ContextMenuClientWin):
        (WebCore::ContextMenuClientWin::ref):
        (WebCore::ContextMenuClientWin::deref):
        * bridge/win/EditorClientWin.h:
        (WebCore::EditorClientWin::~EditorClientWin):
        (WebCore::EditorClientWin::ref):
        (WebCore::EditorClientWin::deref):
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * bridge/win/FrameWin.h:
        (WebCore::Win):
        * loader/win/FrameLoaderClientWin.h: Added.
        (WebCore::FrameLoaderClientWin::~FrameLoaderClientWin):
        (WebCore::FrameLoaderClientWin::ref):
        (WebCore::FrameLoaderClientWin::deref):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ChromeClientWin::createWindow):
        (WebCore::ChromeClientWin::createModalDialog):
        (WebCore::EditorClientWin::selectWordBeforeMenuEvent):
        (WebCore::EditorClientWin::isEditable):
        (WebCore::EditorClientWin::shouldBeginEditing):
        (WebCore::EditorClientWin::shouldEndEditing):
        (WebCore::EditorClientWin::shouldApplyStyle):
        (WebCore::EditorClientWin::didBeginEditing):
        (WebCore::EditorClientWin::respondToChangedContents):
        (WebCore::EditorClientWin::didEndEditing):
        (WebCore::EditorClientWin::registerCommandForUndo):
        (WebCore::EditorClientWin::registerCommandForRedo):
        (WebCore::EditorClientWin::clearUndoRedoOperations):
        (WebCore::EditorClientWin::canUndo):
        (WebCore::EditorClientWin::canRedo):
        (WebCore::EditorClientWin::undo):
        (WebCore::EditorClientWin::redo):
        (WebCore::FrameLoader::createFrame):
        (WebCore::FrameLoader::createPlugin):
        (WebCore::FrameLoaderClientWin::hasWebView):
        (WebCore::FrameLoaderClientWin::hasFrameView):
        (WebCore::FrameLoaderClientWin::hasBackForwardList):
        (WebCore::FrameLoaderClientWin::resetBackForwardList):
        (WebCore::FrameLoaderClientWin::provisionalItemIsTarget):
        (WebCore::FrameLoaderClientWin::loadProvisionalItemFromPageCache):
        (WebCore::FrameLoaderClientWin::invalidateCurrentItemPageCache):
        (WebCore::FrameLoaderClientWin::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientWin::makeDocumentView):
        (WebCore::FrameLoaderClientWin::makeRepresentation):
        (WebCore::FrameLoaderClientWin::forceLayout):
        (WebCore::FrameLoaderClientWin::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientWin::updateHistoryForCommit):
        (WebCore::FrameLoaderClientWin::updateHistoryForBackForwardNavigation):
        (WebCore::FrameLoaderClientWin::updateHistoryForReload):
        (WebCore::FrameLoaderClientWin::updateHistoryForStandardLoad):
        (WebCore::FrameLoaderClientWin::updateHistoryForInternalLoad):
        (WebCore::FrameLoaderClientWin::updateHistoryAfterClientRedirect):
        (WebCore::FrameLoaderClientWin::setCopiesOnScroll):
        (WebCore::FrameLoaderClientWin::tokenForLoadErrorReset):
        (WebCore::FrameLoaderClientWin::resetAfterLoadError):
        (WebCore::FrameLoaderClientWin::doNotResetAfterLoadError):
        (WebCore::FrameLoaderClientWin::willCloseDocument):
        (WebCore::FrameLoaderClientWin::detachedFromParent1):
        (WebCore::FrameLoaderClientWin::detachedFromParent2):
        (WebCore::FrameLoaderClientWin::detachedFromParent3):
        (WebCore::FrameLoaderClientWin::detachedFromParent4):
        (WebCore::FrameLoaderClientWin::loadedFromPageCache):
        (WebCore::FrameLoaderClientWin::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientWin::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientWin::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientWin::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientWin::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientWin::dispatchWillClose):
        (WebCore::FrameLoaderClientWin::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientWin::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientWin::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientWin::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientWin::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientWin::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientWin::dispatchShow):
        (WebCore::FrameLoaderClientWin::cancelPolicyCheck):
        (WebCore::FrameLoaderClientWin::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientWin::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientWin::clearLoadingFromPageCache):
        (WebCore::FrameLoaderClientWin::isLoadingFromPageCache):
        (WebCore::FrameLoaderClientWin::revertToProvisionalState):
        (WebCore::FrameLoaderClientWin::clearUnarchivingState):
        (WebCore::FrameLoaderClientWin::progressStarted):
        (WebCore::FrameLoaderClientWin::progressCompleted):
        (WebCore::FrameLoaderClientWin::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientWin::willChangeTitle):
        (WebCore::FrameLoaderClientWin::didChangeTitle):
        (WebCore::FrameLoaderClientWin::finishedLoading):
        (WebCore::FrameLoaderClientWin::finalSetupForReplace):
        (WebCore::FrameLoaderClientWin::setDefersLoading):
        (WebCore::FrameLoaderClientWin::isArchiveLoadPending):
        (WebCore::FrameLoaderClientWin::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientWin::clearArchivedResources):
        (WebCore::FrameLoaderClientWin::canShowMIMEType):
        (WebCore::FrameLoaderClientWin::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientWin::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientWin::frameLoadCompleted):
        (WebCore::FrameLoaderClientWin::restoreScrollPositionAndViewState):
        (WebCore::FrameLoaderClientWin::provisionalLoadStarted):
        (WebCore::FrameLoaderClientWin::shouldTreatURLAsSameAsCurrent):
        (WebCore::FrameLoaderClientWin::addHistoryItemForFragmentScroll):
        (WebCore::FrameLoaderClientWin::didFinishLoad):
        (WebCore::FrameLoaderClientWin::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientWin::setTitle):
        (WebCore::FrameLoaderClientWin::userAgent):

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

        Reviewed by Rob (yay!).

        http://bugs.webkit.org/show_bug.cgi?id=11640
        XMLHttpRequest produces undefined:undefined HTTP authentication

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestProtoFunc::callAsFunction):
        Treat undefined credentials as missing ones.

2006-11-17  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=11638
        [CSS 2.1+3] add support for alias, progress, no-drop and not-allowed cursor styles

        * Resources/aliasCursor.png: Added.
        * Resources/noDropCursor.png: Added.
        * Resources/progressCursor.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * manual-tests/cursor.html:
        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::handCursor):
        (WebCore::aliasCursor):
        (WebCore::progressCursor):
        (WebCore::noDropCursor):
        * rendering/RenderStyle.h:
        (WebCore::):

2006-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Properly adjust CFAbsoluteTime to time_t to fix date calculations.
        
        Compare lastModified w/ MAX_TIME_T when setting last modified date
        instead of comparing expiration against MAX_TIME_T.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::getResourceResponse): Add kCFAbsoluteTimeIntervalSince1970 in assignment

2006-11-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        More conversions from DeprecatedValueList to Vector and HashSet.
        
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::~CSSValueList):
        (WebCore::CSSValueList::append):
        (WebCore::CSSValueList::cssText):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::length):
        (WebCore::CSSValueList::item):
        * dom/Document.cpp:
        (WebCore::Document::attachNodeIterator):
        (WebCore::Document::notifyBeforeNodeRemoval):
        * dom/Document.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::notifyAttributeChange):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::notifyClientsToRepaint):
        * platform/graphics/svg/SVGResource.cpp:
        (WebCore::SVGResource::invalidate):
        (WebCore::SVGResource::addClient):
        * platform/graphics/svg/SVGResource.h:
        * rendering/RenderBlock.h:

=== Safari-521.31 ===

2006-11-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Harrison.

        <rdar://problem/4796730> table deletion elements are serialized out if they are visible when innerHTML or a Web Archive is made

        Disable the delete button controller when cloning nodes, Mail does this before saving a draft.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes):
        * editing/markup.cpp:
        (WebCore::createFragmentFromNodes):

2006-11-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4237467> REGRESSION: Pasting word from quoted text quotes the destination
        <rdar://problem/4017358> quoted text is wrong color, when pasted as quotation

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isMailPasteAsQuotationNode): Added.  Checks for the node
        that Mail wraps around an incoming fragment when it wants it to be pasted
        with quoting (no merging should be done).
        (WebCore::ReplaceSelectionCommand::removeNodePreservingChildren): Added
        this virtual method in order to adjust the nodes that ReplaceSelectionCommand
        tracks.
        (WebCore::ReplaceSelectionCommand::shouldMerge): Don't merge from content
        inside a Mail Paste as Quotation node.  Allow merging from Mail blockquotes.
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles): When pasting into
        a Mail blockquote, we ignore the parts of the source document's default style
        that are overriden by styles from the Mail blockquote.  This is necessary in order
        for text that's black (because black is the source document's default font color) 
        to appear blue/green/whatever when it's pasted into a Mail blockquote.
        (WebCore::ReplaceSelectionCommand::handlePasteAsQuotationNode): Turn an inserted
        Mail Paste as Quotation node into a normal Mail blockquote.  This will prevent
        a copied blockquote that was inserted into the document using Paste as Quotation
        from triggering Paste as Quotation behavior when it's pasted.
        (WebCore::ReplaceSelectionCommand::doApply): Call the new/altered methods.
        * editing/ReplaceSelectionCommand.h:
        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesForElement): Put this code into a subroutine.
        (WebCore::removeEnclosingMailBlockquoteStyle): Added.
        (WebCore::startMarkup): When wrapping text nodes in style spans, leave out
        styles that Mail blockquotes contribute, so that Mail blockquote styles can
        be differentiated from styles that the user has applied.  When creating markup
        for elements, do the same thing.
        (WebCore::createMarkup): Call the new subroutine.

2006-11-17  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11635
        Bug 11635: Fix potential issue with non-xslt build

        Fix the issue and do style guideline corrections.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::sheetLoaded):
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        (WebCore::ProcessingInstruction::setXSLStyleSheet):
        (WebCore::ProcessingInstruction::parseStyleSheet):

2006-11-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Harrison.

        <rdar://problem/4843131> text entry is slow inside element that has the deletion rectangle around it

        Only disable/enable the delete button inside applyCommand() to prevent slowing down typing.
        This reintroduces <rdar://problem/4796657> table deletion outline does not always follow the table size as editing occurs inside

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        (WebCore::EditCommand::unapply):
        (WebCore::EditCommand::reapply):
        (WebCore::applyCommand):
        * editing/EditCommand.h:

2006-11-17  Zack Rusin  <zack@kde.org>

        Reviewed by Mitz. Landed by Niko.

        Making platform Qt/KDE compile and work after
        the latest api changes. Reported as
        http://bugs.webkit.org/show_bug.cgi?id=11617

        * CMakeLists.txt:
        * page/qt/EventHandlerQt.cpp: Added.
        (WebCore::isKeyboardOptionTab):
        (WebCore::EventHandler::tabsToLinks):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::freeClipboard):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::lastEventIsMouseUp):
        (WebCore::EventHandler::dragHysteresisExceeded):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleMouseUp):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::shouldDragAutoNode):
        (WebCore::EventHandler::dispatchDragSrcEvent):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/ContextMenu.h:
        * platform/graphics/svg/qt/SVGResourceClipperQt.cpp:
        (WebCore::SVGResourceClipper::applyClip):
        * platform/qt/ContextMenuClientQt.cpp: Added.
        (WebCore::ContextMenuClientQt::addCustomContextMenuItems):
        (WebCore::ContextMenuClientQt::ref):
        (WebCore::ContextMenuClientQt::deref):
        * platform/qt/ContextMenuClientQt.h: Added.
        * platform/qt/ContextMenuQt.cpp: Added.
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::setPlatformMenuDescription):
        * platform/qt/EditorClientQt.cpp:
        (WebCore::EditorClientQt::selectWordBeforeMenuEvent):
        (WebCore::EditorClientQt::isEditable):
        (WebCore::EditorClientQt::registerCommandForUndo):
        (WebCore::EditorClientQt::registerCommandForRedo):
        (WebCore::EditorClientQt::clearUndoRedoOperations):
        (WebCore::EditorClientQt::canUndo):
        (WebCore::EditorClientQt::canRedo):
        (WebCore::EditorClientQt::undo):
        (WebCore::EditorClientQt::redo):
        * platform/qt/EditorClientQt.h:
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::mousePressEvent):
        * platform/qt/TemporaryLinkStubs.cpp:
        (FrameView::updateBorder):

2006-11-17  David Harrison  <harrison@apple.com>

        Reviewed by Adele.

        <rdar://problem/4799899> Frame::revealSelection() only scrolls the startContainer's layer

        Replace an assert with a fixme that refers to this bug.
        
        * page/Frame.cpp:
        (WebCore::Frame::revealSelection):

2006-11-16  Rob Buis  <buis@kde.org>

        Reviewed and landed by Brady

        Fixes http://bugs.webkit.org/show_bug.cgi?id=11590 -
        REGRESSION (r17726-r17742): Wikipedia page intermittently loads but doesn't render
        Fix the regression by setting m_loadCompleted correctly.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::checkLoaded):
        * dom/Node.h:
        (WebCore::Node::sheetLoaded):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::sheetLoaded):
        * dom/ProcessingInstruction.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::sheetLoaded):
        * html/HTMLLinkElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::sheetLoaded):
        * html/HTMLStyleElement.h:

2006-11-16  David Harrison  <harrison@apple.com>

        Reviewed by Beth.

        <rdar://problem/4056100> REGRESSION (Tiger): Deleting top part of reply email leaves fails to clear text at end of message

        The problem was triggered by the fact that the parent div was changing both
        in position and in height. The renderer normally bifurcates its logic for
        x-position changes vs height changes.

        Call repaintDuringLayoutIfMoved() with old rect (incl. width and height) instead of just the old position.

        Test added:
        * manual-tests/delete-into-nested-block.html
        
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::positionNewFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintDuringLayoutIfMoved):
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::placeChild):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintDuringLayoutIfMoved):
        * rendering/RenderObject.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2006-11-16  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Slider cleanup.  Let the theme set the size of the slider thumb.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setStyle): Moving the thumb's appearance adjustment to createThumbStyle.
        (WebCore::RenderSlider::createThumbStyle):
        (WebCore::RenderSlider::layout): Let the theme set the size of the thumb.
        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::adjustSliderThumbSize):  Added.
        * rendering/RenderTheme.h: ditto.
        * rendering/RenderThemeMac.h: ditto.
        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::adjustSliderThumbSize): ditto.

2006-11-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Use Vector instead of DeprecatedValueList in a few places.
        
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNamedNodesCollection::DOMNamedNodesCollection):
        (KJS::DOMNamedNodesCollection::lengthGetter):
        (KJS::DOMNamedNodesCollection::getOwnPropertySlot):
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::namedItemGetter):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::JSHTMLCollection::getNamedItems):
        * bindings/objc/DOM.mm:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::dashboardRegionsDictionary):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::diff):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::namedItems):
        * html/HTMLCollection.h:
        * kcanvas/KCanvasFilters.cpp:
        (WebCore::KCanvasFilter::externalRepresentation):
        * kcanvas/KCanvasFilters.h:
        (WebCore::KCanvasFEColorMatrix::values):
        (WebCore::KCanvasFEColorMatrix::setValues):
        (WebCore::KCanvasFEConvolveMatrix::kernel):
        (WebCore::KCanvasFEConvolveMatrix::setKernel):
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::getCIFilterStack):
        (WebCore::KCanvasFEColorMatrixQuartz::getCIFilter):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::filterEffect):
        * platform/graphics/svg/SVGResourceClipper.h:
        * platform/graphics/svg/cg/SVGResourceClipperCg.cpp:
        (WebCore::SVGResourceClipper::applyClip):
        * platform/network/FormData.h:
        * rendering/RenderPath.h:
        * rendering/SVGRenderTreeAsText.h:
        (WebCore::operator<<):

2006-11-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim.

        * editing/markup.cpp:
        (WebCore::createMarkup):
        Add null-checks for the frame, it might not exist for all documents.
        
2006-11-16  Peter Kasting  <pkasting@google.com>

        Reviewed and landed by ap.

        http://bugs.webkit.org/show_bug.cgi?id=11509:
        Windows build bustage.

        Also reorganizes WebCore.vcproj to add files whose absence wasn't
        causing compile errors, but which should have been there, and to
        make the include directory ordering (and contents) sane.
        Also reorganizes TemporaryLinkStubs.cpp to put headers and
        function groups in alphabetical order, and ensure that all functions
        in the file call notImplemented().

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/ChromeClientWin.h:
        (WebCore::ChromeClientWin::ref):
        (WebCore::ChromeClientWin::deref):
        * bridge/win/ContextMenuClientWin.h: Added.
        (WebCore::ContextMenuClientWin::~ContextMenuClientWin):
        (WebCore::ContextMenuClientWin::ref):
        (WebCore::ContextMenuClientWin::deref):
        * bridge/win/EditorClientWin.h:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::~FrameWin):
        (WebCore::FrameWin::keyPress):
        * bridge/win/FrameWin.h:
        * bridge/win/PageWin.cpp: Removed.
        * editing/EditCommand.h:
        * loader/FormState.h:
        * loader/FrameLoader.h:
        * page/EventHandler.cpp:
        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedImageMIMETypes):
        * platform/graphics/win/ImageWin.cpp:
        * platform/network/ResourceError.cpp:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onHandleCreated):
        (WebCore::ResourceHandle::onRequestRedirected):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        * platform/win/ScreenWin.cpp:
        (WebCore::monitorInfo):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::screenDepth):
        * platform/win/SoundWin.cpp: Added.
        (WebCore::systemBeep):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CacheObjectExpiresTime):
        (WebCore::CheckCacheObjectStatus):
        (WebCore::CheckIfReloading):
        (WebCore::defaultLanguage):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findNextWordFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findWordBoundary):
        (WebCore::focusRingColor):
        (WebCore::historyContains):
        (WebCore::inputElementAltText):
        (WebCore::IsResponseURLEqualToURL):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::moveCursor):
        (WebCore::verticalTextCursor):
        (WebCore::refreshPlugins):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::ResponseIsMultipart):
        (WebCore::ResponseMIMEType):
        (WebCore::ResponseURL):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::searchableIndexIntroduction):
        (WebCore::ServeSynchronousRequest):
        (WebCore::setFocusRingColorChangeFunction):
        (WebCore::submitButtonDefaultLabel):
        (WebCore::CachedResource::setPlatformResponse):
        (WebCore::CachedResource::setAllData):
        (WebCore::ChromeClientWin::setWindowRect):
        (WebCore::ChromeClientWin::windowRect):
        (WebCore::ChromeClientWin::pageRect):
        (WebCore::ChromeClientWin::scaleFactor):
        (WebCore::ChromeClientWin::focus):
        (WebCore::ChromeClientWin::unfocus):
        (WebCore::ChromeClientWin::createWindow):
        (WebCore::ChromeClientWin::createModalDialog):
        (WebCore::ChromeClientWin::show):
        (WebCore::ChromeClientWin::canRunModal):
        (WebCore::ChromeClientWin::runModal):
        (WebCore::ChromeClientWin::setToolbarsVisible):
        (WebCore::ChromeClientWin::toolbarsVisible):
        (WebCore::ChromeClientWin::setStatusbarVisible):
        (WebCore::ChromeClientWin::statusbarVisible):
        (WebCore::ChromeClientWin::setScrollbarsVisible):
        (WebCore::ChromeClientWin::scrollbarsVisible):
        (WebCore::ChromeClientWin::setMenubarVisible):
        (WebCore::ChromeClientWin::menubarVisible):
        (WebCore::ChromeClientWin::setResizable):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenuClientWin::addCustomContextMenuItems):
        (WebCore::DocumentLoader::setFrame):
        (WebCore::DocumentLoader::frameLoader):
        (WebCore::DocumentLoader::URL):
        (WebCore::DocumentLoader::isStopping):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::setLoading):
        (WebCore::DocumentLoader::updateLoading):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::stopRecordingResponses):
        (WebCore::EditorClientWin::shouldDeleteRange):
        (WebCore::EditorClientWin::shouldShowDeleteInterface):
        (WebCore::EditorClientWin::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientWin::isGrammarCheckingEnabled):
        (WebCore::EditorClientWin::spellCheckerDocumentTag):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleMouseUp):
        (WebCore::EventHandler::lastEventIsMouseUp):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToSubframe):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        (WebCore::EventHandler::shouldDragAutoNode):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::tabsToLinks):
        (WebCore::Frame::setNeedsReapplyStyles):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::overrideMediaType):
        (WebCore::FrameLoader::createJavaAppletWidget):
        (WebCore::FrameLoader::redirectDataToPlugin):
        (WebCore::FrameLoader::getHistoryLength):
        (WebCore::FrameLoader::setTitle):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::saveDocumentState):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::goBackOrForward):
        (WebCore::FrameLoader::historyURL):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::createFrame):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::partClearedInBegin):
        (WebCore::FrameLoader::originalRequestURL):
        (WebCore::FrameLoader::canGoBackOrForward):
        (WebCore::FrameLoader::objectContentType):
        (WebCore::FrameLoader::createPlugin):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameView::updateBorder):
        (WebCore::FrameWin::bindingRootObject):
        (WebCore::FrameWin::canPaste):
        (WebCore::FrameWin::issuePasteAndMatchStyleCommand):
        (WebCore::FrameWin::markedTextRange):
        (WebCore::FrameWin::passSubframeEventToSubframe):
        (WebCore::FrameWin::lastEventIsMouseUp):
        (WebCore::FrameWin::addMessageToConsole):
        (WebCore::FrameWin::shouldChangeSelection):
        (WebCore::FrameWin::respondToChangedSelection):
        (WebCore::FrameWin::clearUndoRedoOperations):
        (WebCore::FrameWin::markMisspellingsInAdjacentWords):
        (WebCore::FrameWin::respondToChangedContents):
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineWidth):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):
        (WebCore::Icon::paint):
        (WebCore::IconDatabase::isIconExpiredForIconURL):
        (WebCore::IconDatabase::hasEntryForIconURL):
        (WebCore::IconDatabase::sharedIconDatabase):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::Image::drawTiled):
        (WebCore::Image::getHBITMAP):
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::contains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::operator=):
        (WebCore::Path::clear):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::transform):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        (WebCore::PlatformScrollbar::width):
        (WebCore::PlatformScrollbar::height):
        (WebCore::PlatformScrollbar::setEnabled):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::PolicyCheck::PolicyCheck):
        (WebCore::PolicyCheck::clear):
        (WebCore::PolicyCheck::clearRequest):
        (WebCore::PolicyCheck::call):
        (WebCore::RenderThemeWin::systemFont):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::adjustMenuListStyle):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::scrollPointRecursively):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::themeChanged):
        (WebCore::ScrollView::convertChildToSelf):
        (WebCore::ScrollView::convertSelfToChild):
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::TextField::selectAll):
        (WebCore::TextField::addSearchResult):
        (WebCore::TextField::selectionStart):
        (WebCore::TextField::hasSelectedText):
        (WebCore::TextField::selectedText):
        (WebCore::TextField::setAutoSaveName):
        (WebCore::TextField::checksDescendantsForFocus):
        (WebCore::TextField::setSelection):
        (WebCore::TextField::setMaxResults):
        (WebCore::TextField::edited):
        (WebCore::TextField::focusPolicy):
        (WebCore::TextField::TextField):
        (WebCore::TextField::~TextField):
        (WebCore::TextField::setFont):
        (WebCore::TextField::setAlignment):
        (WebCore::TextField::setWritingDirection):
        (WebCore::TextField::maxLength):
        (WebCore::TextField::setMaxLength):
        (WebCore::TextField::text):
        (WebCore::TextField::setText):
        (WebCore::TextField::cursorPosition):
        (WebCore::TextField::setCursorPosition):
        (WebCore::TextField::setEdited):
        (WebCore::TextField::setReadOnly):
        (WebCore::TextField::setPlaceholderString):
        (WebCore::TextField::setColors):
        (WebCore::TextField::sizeForCharacterWidth):
        (WebCore::TextField::baselinePosition):
        (WebCore::TextField::setLiveSearch):
        (WebCore::Widget::enableFlushDrawing):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::focusPolicy):
        (WebCore::Widget::disableFlushDrawing):
        (WebCore::Widget::removeFromParent):
        (WebCore::Widget::lockDrawingFocus):
        (WebCore::Widget::unlockDrawingFocus):
        (WebCore::Widget::capturingMouse):
        (WebCore::Widget::setCapturingMouse):
        (WebCore::Widget::capturingTarget):
        (WebCore::Widget::capturingChild):
        (WebCore::Widget::setCapturingChild):
        (WebCore::Widget::convertChildToSelf):
        (WebCore::Widget::convertSelfToChild):
        (WebCore::Widget::setParent):
        (WebCore::Widget::parent):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::paint):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::clearFocus):

2006-11-16  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/4796730> table deletion elements are serialized out if they are visible when innerHTML or a Web Archive is made

        * editing/markup.cpp:
        (WebCore::createMarkup): disable the delete button so it's elements are not serialized into the markup

2006-11-16  George Staikos  <staikos@kde.org>

        Rubberstamped by Maciej.

        Making the code valgrind clean.

        * rendering/RenderTableCell.cpp: initialize variable m_widthChanged
        (WebCore::RenderTableCell::RenderTableCell):
        * rendering/RenderTableCell.h: remove unused variable nWrap

2006-11-16  David Harrison  <harrison@apple.com>

        Reviewed by Darin and Tim.

        <rdar://problem/4799949> REGRESSION: Crash in FrameMac::eventMayStartDrag() by clicking on a page
        
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventMayStartDrag):
        Add nil check of hitTest's result.innerNode().

2006-11-16  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4836897> Deletion rectangle disappears when multiple list items are selected

        Consider the container of the selection range for deletion before asking enclosingNodeOfType().

        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):

2006-11-16  Rob Buis  <buis@kde.org>

        Reviewed by hyatt.

        Removal of unused m_styleElement.

        * dom/Node.cpp:
        (WebCore::Node::Node):
        (WebCore::Node::dump):
        * dom/Node.h:
        (WebCore::Node::isLink): should be styleElement, a bug?

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

        Build fix.

        Rename the items in the ContextMenuAction enum so that they don't
        conflict with WebKit names.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        * platform/ContextMenu.h:
        (WebCore::):
        (WebCore::ContextMenuItem::ContextMenuItem):

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

        Reviewed by Anders.

        Change m_contextMenu to an OwnPtr.

        * WebCore.xcodeproj/project.pbxproj:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):
        * page/ContextMenuController.h:

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

        Reviewed by Anders.

        Add new ContextMenuController and ContextMenuClient classes, and move
        context menu responsibilities from Chrome and ChromeClient to them.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj: Add new files to project, and
        alphabetize some others.
        * page/Chrome.cpp: Remove context menu-related code.
        * page/Chrome.h: Ditto.
        * page/ChromeClient.h:
        * page/ContextMenuClient.h: Added.
        * page/ContextMenuController.cpp: Added.
        (WebCore::ContextMenuController::ContextMenuController):
        (WebCore::ContextMenuController::~ContextMenuController):
        (WebCore::ContextMenuController::handleContextMenuEvent):
        (WebCore::ContextMenuController::contextMenuActionSelected):
        * page/ContextMenuController.h: Added.
        (WebCore::ContextMenuController::client):
        * page/Page.cpp: Every Page now has a ContextMenuController.
        (WebCore::Page::Page):
        * page/Page.h: Made m_dragCaretController and m_chrome objects instead
        of pointers to objects.
        (WebCore::Page::contextMenuController):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Removed the call to Chrome to ask the
        delegate to add its menu items, and moved the code from the static
        addDefaultItems function into this method.
        * platform/ContextMenu.h:
        (WebCore::ContextMenu::show): Added an empty method body since this
        method is now called from ContextMenuController (although no one calls
        into ContextMenuController yet, so it's OK for this to be empty).
        (WebCore::ContextMenu::hide): Ditto.

2006-11-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Add null checks on the node filter, they can be null if no filter was passed to the respective
        create functions.
        
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::mark):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::mark):

2006-11-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders.

        Allow <embed> and <object> tags to include non-plugin
        content when plugins are disabled

        Fixes <rdar://problems/4839488>

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::rendererIsNeeded):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):

2006-11-15  Adele Peterson  <adele@apple.com>

        Build fix.  Another type problem that I don't see locally.

        * rendering/RenderSlider.cpp: (WebCore::RenderSlider::setPositionFromValue):

2006-11-15  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Adding MathExtras header.

        * rendering/RenderSlider.cpp:

2006-11-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Harrison.

        <rdar://problem/4832894> Crash deleting an element inside a list while deletion rectangle is visible (compareBoundaryPoints)

        * Disable and hide the deletion UI for each editing command. This prevents editing commands from being affected
          by the deletion UI elements we insert. The deletion UI is then shown after the editing commands are completely done.

        * Multiple calls to DeleteButtonController's disable() needed to be paired with the same number of enable() calls before
          the deletion UI is enabled again. This allows for nested editing commands to be called without thrashing the deletion UI.

        * Make sure the the renderers are currently reflecting the latest style changes, so call updateLayoutIgnorePendingStylesheets().

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::DeleteButtonController):
        (WebCore::isDeletableElement):
        (WebCore::DeleteButtonController::respondToChangedSelection): check the enabled state
        (WebCore::DeleteButtonController::respondToChangedContents): check the enabled state
        (WebCore::DeleteButtonController::show): call isDeletableElement() to make sure the element is allowed
        (WebCore::DeleteButtonController::deleteTarget): check the enabled state
        * editing/DeleteButtonController.h:
        (WebCore::DeleteButtonController::disable):
        (WebCore::DeleteButtonController::enable):
        (WebCore::DeleteButtonController::enabled):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply): hide and disable the deletion UI, then show at the end
        (WebCore::EditCommand::unapply): ditto
        (WebCore::EditCommand::reapply): ditto

2006-11-15  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        New implementation of slider control.

        * WebCore.xcodeproj/project.pbxproj: Removed DeprecatedSlider and Slider classes, added RenderSlider class.
        * rendering/DeprecatedSlider.cpp: Removed.
        * rendering/DeprecatedSlider.h: Removed.
        * platform/Slider.h: Removed.
        * platform/mac/SliderMac.mm: Removed.
        * platform/win/TemporaryLinkStubs.cpp:

        * css/CSSSelector.h: (WebCore::CSSSelector::): Added PseudoElement for thumb, PseudoSliderThumb.
        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType): Added code for "-webkit-slider-thumb".
        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::checkOneSelector): 
        * rendering/RenderStyle.cpp:
        (WebCore::):
        (WebCore::pseudoBit):
        * rendering/RenderStyle.h: (WebCore::RenderStyle::):

        * css/html4.css: Added style for input[type="range"] and input[type="range"]::-webkit-slider-thumb

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createRenderer): Create RenderSlider for input type="range" elements.
        (WebCore::HTMLInputElement::defaultEventHandler): Allow the renderer to forward events, and set thumb position when click occurs on the track.

        * page/EventHandler.cpp:  Added concept of a node that will capture all mouse events.  This will be used by the slider thumb, so it can
          continue to capture mouse move events during the drag, even though those events aren't directly over the slider.
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::setCapturingMouseEventsNode):
        (WebCore::EventHandler::dispatchMouseEvent): If the capturingMouseEventsNode is set, then dispatch all mouse events to that node.
        * page/EventHandler.h:

        * rendering/RenderSlider.cpp: Added.
        (WebCore::HTMLSliderThumbElement::isShadowNode):
        (WebCore::HTMLSliderThumbElement::shadowParentNode):
        (WebCore::HTMLSliderThumbElement::inDragMode): Keeps track of whether or not the thumb is in drag mode.
        (WebCore::HTMLSliderThumbElement::HTMLSliderThumbElement):
        (WebCore::HTMLSliderThumbElement::defaultEventHandler): Handles positioning of slider thumb during drag.
        (WebCore::RenderSlider::RenderSlider):
        (WebCore::RenderSlider::~RenderSlider):
        (WebCore::RenderSlider::baselinePosition):
        (WebCore::RenderSlider::calcMinMaxWidth):
        (WebCore::RenderSlider::setStyle):
        (WebCore::RenderSlider::createThumbStyle):
        (WebCore::RenderSlider::layout): Positions the thumb to be centered on the track.
        (WebCore::RenderSlider::updateFromElement):
        (WebCore::RenderSlider::mouseEventIsInThumb):
        (WebCore::RenderSlider::setValueForPosition):
        (WebCore::RenderSlider::setPositionFromValue):
        (WebCore::RenderSlider::positionForOffset):
        (WebCore::RenderSlider::valueChanged):
        (WebCore::RenderSlider::currentPosition):
        (WebCore::RenderSlider::setCurrentPosition):
        (WebCore::RenderSlider::trackSize):
        (WebCore::RenderSlider::forwardEvent):
        (WebCore::RenderSlider::inDragMode):
        * rendering/RenderSlider.h: Added.
        (WebCore::RenderSlider::renderName):

         * rendering/RenderTheme.cpp: Added drawing code for slider track and thumb.
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::adjustSliderTrackStyle):
        (WebCore::RenderTheme::adjustSliderThumbStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintSliderTrack):
        (WebCore::RenderTheme::paintSliderThumb):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::TrackGradientInterpolate):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):

2006-11-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Oops! Forgot to add this!

        * platform/mac/ContextMenuMac.mm: Added.
        (-[MenuTarget forwardContextMenuAction:initWithContextMenu:WebCore::]):
        (-[MenuTarget WebCore::]):
        (-[MenuTarget setMenu:WebCore::]):
        (-[MenuTarget forwardContextMenuAction:]):
        (getNSMenuItem):
        (ContextMenu::appendItem):
        (ContextMenu::itemCount):
        (ContextMenu::insertItem):
        (ContextMenu::setPlatformMenuDescription):

2006-11-15  Beth Dakin  <bdakin@apple.com>
        &   Adam Roben  <aroben@apple.com>

        Reviewed by Adam and Beth.

        Initial cut at pushing Context Menus into WebCore. Nobody actually 
        calls this code just yet.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Chrome.cpp:
        (WebCore::Chrome::addCustomContextMenuItems): Use the chrome to 
        call into addContextMenuItems on the UIDelegate.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/ContextMenu.cpp: Added.
        (WebCore::addDefaultItems):
        (WebCore::ContextMenu::populate):
        * platform/ContextMenu.h: Added.
        (WebCore::):
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::hitTestResult):
        (WebCore::ContextMenu::platformMenuDescription):

2006-11-15  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        - Fix for <rdar://problem/4780306> REGRESSION: clicking in textarea does not set selection at PunBB.org

        * css/html4.css: Removed "-webkit-user-select: ignore" for labels.

2006-11-15  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/4836034> REGRESSION: Hang while spell-checking (advanceToNextMisspelling)

        Test:
        * manual-tests/keep_spelling_markers.html:
        Updated to include checking for this bug.
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        it.advance() even when current string is a single space.

2006-11-15  Brady Eidson  <beidson@apple.com>

        Reviewed by lamadio

        Backing out macro expansion

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isRecognizedTagName):
        * ksvg2/scripts/make_names.pl:

2006-11-15  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/4770453> VO not honoring secure edit fields in web pages

        The remaining problem was the password fields would return their contents
        even though they did not advertise that they could. Apparently, VoiceOver
        does not read the ads.

        * bridge/mac/WebCoreAXObject.mm:
        (isPasswordFieldElement):
        (-[WebCoreAXObject isPasswordField]):
        (-[WebCoreAXObject textMarkerForVisiblePosition:]):
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        (-[WebCoreAXObject doAXStringForRange:]):

2006-11-13  Lou Amadio  <lamadio@apple.com>

        Reviewed by Darin Adler, Maciej Stachowiak

        Cleanup: Expanded macros in generated files

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isRecognizedTagName):
        * ksvg2/scripts/make_names.pl:

2006-11-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Use Vector instead of DeprecatedPtrList.
        
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/BreakBlockquoteCommand.cpp:
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintOutline):

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

        Build fix.

        * page/EventHandler.h:

2006-11-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Move things off the bridge, and move sendContextMenuEvent() from 
        EventHandlerMac to EventHandler.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/EditorClient.h:
        * bridge/mac/WebCoreFrameBridge.h:
        * editing/Editor.cpp:
        (WebCore::Editor::selectWordBeforeMenuEvent):
        (WebCore::Editor::clientIsEditable):
        * editing/Editor.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:

2006-11-14  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Harrison.

        <rdar://problem/4766635> Safari should never follow links in editable areas (add a WebKitEditableLinkNeverLive option)

        Adds an EditableLinkNeverLive setting that will make links in editable areas always dead.

        * bridge/mac/WebCoreSettings.mm:
        (-[WebCoreSettings setEditableLinkBehavior:]):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::setActive):
        (WebCore::HTMLAnchorElement::isLiveLink):
        * page/FrameView.cpp:
        (WebCore::selectCursor):
        * page/Settings.h:
        (WebCore::Settings::):

2006-11-14  Mark Rowe  <bdash@webkit.org>

        Reviewed by Oliver.

        Build fix

        * bindings/scripts/CodeGenerator.pm:

2006-11-14  Anders Carlsson  <acarlsson@apple.com>

        Turns out I wasn't forcing DWARF on the world at all, 
        it's now the default!

        * WebCore.xcodeproj/project.pbxproj:

2006-11-14  Anders Carlsson  <acarlsson@apple.com>

        I must stop trying to force DWARF on the world.
        
        * WebCore.xcodeproj/project.pbxproj:

2006-11-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4806874>
        Missing background image after paste
        
        * editing/markup.cpp:
        (WebCore::createMarkup): If the body is fully selected, add a 
        div with its CSS properties to the markup.  Migrated a use of 
        enclosingBlockFlowElement to enclosingBlock to fix an infinite 
        loop when pasting <div><input></div>.

2006-11-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add Undo/Redo to execCommand.
        
        * editing/Editor.cpp:
        (WebCore::execRedo):
        (WebCore::execUndo):
        (WebCore::canRedo):
        (WebCore::canUndo):
        (WebCore::CommandEntry::):

2006-11-14  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - created EventHandler class, moved event handling code from both
          Frame and FrameView in there

        - added ScrollTypes.h header so you can include the scroller-related
          enums without all of Scrollbar.h

        * page/EventHandler.cpp: Added.
        * page/EventHandler.h: Added.
        * page/mac/EventHandlerMac.mm: Added.

        * platform/ScrollBarMode.h: Removed.
        * platform/ScrollTypes.h: Added.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::FrameMac):
        (WebCore::FrameMac::~FrameMac):
        (WebCore::FrameMac::bridgeForWidget):
        (WebCore::FrameMac::imageFromRect):
        * bridge/mac/FrameViewMac.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge scrollOverflowInDirection:granularity:]):
        (-[WebCoreFrameBridge nextKeyView]):
        (-[WebCoreFrameBridge previousKeyView]):
        (-[WebCoreFrameBridge nextKeyViewInsideWebFrameViews]):
        (-[WebCoreFrameBridge previousKeyViewInsideWebFrameViews]):
        (-[WebCoreFrameBridge _visiblePositionForPoint:]):
        (-[WebCoreFrameBridge dragOperationForDraggingInfo:]):
        (-[WebCoreFrameBridge dragExitedWithDraggingInfo:]):
        (-[WebCoreFrameBridge concludeDragForDraggingInfo:]):
        (-[WebCoreFrameBridge dragSourceMovedTo:]):
        (-[WebCoreFrameBridge dragSourceEndedAt:operation:]):
        * dom/Document.cpp:
        (WebCore::Document::hoveredNodeDetached):
        * dom/Element.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::defaultEventHandler):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        * editing/SelectionController.h:
        (WebCore::SelectionController::setCaretBlinkingSuspended):
        (WebCore::SelectionController::isCaretBlinkingSuspended):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setFocus):
        * html/HTMLFrameElementBase.h:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::isKeyboardFocusable):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::open):

        * page/Frame.cpp:
        (WebCore::Frame::caretBlinkTimerFired):
        (WebCore::Frame::frameForWidget):
        (WebCore::Frame::eventHandler):
        (WebCore::Frame::setProhibitsScrolling):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::clear):
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::addRepaintInfo):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scrollPointRecursively):
        (WebCore::FrameView::setContentsPos):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::scheduleEvent):
        (WebCore::FrameView::updateOverflowStatus):
        (WebCore::FrameView::dispatchScheduledEvents):
        (WebCore::FrameView::windowClipRectForLayer):
        (WebCore::FrameView::handleMouseMoveEvent):
        (WebCore::FrameView::handleMouseReleaseEvent):
        * page/FrameView.h:
        * page/PageState.cpp:
        (WebCore::PageState::PageState):
        (WebCore::PageState::restore):
        * page/PageState.h:
        * platform/ScrollBar.h:
        * platform/ScrollView.h:
        * platform/mac/ClipboardMac.mm:
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        * platform/mac/SliderMac.mm:
        (-[WebCoreSlider becomeFirstResponder]):
        (-[WebCoreSlider nextKeyView]):
        (-[WebCoreSlider previousKeyView]):
        (-[WebCoreSlider canBecomeKeyView]):
        (Slider::focusPolicy):
        * platform/mac/WebCoreTextField.mm:
        (-[WebCoreTextFieldController textView:shouldHandleEvent:]):
        (-[WebCoreTextFieldController setHasFocus:]):
        (-[WebCoreSearchField nextKeyView]):
        (-[WebCoreSearchField previousKeyView]):
        (-[WebCoreSearchFieldCell _addStringToRecentSearches:]):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::clearFocus):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::setResizing):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::updateOverflowStatus):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::autoscroll):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::draggableNode):
        (WebCore::RenderObject::destroy):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::RepaintInfo::RepaintInfo):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::viewCleared):

2006-11-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Let the editor client handle undo/redo.
        
        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/EditorClient.h:
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::canUndo):
        (WebCore::FrameMac::canRedo):
        * bridge/mac/WebCoreEditCommand.h: Removed.
        * bridge/mac/WebCoreEditCommand.mm: Removed.
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):
        * editing/JSEditor.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::closeURL):
        * page/Frame.cpp:
        * page/Frame.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::updateFromElement):

2006-11-14  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Brady

        Fix Qt/Linux build.

        * ChangeLog:
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::submitForm):
        * platform/network/qt/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::add):
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::submitForm):
        * platform/qt/FrameQtClient.h:

2006-11-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Cleanup of my patch last night and merging with aroben-style changes from this morning
        (More ref-counted FormData stuff)

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::postData):
        * platform/network/ResourceHandle.h:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody):
        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::getStreamFormDatas):
        (WebCore::formCreate):
        (WebCore::formFinalize):
        (WebCore::setHTTPBody):
        (WebCore::httpBodyFromStream):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::getResourceRequest):

2006-11-14  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11575
        Bug 11575: REGRESSION: WebCore crash in CSSParser/HTMLTokenizer

        Test: fast/css/css-imports.html

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        Fix the crash by testing for null pointer.

2006-11-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Tim H.

        Test for http://bugs.webkit.org/show_bug.cgi?id=3387
        Redundant keydown, keypress, keyup events sent for arrow keys

        * manual-tests/arrow-key-events.html: Added.

2006-11-14  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        Fix up usages of FormData within CFNet loader code.

        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::httpBody):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::getStreamFormDatas): Store RefPtr<FormData>s in the
        streamFormDatas HashMap.
        (WebCore::formCreate):
        (WebCore::formFinalize): Removed delete because the remove() will deref
        and delete if necessary.
        (WebCore::setHTTPBody): Changed parameter to PassRefPtr.
        (WebCore::httpBodyFromStream):
        * platform/network/cf/FormDataStreamCFNet.h: Fix declarations.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::getResourceRequest):

2006-11-14  Greg Jackson  <gjspanner@gmail.com>

        Reviewed by Darin.

        Preserves any pre-existing value for WEBCORE_NAVIGATOR_PLATFORM
        rather than overriding it based on platform detection.

        * bindings/js/kjs_navigator.cpp:

2006-11-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Made FormData Shared, and pass it around as such.

        * WebCore.xcodeproj/project.pbxproj: Reordered some items
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FormSubmission::FormSubmission):
        (WebCore::FrameLoader::submitForm):
        * loader/FrameLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::create):
        * platform/network/FormData.h: Made FormData shared
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::postData): 
        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::httpBody):
        (WebCore::ResourceRequest::setHTTPBody): 
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::getResourceRequest):
        (WebCore::nsURLRequest): 

        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::getStreamFormDatas): Hash Streams to RefPtr<FormData>s
        (WebCore::formCreate):
        (WebCore::formFinalize):
        (WebCore::setHTTPBody):
        (WebCore::httpBodyFromStream):

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2006-11-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4828264>
        In Mail, a crash occurs at WebCore::Selection::toRange() when selecting this web content (http://www.cnet.com/)
        
        The start of the selection is in an editable area, and the end is in an 
        input field inside that editable area.  The code that should pull the end
        of such a selection outside the input field didn't escape shadow nodes,
        it would leave a dangling end, causing the crash in toRange.
        
        * editing/Selection.cpp:
        (WebCore::Selection::adjustForEditableContent):  Added an ASSERT and a fixup
        to prevent crashes like this in future Release builds.
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot): Let this function 
        escape shadow nodes.  We might eventually push this code down into 
        next/previous{VisuallyDistinct}Canditate.
        (WebCore::lastEditablePositionBeforePositionInRoot): Ditto.

2006-11-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveFullySelectedAnchor):
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        * editing/Editor.h:
        (WebCore::Editor::setRemovedAnchor): Pass a PassRefPtr.

2006-11-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver
        
        <rdar://problem/4820026>
        copy/paste of news.google.com yields text from hidden select element options

        We were adding descendants of unrendered select elements. 

        * editing/markup.cpp:
        (WebCore::createMarkup): Don't traverse into nodes without renderers, unless 
        they are grandfathered in by a rendered select element.
        
2006-11-12  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Sam Weinig.

        Fix Qt build. Missing AbstractShared implementation.
        http://bugs.webkit.org/show_bug.cgi?id=11581

        * loader/qt/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::ref):
        (WebCore::FrameLoaderClientQt::deref):
        * loader/qt/FrameLoaderClientQt.h:
        * platform/qt/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ref):
        (WebCore::ChromeClientQt::deref):
        * platform/qt/ChromeClientQt.h:
        * platform/qt/EditorClientQt.cpp:
        (WebCore::EditorClientQt::ref):
        (WebCore::EditorClientQt::deref):
        * platform/qt/EditorClientQt.h:

2006-11-13  Mark Rowe  <bdash@webkit.org>

        Reviewed by Mitz.

        Fix some Linux/Gdk build issues noted by Alp Toker.

        * Projects/gdk/webcore-gdk.bkl:
        * WebCoreSources.bkl:
        * platform/graphics/gdk/ImageGdk.cpp:
        (WebCore::Image::loadPlatformResource):

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

        Reviewed by Anders

        Logging channel plumbing for future work

        * platform/Logging.cpp:
        (WebCore::):
        * platform/Logging.h:
        * platform/mac/LoggingMac.mm:
        (WebCore::InitializeLoggingChannelsIfNecessary):

2006-11-12  Mark Rowe  <bdash@webkit.org>

        Reviewed by Mitz.

        Linux/Gdk compilation fixes, and bakefile cleanups.  Based on patches by
        Alp Toker.

        * Projects/gdk/webcore-gdk.bkl:
        * WebCoreSources.bkl:
        * page/PageState.cpp:
        * platform/gdk/ChromeClientGdk.h:
        (WebCore::ChromeClientGdk::ref):
        (WebCore::ChromeClientGdk::deref):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdkClientDefault::openURL):
        (WebCore::FrameGdkClientDefault::didReceiveData):
        (WebCore::FrameGdkClientDefault::receivedAllData):
        (WebCore::FrameGdk::FrameGdk):
        (WebCore::FrameGdk::~FrameGdk):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/KeyEventGdk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        * platform/gdk/ScreenClientGdk.h: Removed.
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameGdk::canPaste):
        (FrameGdk::originalRequestURL):
        (TextField::TextField):
        * platform/network/gdk/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        * webcore-base.bkl:

2006-11-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        - Fixed loader crash by clarifying ownership of WebKit client objects. 
        WebCore objects own their WebKit clients, and ref and deref through 
        virtual methods, leaving WebKit free to use whatever client / reference-counting 
        implementation it likes.
        
        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/EditorClient.h: Fixed up function prototypes for style.
        * loader/FrameLoader.cpp: Removed detachFrameLoader, since its real purpose
        was to implement an alternative ownership model.
        (WebCore::FrameLoader::~FrameLoader): Removed empty destructor.
        (WebCore::FrameLoader::setClient): This function now takes ownership
        (WebCore::FrameLoader::client):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * page/ChromeClient.h:
        * platform/AbstractShared.h: Added. This is the virtual function-based refcounting
        complement to Shared.
        (WebCore::AbstractShared::~AbstractShared):

2006-11-11  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Fix uninitialized variable.

        * rendering/RenderStyle.h:

2006-11-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Complete cleanup of the CMakeLists.txt.
        Now all files to be built are sorted in alphabetic order.

        General style cleanup, remove all tabs etc.

        * CMakeLists.txt:

2006-11-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Added missing initializer to ResourceRequest -- fixes some loader crashes
        due to assuming a request always has a non-null httpMethod.

        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):

2006-11-11  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej

        Fixed header guard

        * loader/FrameLoaderClient.h:

2006-11-11  Darin Adler  <darin@apple.com>

        - attempt to fix Qt build

        * platform/qt/CursorQt.cpp:
        (WebCore::verticalTextCursor): Added. Just returns pointer cursor.
        (WebCore::cellCursor): Ditto.
        (WebCore::contextMenuCursor): Ditto.

2006-11-11  Rob Buis  <buis@kde.org>

        Reviewed by hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=10893
        InsertRule can not handle @import statements

        Allow @import as part of a css rule.

        * css/CSSGrammar.y:
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::checkLoaded):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::loadCompleted):

2006-11-11  Alexey Proskuryakov  <ap@webkit.org>

        Attempt to fix Qt build.

        * CMakeLists.txt: PathQt.cpp is in graphics/qt now.

2006-11-11  Lars Naesbye Christensen  <lars@naesbye.dk>

        Tortured by Sam Weinig, Tim H., Maciej, Mitz and Alexey :-)

        [CSS 3] support for vertical-text, cell and context-menu cursors
        http://bugs.webkit.org/show_bug.cgi?id=11494

        * Resources/cellCursor.png: Added.
        * Resources/contextMenuCursor.png: Added.
        * Resources/verticalTextCursor.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * manual-tests/cursor.html:
        * page/FrameView.cpp:
        (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        * rendering/RenderStyle.h:
        (WebCore::):

2006-11-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by aroben and ap, landed by ap.

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

        Group graphics related files in platform/graphics.
        Move certain files from certain subdirectories
        into platform/graphics/{win,mac,cg,gdk,qt}

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/AffineTransform.cpp: Removed.
        * platform/AffineTransform.h: Removed.
        * platform/Color.cpp: Removed.
        * platform/Color.h: Removed.
        * platform/FloatPoint.cpp: Removed.
        * platform/FloatPoint.h: Removed.
        * platform/FloatRect.cpp: Removed.
        * platform/FloatRect.h: Removed.
        * platform/FloatSize.cpp: Removed.
        * platform/FloatSize.h: Removed.
        * platform/Icon.h: Removed.
        * platform/Image.cpp: Removed.
        * platform/Image.h: Removed.
        * platform/ImageSource.h: Removed.
        * platform/IntPoint.h: Removed.
        * platform/IntRect.cpp: Removed.
        * platform/IntRect.h: Removed.
        * platform/IntSize.h: Removed.
        * platform/IntSizeHash.h: Removed.
        * platform/Path.cpp: Removed.
        * platform/Path.h: Removed.
        * platform/Pen.cpp: Removed.
        * platform/Pen.h: Removed.
        * platform/cairo/AffineTransformCairo.cpp: Removed.
        * platform/cairo/GraphicsContextCairo.cpp: Removed.
        * platform/cairo/ImageCairo.cpp: Removed.
        * platform/cairo/ImageSourceCairo.cpp: Removed.
        * platform/cairo/cairo/AUTHORS: Removed.
        * platform/cairo/cairo/COPYING: Removed.
        * platform/cairo/cairo/COPYING-LGPL-2.1: Removed.
        * platform/cairo/cairo/COPYING-MPL-1.1: Removed.
        * platform/cairo/cairo/INSTALL: Removed.
        * platform/cairo/cairo/NEWS: Removed.
        * platform/cairo/cairo/README: Removed.
        * platform/cairo/cairo/TODO: Removed.
        * platform/cairo/cairo/src/Makefile.in: Removed.
        * platform/cairo/cairo/src/cairo-arc-private.h: Removed.
        * platform/cairo/cairo/src/cairo-arc.c: Removed.
        * platform/cairo/cairo/src/cairo-array.c: Removed.
        * platform/cairo/cairo/src/cairo-atsui-font.c: Removed.
        * platform/cairo/cairo/src/cairo-atsui.h: Removed.
        * platform/cairo/cairo/src/cairo-beos-surface.cpp: Removed.
        * platform/cairo/cairo/src/cairo-beos.h: Removed.
        * platform/cairo/cairo/src/cairo-cache-private.h: Removed.
        * platform/cairo/cairo/src/cairo-cache.c: Removed.
        * platform/cairo/cairo/src/cairo-clip-private.h: Removed.
        * platform/cairo/cairo/src/cairo-clip.c: Removed.
        * platform/cairo/cairo/src/cairo-color.c: Removed.
        * platform/cairo/cairo/src/cairo-debug.c: Removed.
        * platform/cairo/cairo/src/cairo-debug.h: Removed.
        * platform/cairo/cairo/src/cairo-directfb-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-directfb.h: Removed.
        * platform/cairo/cairo/src/cairo-features.h: Removed.
        * platform/cairo/cairo/src/cairo-features.h.in: Removed.
        * platform/cairo/cairo/src/cairo-fixed.c: Removed.
        * platform/cairo/cairo/src/cairo-font-options.c: Removed.
        * platform/cairo/cairo/src/cairo-font-subset-private.h: Removed.
        * platform/cairo/cairo/src/cairo-font-subset.c: Removed.
        * platform/cairo/cairo/src/cairo-font.c: Removed.
        * platform/cairo/cairo/src/cairo-ft-font.c: Removed.
        * platform/cairo/cairo/src/cairo-ft-private.h: Removed.
        * platform/cairo/cairo/src/cairo-ft.h: Removed.
        * platform/cairo/cairo/src/cairo-glitz-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-glitz.h: Removed.
        * platform/cairo/cairo/src/cairo-gstate-private.h: Removed.
        * platform/cairo/cairo/src/cairo-gstate.c: Removed.
        * platform/cairo/cairo/src/cairo-hash-private.h: Removed.
        * platform/cairo/cairo/src/cairo-hash.c: Removed.
        * platform/cairo/cairo/src/cairo-hull.c: Removed.
        * platform/cairo/cairo/src/cairo-image-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-matrix.c: Removed.
        * platform/cairo/cairo/src/cairo-meta-surface-private.h: Removed.
        * platform/cairo/cairo/src/cairo-meta-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-output-stream.c: Removed.
        * platform/cairo/cairo/src/cairo-paginated-surface-private.h: Removed.
        * platform/cairo/cairo/src/cairo-paginated-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-path-bounds.c: Removed.
        * platform/cairo/cairo/src/cairo-path-data-private.h: Removed.
        * platform/cairo/cairo/src/cairo-path-data.c: Removed.
        * platform/cairo/cairo/src/cairo-path-fill.c: Removed.
        * platform/cairo/cairo/src/cairo-path-fixed-private.h: Removed.
        * platform/cairo/cairo/src/cairo-path-stroke.c: Removed.
        * platform/cairo/cairo/src/cairo-path.c: Removed.
        * platform/cairo/cairo/src/cairo-pattern.c: Removed.
        * platform/cairo/cairo/src/cairo-pdf-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-pdf.h: Removed.
        * platform/cairo/cairo/src/cairo-pen.c: Removed.
        * platform/cairo/cairo/src/cairo-platform.h: Removed.
        * platform/cairo/cairo/src/cairo-png.c: Removed.
        * platform/cairo/cairo/src/cairo-polygon.c: Removed.
        * platform/cairo/cairo/src/cairo-private.h: Removed.
        * platform/cairo/cairo/src/cairo-ps-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-ps.h: Removed.
        * platform/cairo/cairo/src/cairo-quartz-private.h: Removed.
        * platform/cairo/cairo/src/cairo-quartz-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-quartz.h: Removed.
        * platform/cairo/cairo/src/cairo-quartz2-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-quartz2.h: Removed.
        * platform/cairo/cairo/src/cairo-region.c: Removed.
        * platform/cairo/cairo/src/cairo-scaled-font.c: Removed.
        * platform/cairo/cairo/src/cairo-slope.c: Removed.
        * platform/cairo/cairo/src/cairo-spline.c: Removed.
        * platform/cairo/cairo/src/cairo-stroke-style.c: Removed.
        * platform/cairo/cairo/src/cairo-surface-fallback-private.h: Removed.
        * platform/cairo/cairo/src/cairo-surface-fallback.c: Removed.
        * platform/cairo/cairo/src/cairo-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-svg-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-svg.h: Removed.
        * platform/cairo/cairo/src/cairo-traps.c: Removed.
        * platform/cairo/cairo/src/cairo-unicode.c: Removed.
        * platform/cairo/cairo/src/cairo-wideint.c: Removed.
        * platform/cairo/cairo/src/cairo-wideint.h: Removed.
        * platform/cairo/cairo/src/cairo-win32-font.c: Removed.
        * platform/cairo/cairo/src/cairo-win32-private.h: Removed.
        * platform/cairo/cairo/src/cairo-win32-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-win32.h: Removed.
        * platform/cairo/cairo/src/cairo-xcb-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-xcb-xrender.h: Removed.
        * platform/cairo/cairo/src/cairo-xcb.h: Removed.
        * platform/cairo/cairo/src/cairo-xlib-private.h: Removed.
        * platform/cairo/cairo/src/cairo-xlib-screen.c: Removed.
        * platform/cairo/cairo/src/cairo-xlib-surface.c: Removed.
        * platform/cairo/cairo/src/cairo-xlib-test.h: Removed.
        * platform/cairo/cairo/src/cairo-xlib-xrender.h: Removed.
        * platform/cairo/cairo/src/cairo-xlib.h: Removed.
        * platform/cairo/cairo/src/cairo.c: Removed.
        * platform/cairo/cairo/src/cairo.h: Removed.
        * platform/cairo/cairo/src/cairoint.h: Removed.
        * platform/cairo/cairo/src/test-fallback-surface.c: Removed.
        * platform/cairo/cairo/src/test-fallback-surface.h: Removed.
        * platform/cairo/cairo/src/test-meta-surface.c: Removed.
        * platform/cairo/cairo/src/test-meta-surface.h: Removed.
        * platform/cairo/cairo/src/test-paginated-surface.c: Removed.
        * platform/cairo/cairo/src/test-paginated-surface.h: Removed.
        * platform/cairo/pixman/AUTHORS: Removed.
        * platform/cairo/pixman/COPYING: Removed.
        * platform/cairo/pixman/README: Removed.
        * platform/cairo/pixman/src/Makefile.in: Removed.
        * platform/cairo/pixman/src/fbcompose.c: Removed.
        * platform/cairo/pixman/src/fbedge.c: Removed.
        * platform/cairo/pixman/src/fbedgeimp.h: Removed.
        * platform/cairo/pixman/src/fbmmx.c: Removed.
        * platform/cairo/pixman/src/fbmmx.h: Removed.
        * platform/cairo/pixman/src/fbpict.c: Removed.
        * platform/cairo/pixman/src/fbpict.h: Removed.
        * platform/cairo/pixman/src/fbtrap.c: Removed.
        * platform/cairo/pixman/src/icblt.c: Removed.
        * platform/cairo/pixman/src/icbltone.c: Removed.
        * platform/cairo/pixman/src/iccolor.c: Removed.
        * platform/cairo/pixman/src/icformat.c: Removed.
        * platform/cairo/pixman/src/icimage.c: Removed.
        * platform/cairo/pixman/src/icimage.h: Removed.
        * platform/cairo/pixman/src/icint.h: Removed.
        * platform/cairo/pixman/src/icpixels.c: Removed.
        * platform/cairo/pixman/src/icrect.c: Removed.
        * platform/cairo/pixman/src/icrop.h: Removed.
        * platform/cairo/pixman/src/icstipple.c: Removed.
        * platform/cairo/pixman/src/ictransform.c: Removed.
        * platform/cairo/pixman/src/ictrap.c: Removed.
        * platform/cairo/pixman/src/ictri.c: Removed.
        * platform/cairo/pixman/src/icutil.c: Removed.
        * platform/cairo/pixman/src/pixman-remap.h: Removed.
        * platform/cairo/pixman/src/pixman-xserver-compat.h: Removed.
        * platform/cairo/pixman/src/pixman.h: Removed.
        * platform/cairo/pixman/src/pixregion.c: Removed.
        * platform/cairo/pixman/src/pixregionint.h: Removed.
        * platform/cairo/pixman/src/renderedge.c: Removed.
        * platform/cairo/pixman/src/renderedge.h: Removed.
        * platform/cairo/pixman/src/slim_internal.h: Removed.
        * platform/cairo/rgb24-hacks.txt: Removed.
        * platform/cairo/scale-removal.txt: Removed.
        * platform/cg/AffineTransformCG.cpp: Removed.
        * platform/cg/FloatPointCG.cpp: Removed.
        * platform/cg/FloatRectCG.cpp: Removed.
        * platform/cg/FloatSizeCG.cpp: Removed.
        * platform/cg/GraphicsContextCG.cpp: Removed.
        * platform/cg/GraphicsContextPlatformPrivate.h: Removed.
        * platform/cg/ImageCG.cpp: Removed.
        * platform/cg/ImageSourceCG.cpp: Removed.
        * platform/cg/IntPointCG.cpp: Removed.
        * platform/cg/IntRectCG.cpp: Removed.
        * platform/cg/IntSizeCG.cpp: Removed.
        * platform/cg/PDFDocumentImage.cpp: Removed.
        * platform/cg/PDFDocumentImage.h: Removed.
        * platform/cg/PathCG.cpp: Removed.
        * platform/gdk/ImageGdk.cpp: Removed.
        * platform/mac/ColorMac.mm: Removed.
        * platform/mac/FloatPointMac.mm: Removed.
        * platform/mac/FloatRectMac.mm: Removed.
        * platform/mac/FloatSizeMac.mm: Removed.
        * platform/mac/GraphicsContextMac.mm:
        * platform/mac/IconMac.mm: Removed.
        * platform/mac/ImageMac.mm: Removed.
        * platform/mac/IntPointMac.mm: Removed.
        * platform/mac/IntRectMac.mm: Removed.
        * platform/mac/IntSizeMac.mm: Removed.
        * platform/qt/AffineTransformQt.cpp: Removed.
        * platform/qt/ColorQt.cpp: Removed.
        * platform/qt/FloatPointQt.cpp: Removed.
        * platform/qt/FloatRectQt.cpp: Removed.
        * platform/qt/IconQt.cpp: Removed.
        * platform/qt/ImageQt.cpp: Removed.
        * platform/qt/ImageSourceQt.cpp: Removed.
        * platform/qt/IntPointQt.cpp: Removed.
        * platform/qt/IntRectQt.cpp: Removed.
        * platform/qt/IntSizeQt.cpp: Removed.
        * platform/qt/PathQt.cpp: Removed.
        * platform/win/ImageWin.cpp: Removed.
        * platform/win/IntPointWin.cpp: Removed.
        * platform/win/IntRectWin.cpp: Removed.
        * platform/win/IntSizeWin.cpp: Removed.

2006-11-11  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by hyatt.

        A layout test was added when this bug was fixed, so none needed now.
        
        Cleanup after:
        REGRESSION (r16122): min/max widths incorrectly calculated for contentEditable text
        http://bugs.webkit.org/show_bug.cgi?id=11570
        
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::isSpace): Removed.
        * rendering/RenderText.cpp:
        (WebCore::isSpace): Added.
        (WebCore::RenderText::calcMinMaxWidth): Use inline function instead of polluting RenderStyle.

2006-11-11  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by mitz.
        
        REGRESSION (r16122): min/max widths incorrectly calculated for contentEditable text
        http://bugs.webkit.org/show_bug.cgi?id=11570

        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::isSpace): Added.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::calcMinMaxWidth): For the purposes of calculating the line widths, 
        treat non-breaking spaces the same as normal spaces if -webkit-nbsp-mode is 'space'

2006-11-10  Zalan Bujtas <zalan.bujtas@nokia.com>

        Reviewed by Maciej.

        Added basic types for symbian platform.
        http://bugs.webkit.org/show_bug.cgi?id=11540

        * config.h:
        * platform/AtomicString.h:
        (WebCore::AtomicString::AtomicString):
        (WebCore::AtomicString::operator TPtrC):
        * platform/DeprecatedString.cpp:
        (WebCore::initializeHandleNodeBlock):
        * platform/DeprecatedString.h: char _internalBuffer has to be in front of
          the bitfields as Codewarrior (3.2.5 build 461) compiler cannot cope with
          bitfields and breaks byte aligment
        * platform/FloatPoint.h:
        * platform/FloatRect.h:
        * platform/IntPoint.h:
        * platform/IntRect.h:
        * platform/IntSize.h:
        * platform/PlatformString.h:
        (WebCore::String::operator TPtrC):
        (WebCore::String::des):
        * platform/StringImpl.h:
        * platform/symbian/DeprecatedStringSymbian.cpp: Added.
        (WebCore::DeprecatedString::setBufferFromDes):
        (WebCore::DeprecatedString::fromDes):
        (WebCore::DeprecatedString::des):
        (WebCore::DeprecatedString::des8):
        * platform/symbian/FloatPointSymbian.cpp: Added.
        (WebCore::FloatPoint::FloatPoint):
        (WebCore::FloatPoint::operator TPoint):
        * platform/symbian/FloatRectSymbian.cpp: Added.
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::operator TRect):
        (WebCore::FloatRect::rect):
        * platform/symbian/IntPointSymbian.cpp: Added.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator TPoint):
        * platform/symbian/IntRectSymbian.cpp: Added.
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator TRect):
        (WebCore::IntRect::Rect):
        * platform/symbian/IntSizeSymbian.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator TSize):
        * platform/symbian/StringImplSymbian.cpp: Added.
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::des):
        * platform/symbian/StringSymbian.cpp: Added.
        (WebCore::String::String):

2006-11-10  Zack Rusin  <zack@kde.org>

        Reviewed by Anders.

        Adjust to the changes Brady made in the Qt code.

        * loader/qt/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveIcon):
        * loader/qt/FrameLoaderClientQt.h:

2006-11-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4069359>
        Deleting hyperlink text, then typing uses link typing style but loses the link itself
        
        The removed anchor element needs to stick around temporarily, in the same way
        that the typing style hangs off the caret until the user moves it.  Also text
        insertion around anchors didn't match TextEdit.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveFullySelectedAnchor): Added.
        (WebCore::DeleteSelectionCommand::doApply): Call saveFullySelectedAnchor.
        * editing/DeleteSelectionCommand.h:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply): Clear the removed anchor after any top level
        editing command that doesn't preserve the typing style (matches TextEdit).
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing): Added a fixme: we shouldn't call 
        setSelection with a message telling it to clear the typing style 
        (and the saved anchor) here.  Save/restore the saved anchor because of this.
        * editing/Editor.h:
        (WebCore::Editor::removedAnchor): Getter.
        (WebCore::Editor::setRemovedAnchor): Setter.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::prepareForTextInsertion): Insert the saved anchor
        if one exists.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Clear the removed anchor whenever
        we make a selection change that clears the typing style.
        (WebCore::SelectionController::nodeWillBeRemoved): Removed an old outdated FIXME.
        * editing/htmlediting.cpp:
        (WebCore::positionAvoidingSpecialElementBoundary): Cleaned up and
        made some changes to match TextEdit's behavior.  First, insert content
        inside the anchor when the caret is after it, unless the caret is at the
        end of the document, or if the caret is before it and at the start of a 
        paragraph.

=== Safari-521.30 ===

2006-11-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Hyatt.

        Check for BHIDDEN in isVisible() also.

        * rendering/RenderStyle.h:
        (WebCore::BorderValue::isVisible):

2006-11-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/4821423> element deletion UI appears for Mail blockquote and others with less than three visible borders

        Added a new function to BorderValue called isVisible(). This checks nonZero() and !isTransparent().

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        * rendering/RenderStyle.h:
        (WebCore::BorderValue::isVisible):

2006-11-10  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        Back out some accidentally-committed changes from r17711.

        * page/Frame.cpp:
        (WebCore::Frame::command):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:

2006-11-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Add more commands, make toggleBold and toggleItalic executable commands.

        * WebCore.exp:
        * editing/Editor.cpp:
        (WebCore::execCopy):
        (WebCore::execCut):
        (WebCore::execDelete):
        (WebCore::execForwardDelete):
        (WebCore::execPaste):
        (WebCore::execSelectAll):
        (WebCore::execToggleBold):
        (WebCore::execToggleItalic):
        (WebCore::enabled):
        (WebCore::canPaste):
        (WebCore::hasEditableSelection):
        (WebCore::hasEditableRangeSelection):
        (WebCore::hasRangeSelection):
        (WebCore::hasRichlyEditableSelection):
        (WebCore::CommandEntry::):
        * editing/Editor.h:

2006-11-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej, Geoff.

        Added an execCommand method to Editor. The idea is that this should replace the CommandByName object. Get rid of
        the alterCurrentSelection method in the bridge. WebKit can just call execCommand directly.

        * WebCore.exp:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        * editing/Editor.cpp:
        (WebCore::execMoveBackward):
        (WebCore::execMoveBackwardAndModifySelection):
        (WebCore::execMoveDown):
        (WebCore::execMoveDownAndModifySelection):
        (WebCore::execMoveForward):
        (WebCore::execMoveForwardAndModifySelection):
        (WebCore::execMoveLeft):
        (WebCore::execMoveLeftAndModifySelection):
        (WebCore::execMoveRight):
        (WebCore::execMoveRightAndModifySelection):
        (WebCore::execMoveToBeginningOfDocument):
        (WebCore::execMoveToBeginningOfDocumentAndModifySelection):
        (WebCore::execMoveToBeginningOfSentence):
        (WebCore::execMoveToBeginningOfSentenceAndModifySelection):
        (WebCore::execMoveToBeginningOfLine):
        (WebCore::execMoveToBeginningOfLineAndModifySelection):
        (WebCore::execMoveToBeginningOfParagraph):
        (WebCore::execMoveToBeginningOfParagraphAndModifySelection):
        (WebCore::execMoveToEndOfDocument):
        (WebCore::execMoveToEndOfDocumentAndModifySelection):
        (WebCore::execMoveToEndOfSentence):
        (WebCore::execMoveToEndOfSentenceAndModifySelection):
        (WebCore::execMoveToEndOfLine):
        (WebCore::execMoveToEndOfLineAndModifySelection):
        (WebCore::execMoveToEndOfParagraph):
        (WebCore::execMoveToEndOfParagraphAndModifySelection):
        (WebCore::execMoveParagraphBackwardAndModifySelection):
        (WebCore::execMoveParagraphForwardAndModifySelection):
        (WebCore::execMoveUp):
        (WebCore::execMoveUpAndModifySelection):
        (WebCore::execMoveWordBackward):
        (WebCore::execMoveWordBackwardAndModifySelection):
        (WebCore::execMoveWordForward):
        (WebCore::execMoveWordForwardAndModifySelection):
        (WebCore::execMoveWordLeft):
        (WebCore::execMoveWordLeftAndModifySelection):
        (WebCore::execMoveWordRight):
        (WebCore::execMoveWordRightAndModifySelection):
        (WebCore::enabledAnySelection):
        (WebCore::createCommandMap):
        (WebCore::CommandEntry::):
        (WebCore::Editor::execCommand):
        * editing/Editor.h:

2006-11-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Took out WebIconDatabaseBridge and made WebKit call IconDatabase directly

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreIconDatabaseBridge.h: Removed.
        * bridge/mac/WebCoreIconDatabaseBridge.mm: Removed.
        * loader/FrameLoaderClient.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::sharedIconDatabase):
        (WebCore::IconDatabase::~IconDatabase):
        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::isPrivateBrowsingEnabled):
        (WebCore::IconDatabase::enabled):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::finishLoading):
        * loader/mac/FrameLoaderMac.mm:

2006-11-10  Zack Rusin  <zack@kde.org>

        Reviewed and landed by Anders.

        Adjust platform Qt/KDE code to the recent loader
        changes. 

        * CMakeLists.txt:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createEmptyDocument):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/qt/DocumentLoaderQt.cpp: Added.
        (WebCore::canonicalizedTitle):
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::frameLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::URL):
        (WebCore::DocumentLoader::unreachableURL):
        (WebCore::DocumentLoader::replaceRequestURLForAnchorScroll):
        (WebCore::DocumentLoader::isStopping):
        (WebCore::DocumentLoader::clearErrors):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::setupForReplace):
        (WebCore::DocumentLoader::commitIfReady):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setCommitted):
        (WebCore::DocumentLoader::isCommitted):
        (WebCore::DocumentLoader::setLoading):
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::doesProgressiveLoad):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::updateLoading):
        (WebCore::DocumentLoader::setFrame):
        (WebCore::DocumentLoader::attachToFrame):
        (WebCore::DocumentLoader::detachFromFrame):
        (WebCore::DocumentLoader::prepareForLoadStart):
        (WebCore::DocumentLoader::loadingStartedTime):
        (WebCore::DocumentLoader::setIsClientRedirect):
        (WebCore::DocumentLoader::isClientRedirect):
        (WebCore::DocumentLoader::setPrimaryLoadComplete):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::stopRecordingResponses):
        (WebCore::DocumentLoader::title):
        (WebCore::DocumentLoader::triggeringAction):
        (WebCore::DocumentLoader::setTriggeringAction):
        (WebCore::DocumentLoader::setOverrideEncoding):
        (WebCore::DocumentLoader::overrideEncoding):
        (WebCore::DocumentLoader::setTitle):
        (WebCore::DocumentLoader::URLForHistory):
        * loader/qt/FrameLoaderClientQt.cpp: Added.
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::~FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::detachFrameLoader):
        (WebCore::FrameLoaderClientQt::hasWebView):
        (WebCore::FrameLoaderClientQt::hasFrameView):
        (WebCore::FrameLoaderClientQt::hasBackForwardList):
        (WebCore::FrameLoaderClientQt::resetBackForwardList):
        (WebCore::FrameLoaderClientQt::provisionalItemIsTarget):
        (WebCore::FrameLoaderClientQt::loadProvisionalItemFromPageCache):
        (WebCore::FrameLoaderClientQt::invalidateCurrentItemPageCache):
        (WebCore::FrameLoaderClientQt::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientQt::makeDocumentView):
        (WebCore::FrameLoaderClientQt::makeRepresentation):
        (WebCore::FrameLoaderClientQt::forceLayout):
        (WebCore::FrameLoaderClientQt::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientQt::updateHistoryForCommit):
        (WebCore::FrameLoaderClientQt::updateHistoryForBackForwardNavigation):
        (WebCore::FrameLoaderClientQt::updateHistoryForReload):
        (WebCore::FrameLoaderClientQt::updateHistoryForStandardLoad):
        (WebCore::FrameLoaderClientQt::updateHistoryForInternalLoad):
        (WebCore::FrameLoaderClientQt::updateHistoryAfterClientRedirect):
        (WebCore::FrameLoaderClientQt::setCopiesOnScroll):
        (WebCore::FrameLoaderClientQt::tokenForLoadErrorReset):
        (WebCore::FrameLoaderClientQt::resetAfterLoadError):
        (WebCore::FrameLoaderClientQt::doNotResetAfterLoadError):
        (WebCore::FrameLoaderClientQt::willCloseDocument):
        (WebCore::FrameLoaderClientQt::detachedFromParent1):
        (WebCore::FrameLoaderClientQt::detachedFromParent2):
        (WebCore::FrameLoaderClientQt::detachedFromParent3):
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        (WebCore::FrameLoaderClientQt::loadedFromPageCache):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchWillClose):
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientQt::dispatchShow):
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientQt::clearLoadingFromPageCache):
        (WebCore::FrameLoaderClientQt::isLoadingFromPageCache):
        (WebCore::FrameLoaderClientQt::revertToProvisionalState):
        (WebCore::FrameLoaderClientQt::clearUnarchivingState):
        (WebCore::FrameLoaderClientQt::progressStarted):
        (WebCore::FrameLoaderClientQt::progressCompleted):
        (WebCore::FrameLoaderClientQt::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientQt::willChangeTitle):
        (WebCore::FrameLoaderClientQt::didChangeTitle):
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::finalSetupForReplace):
        (WebCore::FrameLoaderClientQt::setDefersLoading):
        (WebCore::FrameLoaderClientQt::isArchiveLoadPending):
        (WebCore::FrameLoaderClientQt::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientQt::clearArchivedResources):
        (WebCore::FrameLoaderClientQt::canShowMIMEType):
        (WebCore::FrameLoaderClientQt::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientQt::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientQt::frameLoadCompleted):
        (WebCore::FrameLoaderClientQt::restoreScrollPositionAndViewState):
        (WebCore::FrameLoaderClientQt::provisionalLoadStarted):
        (WebCore::FrameLoaderClientQt::shouldTreatURLAsSameAsCurrent):
        (WebCore::FrameLoaderClientQt::addHistoryItemForFragmentScroll):
        (WebCore::FrameLoaderClientQt::didFinishLoad):
        (WebCore::FrameLoaderClientQt::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientQt::setTitle):
        (WebCore::FrameLoaderClientQt::userAgent):
        * loader/qt/FrameLoaderClientQt.h: Added.
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::overrideMediaType):
        (WebCore::FrameLoader::getHistoryLength):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::goBackOrForward):
        (WebCore::FrameLoader::historyURL):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::canGoBackOrForward):
        (WebCore::FrameLoader::partClearedInBegin):
        (WebCore::FrameLoader::saveDocumentState):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::redirectDataToPlugin):
        (WebCore::PolicyCheck::PolicyCheck):
        (WebCore::PolicyCheck::clear):
        (WebCore::PolicyCheck::set):
        (WebCore::PolicyCheck::call):
        (WebCore::PolicyCheck::clearRequest):
        * loader/qt/NavigationActionQt.cpp: Added.
        (WebCore::navigationType):
        (WebCore::NavigationAction::NavigationAction):
        * loader/qt/ResourceLoaderQt.cpp: Added.
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::setDefersLoading):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::loadsBlocked):
        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedImageMIMETypes):
        * platform/network/qt/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::slotResult):
        (WebCore::ResourceHandleManager::cancel):
        * platform/qt/ChromeClientQt.cpp: Added.
        (WebCore::rootWindowForFrame):
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::~ChromeClientQt):
        (WebCore::ChromeClientQt::setWindowRect):
        (WebCore::ChromeClientQt::windowRect):
        (WebCore::ChromeClientQt::pageRect):
        (WebCore::ChromeClientQt::scaleFactor):
        (WebCore::ChromeClientQt::focus):
        (WebCore::ChromeClientQt::unfocus):
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::createModalDialog):
        (WebCore::ChromeClientQt::show):
        (WebCore::ChromeClientQt::canRunModal):
        (WebCore::ChromeClientQt::runModal):
        (WebCore::ChromeClientQt::setToolbarsVisible):
        (WebCore::ChromeClientQt::toolbarsVisible):
        (WebCore::ChromeClientQt::setStatusbarVisible):
        (WebCore::ChromeClientQt::statusbarVisible):
        (WebCore::ChromeClientQt::setScrollbarsVisible):
        (WebCore::ChromeClientQt::scrollbarsVisible):
        (WebCore::ChromeClientQt::setMenubarVisible):
        (WebCore::ChromeClientQt::menubarVisible):
        (WebCore::ChromeClientQt::setResizable):
        * platform/qt/ChromeClientQt.h: Added.
        * platform/qt/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldBeginEditing):
        (WebCore::EditorClientQt::shouldEndEditing):
        (WebCore::EditorClientQt::shouldApplyStyle):
        (WebCore::EditorClientQt::didBeginEditing):
        (WebCore::EditorClientQt::respondToChangedContents):
        (WebCore::EditorClientQt::didEndEditing):
        * platform/qt/EditorClientQt.h:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::~FrameQt):
        (WebCore::FrameQt::keyEvent):
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::openURL):
        (WebCore::FrameQtClientDefault::didReceiveData):
        (WebCore::FrameQtClientDefault::receivedAllData):
        * platform/qt/ImageQt.cpp:
        * platform/qt/MimeTypeRegistryQt.cpp: Added.
        (WebCore::getMIMETypeForUTI):
        (WebCore::MimeTypeRegistry::getMIMETypeForExtension):
        * platform/qt/PageQt.cpp:
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):
        * platform/qt/ScreenQt.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::TextField::TextField):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2006-11-10  Brady Eidson <beidson@apple.com>

        Reviewed by Mitz

        http://bugs.webkit.org/show_bug.cgi?id=11554
        Fix the above bug (in didFinishLoading) and also another potential bug in didFailWithError
        in case the icon load fails after some data has been received. 

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didFailWithError): Clear the buffer so half-an-image isn't commited to the DB
        on error.  Also, as a loader re-factoring sanity check, added an assertion
        (WebCore::IconLoader::didFinishLoading): If an icon loader resulted in an error-response, the icon 
        is already committed to the DB.  Skip doing that step twice.

2006-11-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        Pulled MIME type handling out of WebFrameBridge and added
        a general C++ class to store/query MIME info
        Added an Obj-C bridge to provide WebKit with access to the
        MimeTypeRegistry for non-Obj-C++ classes.
        
        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        * bridge/mac/WebMimeTypeRegistryBridge.h: Added.
        * bridge/mac/WebMimeTypeRegistryBridge.mm: Added.
        (+[WebMimeTypeRegistryBridge supportsImageWithMIMEType:]):
        (+[WebMimeTypeRegistryBridge supportsNonImageWithMIMEType:]):
        (+[WebMimeTypeRegistryBridge supportedNonImageMIMETypes]):
        (+[WebMimeTypeRegistryBridge supportedImageMIMETypes]):
        (+[WebMimeTypeRegistryBridge supportedImageResourceMIMETypes]):
        * platform/Image.cpp:
        (WebCore::Image::supportsType):
        * platform/Image.h:
        * platform/MimeTypeRegistry.cpp: Added.
        (WebCore::initialiseSupportedImageMIMETypes):
        (WebCore::initialiseSupportedNonImageMimeTypes):
        (WebCore::initialiseMimeTypeRegistry):
        (WebCore::MimeTypeRegistry::isSupportedImageMIMEType):
        (WebCore::MimeTypeRegistry::isSupportedImageResourceMIMEType):
        (WebCore::MimeTypeRegistry::isSupportedNonImageMIMEType):
        (WebCore::MimeTypeRegistry::getSupportedImageMIMETypes):
        (WebCore::MimeTypeRegistry::getSupportedImageResourceMIMETypes):
        (WebCore::MimeTypeRegistry::getSupportedNonImageMIMETypes):
        * platform/MimeTypeRegistry.h: Added.
        * platform/mac/ImageMac.mm:
        * platform/mac/MimeTypeRegistryMac.mm: Added.
        (WebCore::getMIMETypeForUTI):
        (WebCore::MimeTypeRegistry::getMIMETypeForExtension):

2006-11-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - rename String::sprintf and DeprecatedString::sprintf to ...::format to avoid needlessly tweaking a search
        for insecure functions. Neither of these has risk of buffer overruns since they calculate the buffer size
        for you and use vsnprintf.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseColorFromValue):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSColor):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::handleError):
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * ksvg2/svg/SVGPathSegArc.h:
        (WebCore::SVGPathSegArcAbs::toString):
        (WebCore::SVGPathSegArcRel::toString):
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        (WebCore::SVGPathSegCurvetoCubicAbs::toString):
        (WebCore::SVGPathSegCurvetoCubicRel::toString):
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::toString):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::toString):
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        (WebCore::SVGPathSegCurvetoQuadraticAbs::toString):
        (WebCore::SVGPathSegCurvetoQuadraticRel::toString):
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::toString):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::toString):
        * ksvg2/svg/SVGPathSegLineto.h:
        (WebCore::SVGPathSegLinetoAbs::toString):
        (WebCore::SVGPathSegLinetoRel::toString):
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        (WebCore::SVGPathSegLinetoHorizontalAbs::toString):
        (WebCore::SVGPathSegLinetoHorizontalRel::toString):
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        (WebCore::SVGPathSegLinetoVerticalAbs::toString):
        (WebCore::SVGPathSegLinetoVerticalRel::toString):
        * ksvg2/svg/SVGPathSegMoveto.h:
        (WebCore::SVGPathSegMovetoAbs::toString):
        (WebCore::SVGPathSegMovetoRel::toString):
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::closeRenderer):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::forgetIconForIconURLFromDatabase):
        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::setSynchronous):
        * platform/Color.cpp:
        (WebCore::Color::name):
        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::setNum):
        (WebCore::DeprecatedString::format):
        * platform/DeprecatedString.h:
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::format):
        (WebCore::String::number):
        * platform/mac/KeyEventMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::calcMinMaxWidth):

2006-11-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - fixed "Regression: Can't log into gmail.com"
        - fixed "iBench doesn't report results - tests run but no number is recorded"
        
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody): Removed extra ! character.

2006-11-09  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4805409> REGRESSION: Reproducible crash in 
        WebCore::RenderBlock::skipWhitespace

        Note that this will still crash on Debug builds because it will hit 
        an assertion failure in editing. (One of the reasons there is no 
        layout test along with this fix.) There is definitely some editing 
        wackiness happening. See http://bugs.webkit.org/show_bug.cgi?
        id=10144 for updates on the assertion failure bug.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::childRemoved): It is possible for a 
        prevRootBox and its prevRootBox to share a lineBreakObj. So instead 
        of just clearing the lineBreakObj of the prevRootBox, cycle through 
        all prevRootBoxs with the same lineBreakObj. 

2006-11-09  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Fix the change in behavior I caused in r17680 with my build fix.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::maxTopMargin):
        (WebCore::RenderObject::maxBottomMargin):

2006-11-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam, Oliver.

        Move more functions to Editor.

        * bridge/EditorClient.h:
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreFrameBridge.h:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        (WebCore::EditCommand::unapply):
        (WebCore::EditCommand::reapply):
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedContents):
        (WebCore::dispatchEditableContentChangedEvents):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::typingAddedToOpenCommand):
        * page/Frame.cpp:
        * page/Frame.h:

2006-11-09  Darin Adler  <darin@apple.com>

        * rendering/RenderObject.h: Oops! Fixed accidentally checked-in ifdef.

2006-11-09  Alice Liu  <alice.liu@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/4808720> Hamachi test tool crashes Safari in WebCore::HTMLTableSectionElement::deleteRow
        All existing layout tests pass

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::deleteRow):
        check lastSection before deleting row

2006-11-09  Darin Adler  <darin@apple.com>

        - improved version of last night's build fix (should not do using namespace in a header)

        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::maxTopMargin):
        (WebCore::RenderObject::maxBottomMargin):

2006-11-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - added ResourceError class and didFailWithError client method

        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didFailWithError):
        (WebCore::IconLoader::didFinishLoading):
        * loader/icon/IconLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::receivedAllData):
        (WebCore::Loader::didFailWithError):
        * loader/loader.h:
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * platform/cf/RetainPtr.h:
        (WebCore::):
        (WebCore::adoptCFReference):
        (WebCore::RetainPtr::RetainPtr):
        (WebCore::::adopt):
        * platform/network/ResourceError.cpp: Added.
        * platform/network/ResourceError.h: Added.
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::domain):
        (WebCore::ResourceError::errorCode):
        (WebCore::ResourceError::failingURL):
        (WebCore::ResourceError::localizedDescription):
        (WebCore::ResourceError::unpackPlatformErrorIfNeeded):
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didFailWithError):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFail):
        (WebCore::ResourceHandle::cancel):
        * platform/network/mac/ResourceErrorMac.mm: Added.
        (-[NSError WebCore]):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::reportError):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::didFailWithError):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/xmlhttprequest.h:

2006-11-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux\Gdk fixes.

        * platform/gdk/ChromeClientGdk.h:
        (WebCore::ChromeClientGdk::~ChromeClientGdk):
        * platform/gdk/CursorGdk.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::moveCursor):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::FrameGdk):
        (WebCore::FrameGdk::submitForm):
        (WebCore::FrameGdk::urlSelected):
        * platform/gdk/PageGdk.cpp:
        * platform/gdk/ScreenClientGdk.h: Added.
        (WebCore::ScreenClientGdk::~ScreenClientGdk):
        * platform/gdk/ScreenGdk.cpp:
        (WebCore::ScreenClientGdk::depth):
        (WebCore::ScreenClientGdk::depthPerComponent):
        (WebCore::ScreenClientGdk::isMonochrome):
        (WebCore::ScreenClientGdk::rect):
        (WebCore::ScreenClientGdk::usableRect):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameGdk::historyURL):
        (ChromeClientGdk::windowRect):
        (ChromeClientGdk::setWindowRect):
        (ChromeClientGdk::pageRect):
        (ChromeClientGdk::scaleFactor):
        (ChromeClientGdk::focus):
        (ChromeClientGdk::unfocus):
        (ChromeClientGdk::createWindow):
        (ChromeClientGdk::createModalDialog):
        (ChromeClientGdk::show):
        (ChromeClientGdk::canRunModal):
        (ChromeClientGdk::runModal):
        (ChromeClientGdk::setToolbarsVisible):
        (ChromeClientGdk::toolbarsVisible):
        (ChromeClientGdk::setStatusbarVisible):
        (ChromeClientGdk::statusbarVisible):
        (ChromeClientGdk::setScrollbarsVisible):
        (ChromeClientGdk::scrollbarsVisible):
        (ChromeClientGdk::setMenubarVisible):
        (ChromeClientGdk::menubarVisible):
        (ChromeClientGdk::setResizable):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::client):
        * platform/network/gdk/ResourceHandleManager.cpp:
        (WebCore::writeCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::remove):

2006-11-08  Adam Roben  <aroben@apple.com>

        Build fix.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::maxTopMargin):
        (WebCore::RenderObject::maxBottomMargin):

2006-11-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Made Screen a good platform citizen by removing its reference to Page. This
        made a class unnecessary, so all screen fuctions are stand-alone now.

        * bindings/js/kjs_window.cpp: Removed unnecessary subtractions
        when computing the screen's available dimensions.

2006-11-08  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11506
        Cleanup RenderObject

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::operator delete):
        (WebCore::RenderObject::createObject):
        (WebCore::RenderObjectCounter::~RenderObjectCounter):
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::isDescendantOf):
        (WebCore::RenderObject::isRoot):
        (WebCore::RenderObject::addChild):
        (WebCore::RenderObject::removeChildNode):
        (WebCore::RenderObject::removeChild):
        (WebCore::RenderObject::appendChildNode):
        (WebCore::RenderObject::insertChildNode):
        (WebCore::RenderObject::nextInPreOrder):
        (WebCore::RenderObject::nextInPreOrderAfterChildren):
        (WebCore::RenderObject::previousInPreOrder):
        (WebCore::RenderObject::isEditable):
        (WebCore::RenderObject::nextEditable):
        (WebCore::RenderObject::previousEditable):
        (WebCore::RenderObject::firstLeafChild):
        (WebCore::RenderObject::lastLeafChild):
        (WebCore::RenderObject::addLayers):
        (WebCore::RenderObject::removeLayers):
        (WebCore::RenderObject::moveLayers):
        (WebCore::RenderObject::findNextLayer):
        (WebCore::RenderObject::enclosingLayer):
        (WebCore::RenderObject::updateFirstLetter):
        (WebCore::RenderObject::offsetParent):
        (WebCore::RenderObject::scroll):
        (WebCore::RenderObject::hasStaticX):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        (WebCore::RenderObject::containingBlock):
        (WebCore::RenderObject::containingBlockWidth):
        (WebCore::RenderObject::containingBlockHeight):
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::drawBorderArc):
        (WebCore::RenderObject::drawBorder):
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::paintBorder):
        (WebCore::RenderObject::absoluteRects):
        (WebCore::RenderObject::addPDFURLRect):
        (WebCore::RenderObject::addFocusRingRects):
        (WebCore::RenderObject::paintOutline):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::repaintObjectsBeforeLayout):
        (WebCore::RenderObject::getAbsoluteRepaintRectWithOutline):
        (WebCore::RenderObject::information):
        (WebCore::RenderObject::dump):
        (WebCore::selectStartNode):
        (WebCore::RenderObject::shouldSelect):
        (WebCore::RenderObject::draggableNode):
        (WebCore::RenderObject::createAnonymousBlock):
        (WebCore::RenderObject::handleDynamicFloatPositionChange):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::setStyleInternal):
        (WebCore::RenderObject::updateBackgroundImages):
        (WebCore::RenderObject::absolutePosition):
        (WebCore::RenderObject::caretRect):
        (WebCore::RenderObject::paddingTop):
        (WebCore::RenderObject::paddingBottom):
        (WebCore::RenderObject::paddingLeft):
        (WebCore::RenderObject::paddingRight):
        (WebCore::RenderObject::tabWidth):
        (WebCore::RenderObject::container):
        (WebCore::RenderObject::removeFromObjectLists):
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::arenaDelete):
        (WebCore::RenderObject::hitTest):
        (WebCore::RenderObject::setInnerNode):
        (WebCore::RenderObject::nodeAtPoint):
        (WebCore::RenderObject::verticalPositionHint):
        (WebCore::RenderObject::getVerticalPosition):
        (WebCore::RenderObject::lineHeight):
        (WebCore::RenderObject::invalidateVerticalPositions):
        (WebCore::RenderObject::recalcMinMaxWidths):
        (WebCore::RenderObject::scheduleRelayout):
        (WebCore::RenderObject::setInlineBoxWrapper):
        (WebCore::RenderObject::firstLineStyle):
        (WebCore::RenderObject::getPseudoStyle):
        (WebCore::RenderObject::getTextDecorationColors):
        (WebCore::RenderObject::addDashboardRegions):
        (WebCore::RenderObject::collectDashboardRegions):
        (WebCore::RenderObject::avoidsFloats):
        (WebCore::RenderObject::findCounter):
        (WebCore::RenderObject::backslashAsCurrencySymbol):
        (WebCore::RenderObject::imageChanged):
        (WebCore::RenderObject::previousOffset):
        (WebCore::RenderObject::nextOffset):
        (WebCore::RenderObject::inlineBox):
        * rendering/RenderObject.h:
        (WebCore::):
        (WebCore::RenderObject::renderName):
        (WebCore::RenderObject::parent):
        (WebCore::RenderObject::previousSibling):
        (WebCore::RenderObject::nextSibling):
        (WebCore::RenderObject::firstChild):
        (WebCore::RenderObject::lastChild):
        (WebCore::RenderObject::getOverflowClipRect):
        (WebCore::RenderObject::getClipRect):
        (WebCore::RenderObject::getBaselineOfFirstLineBox):
        (WebCore::RenderObject::setEdited):
        (WebCore::RenderObject::setStaticX):
        (WebCore::RenderObject::setStaticY):
        (WebCore::RenderObject::setPreviousSibling):
        (WebCore::RenderObject::setNextSibling):
        (WebCore::RenderObject::setParent):
        (WebCore::RenderObject::isInlineBlockOrInlineTable):
        (WebCore::RenderObject::isRenderView):
        (WebCore::RenderObject::childrenInline):
        (WebCore::RenderObject::setChildrenInline):
        (WebCore::RenderObject::isAnonymousBlock):
        (WebCore::RenderObject::isDragging):
        (WebCore::RenderObject::needsLayout):
        (WebCore::RenderObject::setMinMaxKnown):
        (WebCore::RenderObject::setNeedsLayoutAndMinMaxRecalc):
        (WebCore::RenderObject::setPositioned):
        (WebCore::RenderObject::setRelPositioned):
        (WebCore::RenderObject::setFloating):
        (WebCore::RenderObject::setInline):
        (WebCore::RenderObject::setShouldPaintBackgroundOrBorder):
        (WebCore::RenderObject::setReplaced):
        (WebCore::RenderObject::PaintInfo::PaintInfo):
        (WebCore::RenderObject::paintBackgroundExtended):
        (WebCore::RenderObject::calcWidth):
        (WebCore::RenderObject::updateFromElement):
        (WebCore::RenderObject::RepaintInfo::RepaintInfo):
        (WebCore::RenderObject::setOverrideSize):
        (WebCore::RenderObject::setPos):
        (WebCore::RenderObject::setWidth):
        (WebCore::RenderObject::setHeight):
        (WebCore::RenderObject::absolutePositionForContent):
        (WebCore::RenderObject::overflowHeight):
        (WebCore::RenderObject::overflowWidth):
        (WebCore::RenderObject::setOverflowHeight):
        (WebCore::RenderObject::setOverflowWidth):
        (WebCore::RenderObject::overflowLeft):
        (WebCore::RenderObject::overflowTop):
        (WebCore::RenderObject::overflowRect):
        (WebCore::RenderObject::stopAutoscroll):
        (WebCore::RenderObject::collapsedMarginTop):
        (WebCore::RenderObject::collapsedMarginBottom):
        (WebCore::RenderObject::maxTopMargin):
        (WebCore::RenderObject::maxBottomMargin):
        (WebCore::RenderObject::):
        (WebCore::RenderObject::setTable):
        (WebCore::RenderObject::isFloatingOrPositioned):
        (WebCore::RenderObject::containsFloat):
        (WebCore::RenderObject::setSelectionState):
        (WebCore::RenderObject::SelectionInfo::SelectionInfo):
        (WebCore::RenderObject::lowestPosition):
        (WebCore::RenderObject::rightmostPosition):
        (WebCore::RenderObject::leftmostPosition):
        (WebCore::RenderObject::calcVerticalMargins):
        (WebCore::RenderObject::font):

2006-11-08  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - added event parameters to focus-related functions so we can
          implement the "option-tab to all links" behavior without relying
          on a global "current event" -- also makes it work with DOM events

        * page/Frame.h: Removed unneeded includes. Moved some functions
        that were misplaced into the appropriate sections.
        * page/Frame.cpp:
        (WebCore::Frame::doTextFieldCommandFromEvent): Changed parameter from
        PlatformKeyboardEvent to the DOM keyboard event class.
        (WebCore::Frame::tabsToLinks): Added event parameter.
        (WebCore::Frame::tabsToAllControls): Ditto.
        (WebCore::scanForForm): Fixed code that incorrectly assumes
        that an iframe is an HTMLFrameElement (no longer true since Geoff
        changed the class hierarchy a bit).
        (WebCore::Frame::hitTestResultAtPoint): Ditto.

        * bridge/mac/FrameMac.h: Removed unneeded includes. Moved some functions
        that were misplaced into the appropriate sections.
        * bridge/mac/FrameMac.mm:
        (WebCore::selectorForKeyEvent): Changed to use a DOM event instead of
        a PlatformKeyboardEvent.
        (WebCore::FrameMac::nextKeyViewInFrame): Changed to use currentKeyboardEvent()
        and pass event into next/previousFocusNode.
        (WebCore::FrameMac::currentKeyboardEvent): Added. Creates a DOM event from
        the AppKit current event, if it's a keyboard event. Really just a hack that's
        needed to preserve some code we can remove once we deal with the last NSView-
        based form control.
        (WebCore::isKeyboardOptionTab): Added.
        (WebCore::FrameMac::tabsToLinks): Added event parameter, used to check if the
        option (alt) key is down.
        (WebCore::FrameMac::tabsToAllControls): Ditto.
        (WebCore::FrameMac::keyEvent): Changed call to prepareForUserAction() to just
        call resetMultipleFormSubmissionProtection() explicitly instead.
        (WebCore::FrameMac::mouseDown): Ditto.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityDescription]): Fixed code that incorrectly
        assumes that an iframe is an HTMLFrameElement (no longer true since Geoff
        changed the class hierarchy a bit).
        (-[WebCoreAXObject accessibilityPerformAction:]): Changed call to
        prepareForUserAction() to call resetMultipleFormSubmissionProtection()
        explicitly instead.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::advanceFocus): Changed function to take an
        event parameter, and decide the direction based on the shift key
        modifier instead of a passed-in boolean.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::nextFocusNode): Added event parameter.
        (WebCore::Document::previousFocusNode): Ditto.
        * dom/Node.h:
        * dom/Node.cpp:
        (WebCore::Node::isKeyboardFocusable): Ditto.
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto.
        * html/HTMLGenericFormElement.h:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::isKeyboardFocusable): Ditto.
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isKeyboardFocusable): Ditto.
        (WebCore::HTMLInputElement::defaultEventHandler): Ditto.
        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::isKeyboardFocusable): Ditto.
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::isKeyboardFocusable): Ditto.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::defaultEventHandler): Pass event to the
        advanceFocus function.

        * platform/TextField.h:
        * platform/mac/TextFieldMac.mm: Removed the non-search field code.

        * platform/mac/WebCoreTextField.h:
        * platform/mac/WebCoreTextField.mm: Removed the non-search field code.
        (-[WebCoreTextFieldController controlTextDidChange:]): Removed the
        call to FrameMac::handleKeyboardOptionTabInView, which is no longer
        needed since the default handler in HTMLInputElement takes care of
        option-tab.

        * platform/mac/SliderMac.mm:
        (-[WebCoreSlider canBecomeKeyView]): Changed to use currentKeyboardEvent()
        and pass event into tabsToAllControls.
        (Slider::focusPolicy): Ditto.

        * rendering/RenderLineEdit.cpp:
        (WebCore::RenderLineEdit::RenderLineEdit): Removed the non-search field code.
        (WebCore::RenderLineEdit::updateFromElement): Ditto.

2006-11-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Dave Harrison, Oliver, and Darin 
        (oh my!  where was superkevin on this one?)

        <rdar://problem/4816196> "Xcode Help" crashes in WebCore::DocumentLoader::setPrimaryLoadComplete(bool)

        More "free nil checking" we lost in the transition from ObjC to C++

        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::startLoading): Null check m_provisionalDocumentLoader and bail early.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Ditto

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Move more code into editor.
        
        * WebCore.exp:
        * bridge/EditorClient.h:
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreFrameBridge.h:
        * dom/Document.cpp:
        (WebCore::Document::relinquishesEditingFocus):
        (WebCore::Document::acceptsEditingFocus):
        (WebCore::Document::didBeginEditing):
        (WebCore::Document::didEndEditing):
        * editing/Editor.cpp:
        (WebCore::Editor::indent):
        (WebCore::Editor::outdent):
        * editing/Editor.h:
        * page/Frame.cpp:
        * page/Frame.h:

2006-11-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Add ability to HitTestResult to ask if the inner non-shared node is 
        content editable.

        * WebCore.exp: Export HitTestResult::isContentEditable()
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isContentEditable):
        * rendering/HitTestResult.h:

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.xcodeproj/project.pbxproj:
        Add DOMCSSStyleDeclarationInternal.h to the "Copy Generated Headers" build phase.

2006-11-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4713280> Would like to get an array of bounding rects rather than just the union of them for a DOMRange
        <rdar://problem/4804317> Would like SPI to get bounding box for a DOM range without having to change the selection

        Added lineBoxRects and boundingBox to Range and DOMRange. These methods correspond to the DOMNode methods.

        * bindings/objc/DOM.mm:
        (WebCore::kit):
        (-[DOMNode lineBoxRects]):
        (-[DOMRange boundingBox]):
        (-[DOMRange lineBoxRects]):
        * bindings/objc/DOMPrivate.h:
        * dom/Range.cpp:
        (WebCore::Range::boundingBox):
        (WebCore::Range::addLineBoxRects):
        * dom/Range.h:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addLineBoxRects):
        * rendering/RenderContainer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addLineBoxRects):
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):
        * rendering/RenderText.h:

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.
        
        Move methods from the bridge and frame into editor.
        
        * WebCore.exp:
        * bridge/EditorClient.h:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        * editing/Editor.cpp:
        (WebCore::Editor::removeFormattingAndStyle):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::applyStyleToSelection):
        (WebCore::Editor::applyParagraphStyleToSelection):
        (WebCore::Editor::toggleBold):
        (WebCore::Editor::toggleItalic):
        (WebCore::Editor::selectionStartHasStyle):
        * editing/Editor.h:
        * editing/JSEditor.cpp:
        * page/Frame.cpp:
        * page/Frame.h:

2006-11-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth.
        
        Fixed regression in fast/events/objc-event-api. DumpRenderTree expects to
        be able to dispatch user events even when off-screen, so we have to support
        off-screen windows when handling mouse events.

        * platform/Screen.h:
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::globalPoint): Grab the best screen instead of the screen you're
        on, since you might be off-screen.
        * platform/mac/ScreenMac.mm:
        (WebCore::screenForWindow):

2006-11-08  Darin Adler  <darin@apple.com>

        - fix bug caused by last-minute change to my check-in last night
          that is causing layout tests to hang

        * dom/Document.cpp: (WebCore::Document::completeURL): Added comments.
        * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Turn
        a null string into an empty string before calling completeURL.

2006-11-08  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej

        If the request has already been aborted, bail out of didFinishLoading()
        immediately.  This prevents state change notifications that aren't
        needed.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

2006-11-08  Darin Adler  <darin@apple.com>

        - another attempt to fix Qt build

        * loader/qt/FrameLoaderQt.cpp: Added missing include of FrameLoader.h.

2006-11-08  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - stray bits of my FrameLoader patch that I left out by accident

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow): Use m_outgoingReferrer instead of outgoingReferrer()
        inside the FrameLoader class.
        (WebCore::FrameLoader::requestFrame): Use less DeprecatedString.
        (WebCore::FrameLoader::clear): Stop the redirection timer.
        (WebCore::FrameLoader::receivedFirstData): Added an early return instead of nesting the
        entire function in an if statement. Use less DeprecatedString.
        (WebCore::FrameLoader::scheduleLocationChange): Fix backwards ? : operator.
        (WebCore::FrameLoader::scheduleRefresh): Ditto.
        (WebCore::FrameLoader::urlSelected): Use m_outgoingReferrer instead of outgoingReferrer()
        inside the FrameLoader class.
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::load): Ditto.
        (WebCore::FrameLoader::loadResourceSynchronously): Ditto.

2006-11-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Another go at fix for <rdar://problem/4820814> A crash occurs at 
        WebCore::HitTestResult::spellingToolTip() when mousing down on 
        iframe at www.macsurfer.com

        The fix from yesterday caused a layout test regression which 
        exposed an existing bug. The existing bug was that we allowed text 
        nodes to stay in the head tag, but other browsers move them to the 
        body. The previous fix also caused a performance regression, which 
        was seemingly easy to fix by moving the new clause in 
        HTMLParser::handleError() to be below the HTMLElement case.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::childAllowed): Don't allow comment nodes to 
        be the child of the document.
        * html/HTMLHeadElement.cpp:
        (WebCore::HTMLHeadElement::childAllowed): Do not allow non-
        whitespace text nodes to be children of the head.
        * html/HTMLHeadElement.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Error case for comment nodes.
        * page/FrameView.cpp:
        (WebCore::FrameView::handleMousePressEvent): Safety-net null check 
        for the original crash. 

2006-11-07  Darin Adler  <darin@apple.com>

        - another attempt to fix Qt build

        * loader/icon/IconLoader.h: Added missing include.

2006-11-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.
        
        Removed ScreenClient. It was highly unpopular, risking my midterm re-election.
        
        None of Screen's responsibilities require up-calls to WebKit or delegates, 
        so WebCore can handle it all.
        
        Moved Screen back from page/ to platform/ because it's a platform
        abstraction again.

        Merged scaling and flipping functions into 'toUserSpace' and 'toDeviceSpace',
        since the two were always used together.
        
        Changed pixel depth queries to query the deepest screen. Darin mentioned
        that it might have been a feature, not a bug, to use the main/menubar screen
        regardless of the screen you were on. For scaling and flipping that's not
        the case, but for querying pixel depth I think it is. You want to know
        about the highest pixel depth your content may display on.
        
        Tests still pass.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * page/Screen.cpp: Removed.
        * page/Screen.h: Removed.
        * page/ScreenClient.h: Removed.
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::globalPoint):
        * platform/mac/ScreenMac.mm:
        (WebCore::window):
        (WebCore::bestScreen):
        (WebCore::Screen::depth):
        (WebCore::Screen::depthPerComponent):
        (WebCore::Screen::isMonochrome):
        (WebCore::Screen::rect):
        (WebCore::Screen::usableRect):
        (WebCore::toUserSpace):
        (WebCore::toDeviceSpace):

2006-11-07  Darin Adler  <darin@apple.com>

        - try to fix Qt build

        * CMakeLists.txt: Updated for some file changes.
        * WebCoreSources.bkl: Ditto.

2006-11-07  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - moved loader code from Frame/FrameMac to FrameLoader

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_events.cpp:
        (KJS::JSLazyEventListener::parseCode):
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::putValueProperty):
        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScriptIfNeeded):
        * bindings/js/kjs_window.cpp:
        (KJS::Screen::Screen):
        (KJS::createNewWindow):
        (KJS::Window::getValueProperty):
        (KJS::Window::put):
        (KJS::Window::isSafeScript):
        (KJS::WindowFunc::callAsFunction):
        (KJS::ScheduledAction::execute):
        (KJS::Location::getValueProperty):
        (KJS::Location::put):
        (KJS::Location::toString):
        (KJS::LocationFunc::callAsFunction):
        (KJS::History::getValueProperty):
        (KJS::HistoryFunc::callAsFunction):
        * bindings/objc/DOM.mm:
        (+[DOMNode _nodeWith:WebCore::]):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::~FrameMac):
        (WebCore::FrameMac::setView):
        (WebCore::FrameMac::setStatusBarText):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge close]):
        (-[WebCoreFrameBridge addData:]):
        (-[WebCoreFrameBridge createFrameViewWithNSView:marginWidth:marginHeight:]):
        (-[WebCoreFrameBridge reapplyStylesForDeviceType:]):
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]):
        (-[WebCoreFrameBridge baseURL]):
        (-[WebCoreFrameBridge dragOperationForDraggingInfo:]):
        (-[WebCoreFrameBridge dragExitedWithDraggingInfo:]):
        (-[WebCoreFrameBridge canProvideDocumentSource]):
        (-[WebCoreFrameBridge receivedData:textEncodingName:]):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseContent):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::readyState):
        (WebCore::Document::updateTitle):
        (WebCore::Document::open):
        (WebCore::Document::close):
        (WebCore::Document::implicitClose):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::referrer):
        (WebCore::Document::finishedParsing):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::ignorableWhitespaceHandler):
        (WebCore::XMLTokenizer::notifyFinished):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::process):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::lastModified):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::willRemove):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValueFromRenderer):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        * html/HTMLPreElement.idl:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::write):
        (WebCore::HTMLTokenizer::stopParsing):
        (WebCore::HTMLTokenizer::timerFired):
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::prepareFilter):
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::setLoadInProgress):
        * loader/FrameLoader.cpp:
        (WebCore::FormSubmission::FormSubmission):
        (WebCore::ScheduledRedirection::):
        (WebCore::ScheduledRedirection::ScheduledRedirection):
        (WebCore::cancelAll):
        (WebCore::getString):
        (WebCore::isBackForwardLoadType):
        (WebCore::numRequests):
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::~FrameLoader):
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::submitFormAgain):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::stop):
        (WebCore::FrameLoader::closeURL):
        (WebCore::FrameLoader::cancelRedirection):
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::replaceContentsWithScriptResult):
        (WebCore::FrameLoader::executeScript):
        (WebCore::FrameLoader::cancelAndClear):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::responseMIMEType):
        (WebCore::FrameLoader::setResponseMIMEType):
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::write):
        (WebCore::FrameLoader::end):
        (WebCore::FrameLoader::endIfNotLoading):
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::commitIconURLToIconDatabase):
        (WebCore::FrameLoader::gotoAnchor):
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::loadDone):
        (WebCore::FrameLoader::checkCompleted):
        (WebCore::FrameLoader::checkEmitLoadEvent):
        (WebCore::FrameLoader::baseURL):
        (WebCore::FrameLoader::baseTarget):
        (WebCore::FrameLoader::completeURL):
        (WebCore::FrameLoader::scheduleRedirection):
        (WebCore::FrameLoader::scheduleLocationChange):
        (WebCore::FrameLoader::scheduleRefresh):
        (WebCore::FrameLoader::isScheduledLocationChangePending):
        (WebCore::FrameLoader::scheduleHistoryNavigation):
        (WebCore::FrameLoader::redirectionTimerFired):
        (WebCore::FrameLoader::encoding):
        (WebCore::FrameLoader::requestObject):
        (WebCore::FrameLoader::shouldUsePlugin):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::clearRecordedFormValues):
        (WebCore::FrameLoader::recordFormValue):
        (WebCore::FrameLoader::parentCompleted):
        (WebCore::FrameLoader::outgoingReferrer):
        (WebCore::FrameLoader::lastModified):
        (WebCore::FrameLoader::opener):
        (WebCore::FrameLoader::setOpener):
        (WebCore::FrameLoader::openedByJavaScript):
        (WebCore::FrameLoader::setOpenedByJavaScript):
        (WebCore::FrameLoader::handleFallbackContent):
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::userGestureHint):
        (WebCore::FrameLoader::didNotOpenURL):
        (WebCore::FrameLoader::resetMultipleFormSubmissionProtection):
        (WebCore::FrameLoader::setEncoding):
        (WebCore::FrameLoader::addData):
        (WebCore::FrameLoader::canCachePage):
        (WebCore::FrameLoader::updatePolicyBaseURL):
        (WebCore::FrameLoader::setPolicyBaseURL):
        (WebCore::FrameLoader::scrollToAnchor):
        (WebCore::FrameLoader::isComplete):
        (WebCore::FrameLoader::isLoadingMainResource):
        (WebCore::FrameLoader::url):
        (WebCore::FrameLoader::startRedirectionTimer):
        (WebCore::FrameLoader::stopRedirectionTimer):
        (WebCore::FrameLoader::updateBaseURLForEmptyDocument):
        (WebCore::FrameLoader::completed):
        (WebCore::FrameLoader::started):
        (WebCore::FrameLoader::containsPlugins):
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::setupForReplace):
        (WebCore::FrameLoader::setupForReplaceByMIMEType):
        (WebCore::FrameLoader::finalSetupForReplace):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::canTarget):
        (WebCore::FrameLoader::stopLoadingPlugIns):
        (WebCore::FrameLoader::stopLoadingSubresources):
        (WebCore::FrameLoader::stopLoadingSubframes):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::cancelMainResourceLoad):
        (WebCore::FrameLoader::cancelPendingArchiveLoad):
        (WebCore::FrameLoader::activeDocumentLoader):
        (WebCore::FrameLoader::addPlugInStreamLoader):
        (WebCore::FrameLoader::removePlugInStreamLoader):
        (WebCore::FrameLoader::hasMainResourceLoader):
        (WebCore::FrameLoader::isLoadingSubresources):
        (WebCore::FrameLoader::isLoadingPlugIns):
        (WebCore::FrameLoader::isLoading):
        (WebCore::FrameLoader::addSubresourceLoader):
        (WebCore::FrameLoader::removeSubresourceLoader):
        (WebCore::FrameLoader::releaseMainResourceLoader):
        (WebCore::FrameLoader::setDocumentLoader):
        (WebCore::FrameLoader::documentLoader):
        (WebCore::FrameLoader::setPolicyDocumentLoader):
        (WebCore::FrameLoader::provisionalDocumentLoader):
        (WebCore::FrameLoader::setProvisionalDocumentLoader):
        (WebCore::FrameLoader::state):
        (WebCore::FrameLoader::timeOfLastCompletedLoad):
        (WebCore::FrameLoader::setState):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::markLoadComplete):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::privateBrowsingEnabled):
        (WebCore::FrameLoader::clientRedirectCancelledOrFinished):
        (WebCore::FrameLoader::clientRedirected):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::closeOldDataSources):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::isStopping):
        (WebCore::FrameLoader::finishedLoading):
        (WebCore::FrameLoader::URL):
        (WebCore::FrameLoader::isArchiveLoadPending):
        (WebCore::FrameLoader::isHostedByObjectElement):
        (WebCore::FrameLoader::isLoadingMainFrame):
        (WebCore::FrameLoader::canShowMIMEType):
        (WebCore::FrameLoader::representationExistsForURLScheme):
        (WebCore::FrameLoader::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoader::cancelContentPolicyCheck):
        (WebCore::FrameLoader::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::isReplacing):
        (WebCore::FrameLoader::setReplacing):
        (WebCore::FrameLoader::revertToProvisional):
        (WebCore::FrameLoader::subframeIsLoading):
        (WebCore::FrameLoader::willChangeTitle):
        (WebCore::FrameLoader::loadType):
        (WebCore::FrameLoader::stopPolicyCheck):
        (WebCore::FrameLoader::continueAfterContentPolicy):
        (WebCore::FrameLoader::continueAfterWillSubmitForm):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::frameLoadCompleted):
        (WebCore::FrameLoader::firstLayoutDone):
        (WebCore::FrameLoader::isQuickRedirectComing):
        (WebCore::FrameLoader::closeDocument):
        (WebCore::FrameLoader::detachChildren):
        (WebCore::FrameLoader::checkLoadComplete):
        (WebCore::FrameLoader::numPendingOrLoadingRequests):
        (WebCore::FrameLoader::setClient):
        (WebCore::FrameLoader::client):
        (WebCore::FrameLoader::userAgent):
        (WebCore::FrameLoader::createEmptyDocument):
        (WebCore::FrameLoader::tokenizerProcessedData):
        (WebCore::FrameLoader::didTellBridgeAboutLoad):
        (WebCore::FrameLoader::haveToldBridgeAboutLoad):
        (WebCore::FrameLoader::handledOnloadEvents):
        (WebCore::FrameLoader::frameDetached):
        (WebCore::FrameLoader::setTitle):
        (WebCore::FrameLoaderClient::~FrameLoaderClient):
        * loader/FrameLoader.h:
        (WebCore::):
        * loader/FrameLoaderClient.h:
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure):
        (WebCore::PluginTokenizer::writeRawData):
        * loader/ResourceLoader.h:
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::finishLoading):
        * loader/loader.cpp:
        (WebCore::Loader::didReceiveResponse):
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::setPrimaryLoadComplete):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::cancelMainResourceLoad):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::createFrame):
        (WebCore::FrameLoader::objectContentType):
        (WebCore::nsArray):
        (WebCore::FrameLoader::createPlugin):
        (WebCore::FrameLoader::redirectDataToPlugin):
        (WebCore::FrameLoader::createJavaAppletWidget):
        (WebCore::FrameLoader::partClearedInBegin):
        (WebCore::FrameLoader::saveDocumentState):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::overrideMediaType):
        (WebCore::FrameLoader::mainResourceData):
        (WebCore::FrameLoader::canGoBackOrForward):
        (WebCore::FrameLoader::originalRequestURL):
        (WebCore::FrameLoader::getHistoryLength):
        (WebCore::FrameLoader::goBackOrForward):
        (WebCore::FrameLoader::historyURL):
        (WebCore::FrameLoader::didFinishLoad):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::ServeSynchronousRequest):
        (WebCore::CheckCacheObjectStatus):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::cancel):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::create):
        * loader/qt/FrameLoaderQt.cpp: Added.
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::setTitle):
        (WebCore::FrameLoader::createFrame):
        (WebCore::FrameLoader::objectContentType):
        (WebCore::FrameLoader::createPlugin):
        (WebCore::FrameLoader::createJavaAppletWidget):
        (WebCore::FrameLoader::originalRequestURL):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::document):
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::reparseConfiguration):
        (WebCore::Frame::shouldDragAutoNode):
        (WebCore::Frame::prepareForUserAction):
        (WebCore::FramePrivate::FramePrivate):
        (WebCore::FramePrivate::~FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::mediaType):
        * page/FrameView.h:
        * page/PageState.cpp:
        (WebCore::PageState::PageState):
        (WebCore::PageState::restoreJavaScriptState):
        * platform/mac/CookieJar.mm:
        (WebCore::setCookies):
        * platform/mac/TextCodecMac.cpp:
        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        * platform/qt/FrameQt.cpp:
        * platform/qt/FrameQt.h:
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary):
        * rendering/RenderBlock.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::isURLAllowed):
        (WebCore::RenderPartObject::updateWidget):
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML):

2006-11-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Get rid of some duplicate editing enums. Also rename EAlter to EAlteration.
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::registerCommandForUndoOrRedo):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge rangeByAlteringCurrentSelection:SelectionController::direction:SelectionController::granularity:]):
        (-[WebCoreFrameBridge alterCurrentSelection:SelectionController::direction:SelectionController::granularity:]):
        (-[WebCoreFrameBridge alterCurrentSelection:SelectionController::verticalDistance:]):
        (-[WebCoreFrameBridge selectionGranularity]):
        (-[WebCoreFrameBridge deleteKeyPressedWithSmartDelete:granularity:]):
        (-[WebCoreFrameBridge forwardDeleteKeyPressedWithSmartDelete:granularity:]):
        (-[WebCoreFrameBridge setTypingStyle:withUndoAction:]):
        (-[WebCoreFrameBridge applyStyle:withUndoAction:]):
        (-[WebCoreFrameBridge applyParagraphStyle:withUndoAction:]):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setModifyBias):
        (WebCore::SelectionController::modify):
        * editing/SelectionController.h:
        (WebCore::SelectionController::):
        * editing/TextGranularity.h:

2006-11-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Changed the check for "top level frame" to something much more valid

        * page/Frame.cpp:
        (WebCore::Frame::endIfNotLoading):

2006-11-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt (yesterday).

        Here is part of my patch from yesterday that is safe to roll back 
        in. It will make the BuildBot happy.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip): Null-check 
        m_innerNonSharedNode.

2006-11-07  Darin Adler  <darin@apple.com>

        * loader/icon/IconLoader.cpp: (WebCore::IconLoader::didReceiveResponse):
        Comment grammar fix.

2006-11-07  Darin Adler  <darin@apple.com>

        Rolled out change for <rdar://problem/4820814>.

        Beth's planning on landing a new change for it soon, but in the mean time
        we need layout tests succeeding again.

2006-11-07  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - fix <rdar://problem/4752069> 9A274: World of Warcraft Launcher
          crashes on launch in WebCore::ResourceLoader::start

        No layout test, because this depends on cached icons, although there's
        perhaps a way to write a test for it with some further ingenuity.

        * loader/icon/IconLoader.h: Make IconLoader inherit from Noncopyable
        to make explicit the fact that it can't be successfully copied.
        Remove notifyIconChanged function and put the contents in the caller.
        This eliminates the need for IconLoaderMac.mm. Added finishedLoading
        and clearLoadingState functions to share code. Removed m_url, since the
        resource handle already stores the URL. Renamed m_resourceLoader to
        m_handle to reflect the class's name change. Removed the 4096-byte
        inline buffer from m_data, since the malloc savings is not sufficient
        to offset the additional memory use. Removed m_httpStatusCode because
        we can instead cancel the load when we get a status code that reflects
        failure. Added m_loadIsInProgress boolean because we need to detect
        loads that complete during the ResourceHandle::create function call.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::IconLoader): Initialize m_loadIsInProgress.
        Don't initialize m_httpStatusCode.
        (WebCore::IconLoader::~IconLoader): Updated for name change.
        (WebCore::IconLoader::startLoading): Added code to use the
        m_loadIsInProgress flag to detect if the load completed while inside
        the ResourceHandle::create function. Removed code to set m_url.
        (WebCore::IconLoader::stopLoading): Call clearLoadingState to share
        more code.
        (WebCore::IconLoader::didReceiveResponse): Kill the ResourceHandle
        and finish loading if the HTTP status code indicates failure.
        (WebCore::IconLoader::didReceiveData): Removed assertion that checks
        the ResourceHandle, since we can't do that any more.
        (WebCore::IconLoader::didFinishLoading): Changed to call finishLoading
        so we can share code with the new didReceiveResponse code path.
        (WebCore::IconLoader::finishLoading): Moved code here from the
        didFinishLoading callback. Pass a URL when calling
        commitIconURLToIconDatabase. Call notifyIconChanged directly here
        instead of using a separate function. Call clearLoadingState to
        share more code with stopLoading.
        (WebCore::IconLoader::clearLoadingState): Added.

        * loader/mac/IconLoaderMac.mm: Removed.
        * WebCore.xcodeproj/project.pbxproj: Removed IconLoaderMac.mm.

2006-11-06  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/4714993> REGRESSION: After replacing a misspelled word in a sentence, the selected word wraps down to next line (10428)

        * editing/pasteboard/3976872-expected.txt:
        * editing/pasteboard/4076267-2-expected.txt:
        * editing/pasteboard/4076267-3-expected.txt:
        * editing/pasteboard/4076267-expected.txt:
        * editing/pasteboard/8145-1-expected.txt:
        * editing/pasteboard/paste-empty-startcontainer-expected.txt: Removed.
        * editing/pasteboard/paste-match-style-001-expected.txt:
        * editing/pasteboard/paste-match-style-002-expected.txt:
        * editing/pasteboard/paste-text-019-expected.txt:
        * editing/pasteboard/pasting-tabs-expected.txt:
        Updated because pasting text with no newlines does not use intermediate div.
        
        * editing/markup.cpp:
        (WebCore::fillContainerFromString):
        First parameter is now a Container so a fragment can be passed.
        
        (WebCore::createFragmentFromText):
        A string with no newlines gets added inline, rather than being put into a paragraph.

2006-11-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4820814> A crash occurs at 
        WebCore::HitTestResult::spellingToolTip() when mousing down on 
        iframe at www.macsurfer.com

        The bug here is that the source of the iframe is only a comment, 
        and we were not properly constructing the frame because it was 
        sort-of empty but not.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::childAllowed): newChild is NOT allowed if 
        it is a comment node.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): if n is a comment node and 
        there is no head, we create a head, insert in the document, and add 
        the comment node as a child. This is what Firefox does too. 
        * page/FrameView.cpp:
        (WebCore::FrameView::handleMousePressEvent): Safe-guard for the 
        fix. It is possible to get a mouse event without a target node, so 
        we null check it. (Of course, in the case of this bug, it should 
        not have been null, but it is a good thing to check for anyway.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip): Null-check 
        m_innerNonSharedNode.

2006-11-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4641880>
        Setting bullets to existing text grabs subsequent paragraph
        
        When a selection ends at the start of a paragraph, we rarely paint 
        the selection gap before that paragraph, because there often is no gap.  
        In a case like this, it's not obvious to the user that the selection 
        ends "inside" that paragraph, so it would be confusing if 
        InsertUn{Ordered}List and Indent/Outdent operated on that paragraph.
        
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply): Moved the check for editability of
        the selection to a more appropriate place.  Change the endingSelection
        if it ends at the start of a paragraph.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::doApply): Ditto.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Ditto.

2006-11-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Sarge

        <rdar://problem/4822911> - ASSERTION was a little overzealous.  
        Toned it down a bit.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):  Toned down assertion

2006-11-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux\Gdk build fixes.

        * loader/icon/IconDatabase.cpp:
        * loader/icon/SQLStatement.h:
        * platform/gdk/ChromeClientGdk.h: Added.
        (WebCore::ChromeClientGdk::~ChromeClientGdk):
        * platform/gdk/CursorGdk.cpp:
        (WebCore::pointerCursor):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::doScroll):
        (WebCore::FrameGdk::FrameGdk):
        (WebCore::FrameGdk::submitForm):
        (WebCore::FrameGdk::urlSelected):
        (WebCore::FrameGdk::openURL):
        (WebCore::FrameGdk::handleGdkEvent):
        * platform/gdk/FrameGdk.h:
        (WebCore::FrameGdk::client):
        * platform/gdk/RenderPopupMenuGdk.cpp:
        (WebCore::PopupMenu::updateFromElement):
        * platform/gdk/ScreenGdk.cpp:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (Slider::focusPolicy):
        (WebCore::ServeSynchronousRequest):
        (FrameGdk::goBackOrForward):
        (FrameGdk::getHistoryLength):
        (FrameGdk::historyURL):
        (ChromeClientGdk::canRunModal):
        (ChromeClientGdk::runModal):
        (WebCore::systemBeep):
        (WebCore::CachedResource::setPlatformResponse):
        (Path::transform):
        (ResourceLoader::loadsBlocked):
        (IconLoader::notifyIconChanged):
        * platform/network/gdk/ResourceHandleManager.cpp:
        (WebCore::writeCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::remove):
        (WebCore::ResourceHandleManager::add):

2006-11-06  Geoffrey Garen  <ggaren@apple.com>

        build fix.
        
        * WebCore.xcodeproj/project.pbxproj:

2006-11-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej, Anders, Darin.

        Removed the Page bridge. Beefed up Chrome. Added Screen and ScreenClient.
        Fixed a minor where WebCore would always assume it was displayed on the 
        monitor containing the menubar. window.open and window.showModalDialog 
        are now cross-platform. 
        
        Layout tests, manual-tests/show-modal-dialog, and manual-tests/
        window-open-features-parsing all pass. I verified the new screen functionality
        by running in DRT, and checking whether WebCore knew it was off-screen.
        
        Some refactoring remains, as all were not pleased by this design. I see
        in my future another patch.

        * bindings/js/kjs_window.cpp: Screen is now a stand-alone object with a
        client, to encapsulate asking the platform questions about the screen occupied by
        the page. (Previously, we always assumed we were on screen 0, which was a bug.)
        * bridge/mac/WebCoreFrameBridge.mm:
        (createMouseEventFromDraggingInfo): Reversed argument order, to match other
        functions.
        (-[WebCoreFrameBridge dragSourceMovedTo:]): ditto
        (-[WebCoreFrameBridge dragSourceEndedAt:operation:]): ditto
        * bridge/mac/WebCoreFrameNamespaces.h: Removed. Dead Code.
        * bridge/mac/WebCoreFrameNamespaces.mm: Removed. Dead Code.
        * bridge/mac/WebCorePageBridge.h: Removed. Dead Code.
        * bridge/mac/WebCorePageBridge.mm: Removed. Dead Code.
        * manual-tests/window-open-features-parsing.html: Updated for accuracy.
        (In this case, neither size nor position is specified, so you should
        get the default window size and position.)
        * page/Screen.cpp: Added. Includes screen-related helper functions used
        in WebCore and WebKit.
        * platform/PlatformMouseEvent.h: Exported common code so it doesn't have
        to be duplicated. Renamed "position" to "point" since both were used,
        and "point" seemed clearer.
        * platform/Screen.h: Removed. Dead Code.
        * platform/mac/LoggingMac.mm: Added. Moved code here from WebCorePageBridge
        initialization.

2006-11-06  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Tim Hatcher.

        Part of patch for http://bugs.webkit.org/show_bug.cgi?id=11323
        Link dragging behaviour does not obey WebKitEditableLinkBehavior WebPref
        
        No layout tests added as this must be tested manually by the test
        WebCore/manual-tests/contenteditable-link.html

        * WebCore.exp: Exported HitTestResult::isLiveLink().
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::isLiveLink):
        * html/HTMLAnchorElement.h: added m_wasShiftKeyDownOnMouseDown variable
        to track shift key status.
        * manual-tests/contenteditable-link.html: Added description about link
        dragging behaviour.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isLiveLink): Added.
        * rendering/HitTestResult.h:

2006-11-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        Fixes <rdar://problem/4812674> and http://bugs.webkit.org/show_bug.cgi?id=11530
        For now, we have to not load favicons when we have no Document - linking directly 
        to PDFs being the common case

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading): Check for the document and return if none

2006-11-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Dave Harrison

        <rdar://problem/4801066>
        Added a critical null frameLoader() check

        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::loadNow):

2006-11-06  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/4813973> Pressing delete key to remove empty quoted line leaves cursor mis-positioned

        Test:
        * editing/deleting/delete-br-012.html
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleSpecialCaseBRDelete):
        Update m_endingPosition when preventing merge.
        Also removed setting of m_mergeBlocksAfterDelete when this function returns true, because is is not checked in this case.

2006-11-06  Mark Rowe  <bdash@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11526
        Bug 11526: REGRESSION(r17610): Layout test failure in svg/custom/create-metadata-element.svg

        Update DOMNode::toString to always use className rather than preferring nodeName.

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::toString): Match the format returned by valueOf.

2006-11-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix RTL text in SVG to have correct positioning

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::placeBoxesHorizontally):

2006-11-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11517
        REGRESSION: Flash clicks/interactivity not working properly

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::handleMouseMoveEvent):
        (WebCore::FrameMac::handleMouseReleaseEvent):
        Restore parts of event dispatching that were removed when fixing
        bug 7323 - just bypass those for subframes.

2006-11-05  Darin Adler  <darin@apple.com>

        - quick attempt to fix the no-SVG build

        * platform/graphics/svg/SVGResource.cpp:
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceClipper.cpp:
        * platform/graphics/svg/SVGResourceClipper.h:
        * platform/graphics/svg/SVGResourceImage.h:
        * platform/graphics/svg/SVGResourceMarker.cpp:
        * platform/graphics/svg/SVGResourceMarker.h:
        * platform/graphics/svg/SVGResourceMasker.cpp:
        * platform/graphics/svg/SVGResourceMasker.h:
        * platform/graphics/svg/cg/SVGResourceMaskerCg.h:
        * platform/graphics/svg/qt/SVGResourceClipperQt.cpp:
        * platform/graphics/svg/qt/SVGResourceImageQt.cpp:
        * platform/graphics/svg/qt/SVGResourceMaskerQt.cpp:
        Added #ifdef SVG_SUPPORT to these files.

2006-11-05  Darin Fisher  <darin@chromium.org>

        Reviewed & landed by Maciej.

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

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::transferJobStatusCallback):
        (WebCore::ResourceLoader::start):

2006-11-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - moved FormData and FormDataStream to platform/network directory

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.mm:
        * loader/FormData.cpp: Removed.
        * loader/FormData.h: Removed.
        * loader/mac/FormDataStream.h: Removed.
        * loader/mac/FormDataStream.m: Removed.
        * loader/mac/FrameLoaderMac.mm:
        * loader/mac/SubresourceLoaderMac.mm:
        * platform/network/mac/FormDataStreamMac.h: Added.
        * platform/network/mac/FormDataStreamMac.mm: Added.
        * platform/network/mac/ResourceRequestMac.mm:

2006-11-05  Steve Falkenburg  <sfalken@apple.com>

        Fix build breaks

        * loader/DocumentLoader.h:
        * platform/win/ScreenWin.cpp:

2006-11-05  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - more preparation for splitting up Frame into sub-pieces
        - removed unnecessary includes from Frame.h

        * page/Frame.h: Removed unneeded includes and forward declarations.
        Added additional forward declarations. Removed the constant
        NoXPosForVerticalArrowNavigation, now moved inside SelectionController.
        Created sections of functions to be moved into Chrome, Editor,
        EventHandler, FrameLoader, SelectionController, and the Platform
        directory, as well as marking one function for deletion.

        * page/FramePrivate.h: Removed the definition of the constructor and
        destructor and removed unnecessary includes.

        * page/FrameView.h: Removed unneeded forward declarations and friend
        declarations. Created a section of functions and data to be moved into
        EventHandler.

        * bridge/mac/FrameMac.h: Removed unneeded forward declarations.
        Created sections of functions and data to be moved into Chrome,
        Editor, EventHandler, FrameLoader, and the Platform directory.

        * bridge/mac/WebCoreFrameBridge.h: Removed obsolete comment.
        Removed unused methods areScrollbarsVisible,
        nextValidKeyViewOutsideWebFrameViews, and fileWrapperForURL:.

        * page/Frame.cpp:
        (WebCore::Frame::begin): Added an overload, so Frame.h doesn't have
        to include KURL.h just for the KURL default constructor.
        (WebCore::FramePrivate::FramePrivate): Moved here from FramePrivate.h.
        (WebCore::FramePrivate::~FramePrivate): Ditto.

        * page/FrameView.cpp: Removed unused scrollbarMoved and scrollingSelf
        booleans, scrollbarMoved and cleared funcitons.
        (WebCore::FrameView::clear): Moved the code from the cleared
        function in here.
        (WebCore::FrameView::scrollTo): Removed code to set scrollingSelf.

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::FrameMac): Updated
        for changes to header.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::xPosForVerticalArrowNavigation):
        Moved NoXPosForVerticalArrowNavigation into this file.

        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_html.cpp:
        * bindings/js/kjs_window.cpp:
        * bridge/mac/WebCoreAXObject.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * css/cssstyleselector.cpp:
        * dom/Document.cpp:
        * dom/Element.cpp:
        * dom/EventTargetNode.cpp:
        * dom/MouseRelatedEvent.cpp:
        * dom/XMLTokenizer.cpp:
        * html/HTMLBaseElement.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLGenericFormElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLTokenizer.cpp:
        * loader/mac/FrameLoaderMac.mm:
        * page/PageState.cpp:
        * rendering/RenderApplet.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderPartObject.cpp:
        * rendering/RenderTreeAsText.cpp:
        * xml/XSLTProcessor.cpp:
        Added includes as needed to keep compiling, since there are fewer
        includes in Frame.h.

2006-11-05  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Dave Harrison.

        http://bugs.webkit.org/show_bug.cgi?id=11402
        REGRESSION: onChange does not work anymore for 1st item in popup

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        (WebCore::HTMLSelectElement::reset):
        Set m_lastOnChangeIndex to -1.

2006-11-04  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11453
          REGRESSION: Status bar always shows cancelled opening the page

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::~ResourceHandle): Removed call to cancel.
        Since the subresource owns the resource handle, there's no need to cancel.
        This arrangement is only temporary, anyway, since Maciej will soon change
        things so that the subresource loader uses the resource handle and the
        resource handle doesn't know anything about the subresource loader.

2006-11-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - converted more of the loader machinery to work with cross-platform
          data structures instead of Macintosh-specific ones

          converted most uses of NSURL to KURL and NSEvent to DOM Event in
          loader classes

          moved download function out of FrameLoader.h to avoid reference to
          NSURLConnection

          added DOM Event parameters to various functions so that the handlers
          can use the DOM Event instead of the global "current NSEvent";
          includes Frame::submitForm, HTMLFormElement::prepareSubmit,
          HTMLFormElement::submit, FrameLoader::load

          moved the setMainFrame call that hands ownership to the Page
          into one of the Frame constructors, and removed it from all
          the clients

          removed const from Event parameter to the urlSelected function
          (we rarely use const with DOM elements)

          removed some redundant includes and declarations from various
          header files

          removed NSURL parameter from userAgent function -- if we need it we
          can add it back, but converting from NSURL to KURL and back is
          inefficient enough that it's best to have it out for now (since it's
          been unused for years) -- if we add it back, we can choose an
          appropriate parameter type that's always inexpensive to pass

          did some basic cleanup in the IconLoader class, including removing
          an unnecessary loop that added icon data a byte at a time

          renamed safeLoad to load, since it's no different from the other
          FrameLoader load functions, safety-wise

          fixed some code that was trying to distinguish null frame name from
          empty string frame name -- both should be handled the same, but callers
          were doing it by checking for empty and turning it into null (in a way
          that was causing extra round trips between NSString and WebCore::String)

          corrected all uses of "get" and "post" to be uppercase "GET" and "POST"
          and got rid of case-insensitive compares of methods

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::submitForm):
        (WebCore::FrameMac::urlSelected):
        (WebCore::FrameMac::userAgent):
        * bridge/mac/FrameViewMac.mm:
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject rendererForView:]):
        * bridge/mac/WebCorePageBridge.h:
        * bridge/mac/WebCorePageBridge.mm:
        * bridge/mac/WebCoreSettings.mm:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::submitForm):
        * bridge/win/FrameWin.h:
        * dom/MouseRelatedEvent.cpp:
        * dom/MouseRelatedEvent.h:
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::~UIEvent):
        * dom/UIEvent.h:
        * dom/UIEventWithKeyState.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::openFunc):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitClick):
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::event):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::create):
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::didReceiveData):
        (WebCore::IconLoader::didFinishLoading):
        * loader/icon/IconLoader.h:
        * loader/loader.cpp:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::URL):
        (WebCore::DocumentLoader::unreachableURL):
        (WebCore::DocumentLoader::replaceRequestURLForAnchorScroll):
        (WebCore::DocumentLoader::URLForHistory):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::clientRedirected):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::notifyIconChanged):
        (WebCore::FrameLoader::URL):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/mac/IconLoaderMac.mm:
        (WebCore::IconLoader::notifyIconChanged):
        * loader/mac/LoaderFunctionsMac.mm:
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::shouldLoadAsEmptyDocument):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/mac/NavigationActionMac.mm:
        (WebCore::navigationType):
        (WebCore::NavigationAction::NavigationAction):
        * loader/mac/ResourceLoaderMac.mm:
        * loader/mac/SubresourceLoaderMac.mm:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::urlSelected):
        (WebCore::Frame::submitFormAgain):
        (WebCore::Frame::submitForm):
        (WebCore::Frame::endIfNotLoading):
        (WebCore::Frame::hitTestResultAtPoint):
        * page/Frame.h:
        * page/FramePrivate.h:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::FrameGdk):
        (WebCore::FrameGdk::submitForm):
        (WebCore::FrameGdk::urlSelected):
        * platform/gdk/FrameGdk.h:
        * platform/mac/TextFieldMac.mm:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/mac/ResourceResponseMac.h:
        * platform/network/mac/ResourceResponseMac.mm:
        (-[NSURLResponse WebCore]):
        * platform/network/win/ResourceHandleWin.cpp:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::submitForm):
        (WebCore::FrameQt::urlSelected):
        * platform/qt/FrameQt.h:
        * rendering/RenderLineEdit.cpp:
        (WebCore::RenderLineEdit::returnPressed):
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):
        * xml/xmlhttprequest.cpp:

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

        Reviewed by Adele.

        - replaced receivedRedirect with new willSendRequest delegate
        - removed most mac-specific loader functions
        - use ResourceResponse more in loader code

        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]): Adapted
        for CachedResource method renames.
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        Ditto.
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify): simplified
        based on ResourceResponse
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage): adapt for ResourceResponse
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource): store a ResourceResponse;
        platform response is now called platformResponse and expiration date
        is removed.
        (WebCore::CachedResource::~CachedResource): ditto
        (WebCore::CachedResource::isExpired): ditto
        * loader/CachedResource.h:
        (WebCore::CachedResource::platformResponse): ditto
        (WebCore::CachedResource::setResponse): ditto
        (WebCore::CachedResource::canDelete): ditto
        * loader/LoaderFunctions.h:
        * loader/loader.cpp:
        (WebCore::Loader::receivedResponse): Adjusted for renames.
        (WebCore::Loader::didReceiveResponse): Store whole ResourceResponse
        in the CachedResource.
        * loader/loader.h:
        * loader/mac/FormDataStream.h:
        * loader/mac/FormDataStream.m:
        (WebCore::getStreamFormDatas): Rearranged things so it's
        possible to get a FormData back out of a form data stream.
        (WebCore::formCreate): ditto
        (WebCore::formFinalize): ditto
        (WebCore::httpBodyFromStream): ditto
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad): s/response/platformResponse/
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus): ditto
        (WebCore::CachedResource::setPlatformResponse): ditto
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest): send redirect
        to client appropriately
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willSendRequest): new entry
        point for SubresourceLoader, dispatch to client.
        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::allowHTTPCookies): implemented
        (WebCore::ResourceRequest::setAllowHTTPCookies): ditto
        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse): initialize expiration
        date(!)
        * platform/network/cf/FormDataStreamCFNet.cpp: Added.
        (WebCore::getStreamFormDatas): Added this, ported from NSURL version.
        (WebCore::openNextStream): ditto
        (WebCore::formCreate): ditto
        (WebCore::formFinalize): ditto
        (WebCore::formCanRead): ditto
        (WebCore::formEventCallback): ditto
        (WebCore::setHTTPBody): ditto
        (WebCore::httpBodyFromStream): ditto
        * platform/network/cf/FormDataStreamCFNet.h: Added.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest): implemented
        (WebCore::ResourceHandle::start): use new ResourceRequest stuff
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::getResourceResponse): do nothing for a null response
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest): Implemented; dispatch to client.
        * platform/network/mac/ResourceRequestMac.h: Added.
        * platform/network/mac/ResourceRequestMac.mm: Added.
        (WebCore::getResourceRequest): Added way to convert an NSURLRequest
        to a ResourceRequest.
        (WebCore::nsURLRequest): Opposite of the above.
        * platform/network/cf/ResourceRequestCFNet.h: Added.
        * platform/network/cf/ResourceRequestCFNet.cpp: Added.
        (WebCore::getResourceRequest): Added way to convert an CFURLRequest
        to a ResourceRequest.
        (WebCore::cfURLRequest): Opposite of the above.
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::willSendRequest): Renamed from receivedRedirect,
        adjusted.
        * xml/xmlhttprequest.h:

2006-11-04  Darin Adler  <darin@apple.com>

        Change suggested by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11514
          REGRESSION (r17438): Repro crash when opening a web archive

        * bridge/mac/WebCorePageState.mm:
        (-[WebCorePageState dealloc]): Add null check.
        (-[WebCorePageState finalize]): Ditto.

2006-11-04  Bertrand Guiheneuf <guiheneuf@gmail.com>

        Reviewed by Maciej, tweaked and landed by Alexey (using a patch by Peter Kasting).

        http://bugs.webkit.org/show_bug.cgi?id=11433
        Fixes to get WebKit to run on Windows; implemented AffineTransformCairo.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        Added platform/graphics platform/network and platform/network/win to headers search paths
        Created platform/graphics and platform/network filters in hierarchy
        Moved GraphicsContext and GraphicsTypes to their respective filters
        Added EditorClient.h
        Added FrameLoader* files in loader/
        Added HitTest* files in rendering/
        Added Editor.* files in editing/
        Added DeleteButton.* and DeleteButtonController.* in editing/

        * bridge/win/ChromeClientWin.h: Added.
        (WebCore::ChromeClientWin::~ChromeClientWin):
        * bridge/win/EditorClientWin.h: Added.
        (WebCore::EditorClientWin::~EditorClientWin):

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::submitForm):
        (WebCore::FrameWin::createNewWindow):
        * bridge/win/FrameWin.h:
        Added EditorClient parameter to constructor
        Replace usage of FrameLoadRequest::m_request with FrameLoadRequest::resourceRequest()
        Removed openURL() and openURLRequest from class definition

        * bridge/win/PageWin.cpp:
        * platform/AffineTransform.h:
        * platform/cairo/AffineTransformCairo.cpp: Added.
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::mapRect):
        (WebCore::AffineTransform::isIdentity):
        (WebCore::AffineTransform::m11):
        (WebCore::AffineTransform::m12):
        (WebCore::AffineTransform::m21):
        (WebCore::AffineTransform::m22):
        (WebCore::AffineTransform::dx):
        (WebCore::AffineTransform::dy):
        (WebCore::AffineTransform::reset):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::rotate):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::shear):
        (WebCore::AffineTransform::det):
        (WebCore::AffineTransform::invert):
        (WebCore::AffineTransform::operator cairo_matrix_t):
        (WebCore::AffineTransform::operator== ):
        (WebCore::AffineTransform::operator*= ):
        (WebCore::AffineTransform::operator* ):
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onHandleCreated):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::fileLoadTimer):
        (WebCore::ResourceHandle::cancel):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::FrameWin::goBackOrForward):
        (WebCore::FrameWin::getHistoryLength):
        (WebCore::FrameWin::historyURL):
        (WebCore::ServeSynchronousRequest):
        (WebCore::ChromeClientWin::canRunModal):
        (WebCore::ChromeClientWin::runModal):
        (WebCore::EditorClientWin::shouldDeleteRange):
        (WebCore::EditorClientWin::shouldShowDeleteInterface):
        (WebCore::EditorClientWin::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientWin::isGrammarCheckingEnabled):
        (WebCore::EditorClientWin::spellCheckerDocumentTag):
        (WebCore::Path::transform):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::ResourceLoader::loadsBlocked):
        (WebCore::systemBeep):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):

2006-11-04  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11448
        &lang; and &rang; entities are mapped to the incorrect Unicode codepoint

        * html/HTMLEntityNames.gperf: Use canonical Unicode equivalents for these characters.

2006-11-03  Mark Rowe  <bdash@webkit.org>

        Reviewed by Oliver.

        Update Windows and Qt project files for file removals in r17585.

        * CMakeLists.txt:
        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-11-03  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        The patch fixes text field drawing on the Qt platform.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintTextField): Use the style to correctly
        render the text field

2006-11-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Tim.

        Correct incorrect call to SetCursor

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize):

2006-11-03  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Removed DeprecatedRenderSelect and ListBox classes.

        * WebCore.xcodeproj/project.pbxproj:
        * css/html4.css:
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::isKeyboardFocusable):
        (WebCore::HTMLSelectElement::isMouseFocusable):
        (WebCore::HTMLSelectElement::createRenderer):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        (WebCore::HTMLSelectElement::notifyOptionSelected):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        * html/HTMLSelectElement.h:
        * platform/ListBox.h: Removed.
        * platform/mac/FontCacheMac.mm:
        * platform/mac/ListBoxMac.mm: Removed.
        * platform/win/TemporaryLinkStubs.cpp:
        * rendering/DeprecatedRenderSelect.cpp: Removed.
        * rendering/DeprecatedRenderSelect.h: Removed.

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

        Not reviewed, fix for accidental commit.

        - rolled back more of the accidentall commit that I forgot.

        * platform/network/mac/ResourceRequestMac.h: Removed.
        * platform/network/mac/ResourceRequestMac.mm: Removed.

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

        Not reviewed, fix for accidental commit.

        - roll back some network changes accidentally committed with a previous patch.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        (WebCore::CachedResource::setExpireDate):
        (WebCore::CachedResource::isExpired):
        * loader/CachedResource.h:
        (WebCore::CachedResource::response):
        * loader/LoaderFunctions.h:
        * loader/loader.cpp:
        (WebCore::Loader::receivedResponse):
        (WebCore::Loader::didReceivedResponse):
        * loader/loader.h:
        * loader/mac/FormDataStream.h:
        * loader/mac/FormDataStream.m:
        (WebCore::formCreate):
        (WebCore::formFinalize):
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus):
        (WebCore::CachedResource::setResponse):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::receivedRedirect):
        * platform/network/ResourceRequest.h:
        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::redirectedToURL):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::receivedRedirect):
        * xml/xmlhttprequest.h:

2006-11-03  Anders Carlsson  <acarlsson@apple.com>

        Rubber-stamped by Oliver.

        Remove these, they have been merged with SVGRenderTreeAsText.
        
        * rendering/SVGRenderAsText.cpp: Removed.
        * rendering/SVGRenderAsText.h: Removed.

2006-11-03  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):

2006-11-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin, Beth.
        
        First cut at factoring Page's UIDelegate-related functions into Chrome
        and ChromeClient.

        Layout tests pass.
        
        * bridge/mac/PageMac.mm: Removed platform-specific constructor, added
        setBridge method to replace it.
        (WebCore::Page::setBridge):

        * bridge/mac/WebCorePageBridge.h: Simplified some things based on the fact
        that WebCorePageBridge.h doesn't need to be included by ObjC-only files,
        and, now that it uses PassRefPtr, can't be.
        
        * page/Chrome.cpp: Added. Code copied and converted to c++ from WebCorePageBridge.mm.

        * page/Page.h:
        (WebCore::Page::dragCaretController): Made this function non-const so that
        m_dragCaretController doesn't have to be mutable.

2006-11-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=7323
        REGRESSION (10.4.4): ondrag* events don't fire on page in a frame

        * bridge/mac/FrameMac.h: Moved drag source information to a static variable
        in FrameMac.mm. There can be only one drag active at any moment, and having 
        this information here was making sharing this information between 
        subframes hard.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::FrameMac): Initialize sharedDragInfo.
        (WebCore::FrameMac::freeClipboard):
        (WebCore::FrameMac::dragHysteresisExceeded):
        (WebCore::FrameMac::handleMouseMoveEvent):
        (WebCore::FrameMac::handleMouseReleaseEvent):
        (WebCore::FrameMac::mouseDown):
        (WebCore::FrameMac::dragSourceMovedTo):
        (WebCore::FrameMac::dragSourceEndedAt):
        (WebCore::FrameMac::dispatchDragSrcEvent):
        Access drag source info via sharedDragInfo - this fixes drag source even dispatching.
        Also removed some old code that was forwarding mouse events to subviews to make 
        HTML editing work in subframes.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateDragAndDrop):
        (WebCore::FrameView::cancelDragAndDrop):
        (WebCore::FrameView::performDragAndDrop):
        Forward events to subframes for dispatching - this fixes drag target events.

2006-11-03  Zack Rusin  <zack@kde.org>

        Reviewed by Tim.

        Fixing compile.

        * platform/qt/LoaderFunctionsQt.cpp:
        (WebCore::CachedResource::setPlatformResponse): Renamed from setResponse

2006-11-01  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        Moving the word/sentence seperators into a file of their own
        and implementing findWordBoundary.

        * CMakeLists.txt:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/qt/TextBoundaries.cpp: Added.
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):

2006-11-03  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        Compile on both KDE and Qt platforms

        * CMakeLists.txt: add zlib explicitly
        * platform/network/qt/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::self):
        (WebCore::QtJob::QtJob):
        (WebCore::QtJob::timerEvent): Integrate both implementations
        so that moc can parse it
        (WebCore::ResourceHandleManager::deliverJobData):
        (WebCore::ResourceHandleManager::remove):
        * platform/network/qt/ResourceHandleManager.h:

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

        No review, suggested by Mitz.

        - fix a #if to be #ifdef

        * platform/graphics/svg/cg/SVGResourceImageCg.cpp:

2006-11-03  Zack Rusin  <zack@kde.org>

        Reviewed and landed by Maciej.
        
        Compile on the Qt platform.

        * ksvg2/misc/KCanvasRenderingStyle.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::getStylePainterAndWidgetFromPaintInfo):

2006-11-03  Zack Rusin  <zack@kde.org>

        Reviewed by Hyatt. Landed by Maciej.

        Adding setPlatformPen/setPlatformFont/setPlatformFillColor
        to graphics context to be able to set consistant state
        on the platform specific painter without having to change
        fill/stroke/font on every operation. This fixes color/stroke/fill
        and font handling in the Qt port.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setFont):
        (WebCore::GraphicsContext::setPen):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::setPlatformPen):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformFont):
        * platform/graphics/GraphicsContext.h:
        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::toQtCompositionMode):
        (WebCore::toQtLineCap):
        (WebCore::toQtLineJoin):
        (WebCore::toQPenStyle):
        (WebCore::penToQPen):
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::setPlatformFont):
        (WebCore::GraphicsContext::setPlatformPen):
        (WebCore::GraphicsContext::setPlatformFillColor):
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::ScrollViewCanvasQt):
        (WebCore::ScrollViewCanvasQt::paintEvent):
        (WebCore::ScrollViewCanvasQt::handleKeyEvent):
        * platform/qt/ScrollViewCanvasQt.h:

2006-11-02  Adele Peterson  <adele@apple.com>

        Reviewed by Anders.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=9581
        REGRESSION: The new NativeTextArea scrolls to the top when the control is unfocused.

        Test: fast/forms/textarea-no-scroll-on-blur.html

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::forwardEvent):
          On blur, only scroll back to the start for text fields.

2006-11-02  Anders Carlsson  <acarlsson@apple.com>

        Another build fix.
        
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):

2006-11-02  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):

2006-11-02  Kevin Ollivier <kevino@theolliviers.com>

        Reviewed by Geoff, landed by Anders.
        
        Fix dependency problems caused when running move-js-headers.sh
        
        * move-js-headers.sh:
        Use cp -p instead of just cp so that the modification time
        of the original files are used.

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

        Reviewed by Tim H, landed by Anders.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10840
        REGRESSION: Shadow of file upload button is clipped

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject): Add 2px to the clip
        height to keep from clipping in the shadow

2006-11-02  Eike Preuss  <mail@eikepreuss.de>

        Reviewed by Maciej, landed by Anders.

        * platform/qt/ScrollViewQt.cpp: Fix translation of coordinates between
        content and window. ScrollViewQt already receives correct content
        coordinates from QScrollArea.
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::windowToContents):

2006-11-02  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Maciej, landed by Anders

        * CMakeLists.txt: Make linkage against KDE libraries conditional
        * platform/network/qt/ResourceHandleManager.cpp: Added a simple
          Qt base resource handler that supports only requests to the
          local filesystem. Used when compiling without KDE support.
          ResourceHandleManager.cpp/h are to be split up into ResourceHandleManagerKDE
          and ResourceHandleManagerQt in the future, as well as QtJob.cpp/h.
        (WebCore::QtJob::QtJob):
        (WebCore::QtJob::timerEvent):
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::ResourceHandleManager::self):
        (WebCore::ResourceHandleManager::remove):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::deliverJobData):
        * platform/network/qt/ResourceHandleManager.h:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::runJavaScriptAlert):
        (WebCore::FrameQtClientDefault::runJavaScriptConfirm):
        (WebCore::FrameQtClientDefault::runJavaScriptPrompt):
        * platform/qt/LoaderFunctionsQt.cpp: Use the Qt messagebox and
          input dialog functions when compiling without KDE support
        (WebCore::ServeSynchronousRequest):

2006-11-02  David Carson  <dacarson@gmail.com>

        Reviewed by Geoff, landed by Anders.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=11471
        Initializing variable in constructor.

        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):

2006-11-02  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Use CFMutableURLRequestRef instead of CFHTTPMessageRef since not all URL requests are http requests.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::addHeadersFromHashMap):
        Don't set all headers at once since that clears any previous headers set.
        
        (WebCore::ResourceHandle::start):

2006-11-02  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz and Geoff.

        - Fix for:
        <rdar://problem/4650271> REGRESSION(NativeTextArea): Textareas don't get scrollbars when text gets too big for content area (10105)
        <rdar://problem/4650813> REGRESSION(tiger-leopard): typing in a textarea in Safari is extremely slow (sample shows focus ring drawing)
        <rdar://problem/4658779> REGRESSION: Text selection is weird in textareas in Trac wiki editing pages

        Test: fast/forms/textarea-scrollbar.html

        To avoid some of our flexbox bugs for textareas, we're moving the text controls back to RenderBlock.  This should make them
        a lot more stable.  In the future, when we've worked out more of the flexbox kinks, we may want to consider moving them back.

        * rendering/RenderTextControl.h: Convert text controls back to RenderBlock instead of RenderFlexibleBox.
        * rendering/RenderTextControl.cpp: 
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::setStyle):
        (WebCore::RenderTextControl::createDivStyle):
        (WebCore::RenderTextControl::updateFromElement):
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::baselinePosition):
        (WebCore::RenderTextControl::nodeAtPoint):
        (WebCore::RenderTextControl::layout): Set the inner div's height explicitly before doing a normal layout.
        (WebCore::RenderTextControl::scrollWidth):
        (WebCore::RenderTextControl::scrollHeight):
        (WebCore::RenderTextControl::scrollLeft):
        (WebCore::RenderTextControl::scrollTop):

        * rendering/RenderObject.cpp: (WebCore::RenderObject::markContainingBlocksForLayout): Make subtree layout optimization work for textareas.

2006-11-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff Garen

        * editing/Selection.cpp:
        (WebCore::Selection::showTreeForThis):
        this debugging method now displays start offset and end offset, at Darin's suggestion

2006-11-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/4062865>
        Copy/paste of a select element fails to include the options
        
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify): Added paragraphBoundary.
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): Added checks for input elements
        and textareas.  Insertion operations would fail when performed just 
        before/after one of these elements b/c the content would be put inside 
        the element.
        (WebCore::enclosingNodeWithTag): Fixed a problem when calling these in non
        editable content, and made the code to stop at an root faster (don't check
        isDescendantOf on every iteration).
        (WebCore::enclosingNodeOfType): Ditto.
        (WebCore::enclosingList): Ditto.
        (WebCore::enclosingListChild): Ditto.  Added a FIXME, this function seems
        inappropriately named.
        * editing/markup.cpp:
        (WebCore::startMarkup): Use the text node's value instead of its rendered
        content for text nodes inside select elements.  One might also turn off
        annotation when createMarkup enters a select element, but createMarkup
        is iterative, not recursive, so doing so would be complicated.
        (WebCore::createMarkup): Add markup for unrendered nodes if they are 
        descendants of a select element.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Migrate to isBlock/enclosingBlock.  Fixes bug
        where various replaced elements can't be copied when they are the only
        thing selected.
        (WebCore::endOfParagraph): Ditto.

2006-11-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Converting more or kcanvas/quartz from Obj-C to C++
        Minor SVG updates
        compatibility fixes

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/device/KRenderingPaintServer.h:
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.cpp: Added.
        (WebCore::KRenderingPaintServerGradientQuartz::updateQuartzGradientCache):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm: Removed.
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.cpp: Added.
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm: Removed.
        * kcanvas/device/quartz/QuartzSupport.h:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/scripts/cssmakeprops:
        * ksvg2/scripts/cssmakevalues:
        * ksvg2/scripts/make_names.pl:
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        * ksvg2/svg/SVGAnimationElement.cpp:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/svgpathparser.cpp:
        * platform/Path.cpp:
        * platform/graphics/svg/SVGResourceImage.h:
        * rendering/RenderPath.cpp:
        * rendering/SVGRenderAsText.cpp:

2006-11-02  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - Fix a regression from r17521: painting of and crash caused by tables
          with collapsed borders

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint): Changed 'paintInfo' to 'info'. Prior to
        r17521, 'paintInfo' was the local variable. Now 'info' is the local variable
        and 'paintInfo' is the parameter, which we were accidently modifying.

2006-11-01  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=11277
        REGRESSION: Incomplete repaint of overflow areas when deleting

        Restrict the repaint rect for overflow blocks after the height has been fully computed.
        Also, adjust the repaint rect coordinates for the scroll offset.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::layoutBlock):
        * rendering/bidi.cpp: (WebCore::RenderBlock::layoutInlineChildren):

2006-11-01  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11474
        Rename the "p" member variable of the PaintInfo struct to "context"

        - Renames the 'p' and 'r' member variables of the PaintInfo struct to
          'context' and 'rect' respectively.

        - Assorted surrounding cleanups.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::paint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintBackground):
        (WebCore::InlineFlowBox::paintBackgroundAndBorder):
        (WebCore::InlineFlowBox::paintDecorations):
        * rendering/InlineFlowBox.h:
        * rendering/InlineRunBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintCaret):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::paintEllipsisBoxes):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::fillInlineSelectionGaps):
        (WebCore::RenderBlock::fillBlockSelectionGaps):
        (WebCore::RenderBlock::fillHorizontalSelectionGap):
        (WebCore::RenderBlock::fillVerticalSelectionGap):
        (WebCore::RenderBlock::fillLeftSelectionGap):
        (WebCore::RenderBlock::fillRightSelectionGap):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paint):
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::paintObject):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::continuationBefore):
        (WebCore::RenderFlow::addChildWithContinuation):
        (WebCore::RenderFlow::addChild):
        (WebCore::RenderFlow::attachLineBox):
        (WebCore::RenderFlow::destroy):
        (WebCore::RenderFlow::dirtyLinesFromChangedChild):
        (WebCore::RenderFlow::dirtyLineBoxes):
        (WebCore::RenderFlow::createInlineBox):
        (WebCore::RenderFlow::paintLines):
        (WebCore::RenderFlow::getAbsoluteRepaintRect):
        (WebCore::RenderFlow::lowestPosition):
        (WebCore::RenderFlow::rightmostPosition):
        (WebCore::RenderFlow::leftmostPosition):
        (WebCore::RenderFlow::caretRect):
        (WebCore::RenderFlow::addFocusRingRects):
        (WebCore::RenderFlow::paintOutline):
        (WebCore::RenderFlow::paintOutlineForLine):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject):
        (WebCore::RenderListBox::paintScrollbar):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::paintObject):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paint):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::PaintInfo::PaintInfo):
        (WebCore::RenderObject::paintBoxDecorations):
        (WebCore::RenderObject::paintingRootForChildren):
        (WebCore::RenderObject::shouldPaintWithinRoot):
        (WebCore::RenderObject::printBoxDecorations):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::renderName):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::getBaseline):
        (WebCore::RenderTableSection::setNeedCellRecalc):
        * rendering/RenderText.h:
        (WebCore::RenderText::renderName):
        (WebCore::RenderText::paint):
        (WebCore::RenderText::element):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::RenderTheme):
        (WebCore::RenderTheme::~RenderTheme):
        (WebCore::RenderTheme::controlSupportsTints):
        (WebCore::RenderTheme::adjustRepaintRect):
        (WebCore::RenderTheme::themeChanged):
        (WebCore::RenderTheme::supportsHover):
        (WebCore::RenderTheme::paintCheckbox):
        (WebCore::RenderTheme::setCheckboxSize):
        (WebCore::RenderTheme::paintRadio):
        (WebCore::RenderTheme::setRadioSize):
        (WebCore::RenderTheme::paintButton):
        (WebCore::RenderTheme::setButtonSize):
        (WebCore::RenderTheme::paintTextField):
        (WebCore::RenderTheme::paintTextArea):
        (WebCore::RenderTheme::paintMenuList):
        (WebCore::RenderTheme::paintMenuListButton):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintCheckbox):
        (WebCore::RenderThemeMac::paintRadio):
        (WebCore::RenderThemeMac::paintButton):
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintTextArea):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButton):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::isWidget):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintEllipsisBox):
        (WebCore::RootInlineBox::paintCustomHighlight):
        (WebCore::RootInlineBox::paint):
        (WebCore::RootInlineBox::fillLineSelectionGap):
        * rendering/RootInlineBox.h:
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):

2006-11-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver, Brady.

        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::setLastModifiedDate):
        (WebCore::ResourceResponse::lastModifiedDate):
        Add getters and setters for last modified dadte.
        
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::getResourceResponse):
        Fetch the last modified date. Add correct offset to expired date.

2006-11-01  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Mitz.

        Added missing "break;" statement in switch statement from r17493.

        Bug 11442: [CSS 3] support for cursor: all-scroll
        http://bugs.webkit.org/show_bug.cgi?id=11442

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2006-10-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix image dragging

        This is covered by editing/selection/drag-to-contenteditable-iframe.html

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString): Changed imageTag to imgTag, for
        HTML IMG elements.
        (WebCore::HitTestResult::absoluteImageURL): Ditto.

2006-10-31  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        This adds the back-end of the remaining WebElementDictionary 
        functions into HitTestResult.

        * WebCore.exp:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::title):
        (WebCore::displayString): This is nearly identical to the 
        displayString() defined in DOMInternal.mm except that it returns a 
        String instead of an NSString. The old code path used the 
        DOMInternal method, so I made a new one here for the new code path.
        (WebCore::HitTestResult::altDisplayString):
        (WebCore::HitTestResult::image):
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::titleDisplayString):
        (WebCore::HitTestResult::textContent):
        * rendering/HitTestResult.h:

2006-10-31  John Sullivan  <sullivan@apple.com>

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::markMisspellings):
        Tiger build fix: added an #ifndef BUILDING_ON_TIGER where one was needed.

2006-10-31  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej
        
        - fixed <rdar://problem/4804627> ToolTips do not appear for grammar suggestions
        
        The foundation of this was in my last checkin. This checkin is all about displaying
        the correct string in the toolTip.

        * dom/DocumentMarker.h:
        New description field in this struct.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        When adding a grammar marker, supply the appropriate description. Also, added a comment
        about the remaining work to make grammar checking return sensible answers.
        (WebCore::FrameMac::markMisspellings):
        ditto (yes, still needs some refactoring to minimize duplicated code)
        
        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::addMarker):
        Now takes an optional description string
        (WebCore::Document::markerContainingPoint):
        New function, returns a pointer to the (first) marker of the specified type whose rect 
        contains the specified point, or 0 if none.
        
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip):
        Replaced hardwired string placeholder implementation with code that uses markerContainingPoint
        and gets the description from the marker.

2006-10-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        Fixed crash resulting from Darin's last patch to remove BrowserExtension.

        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::createWindow):
        * manual-tests/window-open-features-parsing.html: Updated for clarity.

2006-10-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alice.

        Moved some Editing code from WebKit, the bridge, and WebCore::Frame down 
        to WebCore::Editor.
        
        Layout tests pass.
        
        Renamed "may*" to "can*" because "can" is more accurate (these functions
        aren't just about permission) and it matches WebKit.

        (WebCore::FrameMac::handleMouseMoveEvent): Directly test for dragging in a 
        password field. Now that WebCore fully implements canCopy(), it doesn't just
        mean "the selection is not in a password field" anymore.
        (-[WebCoreFrameBridge _shouldAllowAccessFrom:]): Removed this #ifed-out code. 
        The fact that it's not called anymore may represent a security issue, but I
        don't see how commented-out code will help reveal the issue, and the
        bridge is going away, anyway.
        * editing/SelectionController.h: Changed selection() calls to references
        to m_sel, to match the rest of the file.

2006-10-31  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4711063>
        Pasting 10K lines into Mail/Blot takes ~7sec, in TextEdit it takes ~1.5sec

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Don't do the test
        insertion and plain text string creation unless we need the string
        for a BeforeTextInserted event handler or for a plain text only region.
        (WebCore::ReplacementFragment::removeInterchangeNodes): Added, moved
        code here from ReplacementFragment's constructor.
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement): Added a
        FIXME.
        * editing/ReplaceSelectionCommand.h:

2006-10-31  Ada Chan  <adachan@apple.com>

        Reviewed by Adam

        Correct forward declarations of the HitTestRequest struct.

        * rendering/EllipsisBox.h:
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/RenderLayer.h:
        * rendering/RenderObject.h:

2006-10-31  John Sullivan  <sullivan@apple.com>

        Reviewed by Beth and Adam

        Support for displaying tooltips for bad grammar. Currently this always displays the same tooltip; 
        next I'll make it use a string that's relevant for a specific grammar error.

        * WebCore.exp:
        export symbol for spellingToolTip function
        
        * rendering/HitTestResult.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip):
        new function, returns the string to be used in a tool tip that describes the questionable grammar
        
        * rendering/InlineTextBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        now takes a style and font, needed to compute the rect representing the range containing
        questionable grammar. Computes the rect and associates it with the marker.
        (WebCore::InlineTextBox::paintDocumentMarkers):
        Pass in the style and font now needed by paintSpellingOrGrammarMarker

2006-10-31  Adele Peterson  <adele@apple.com>

        Removed commented out variable from last checkin.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):

2006-10-31  Brady Eidson  <beidson@apple.com>

        Build fix (unused variable in release builds)

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):

2006-10-31  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=11127 NativeListBox: arrow and drag selection should pivot around one list item
        and http://bugs.webkit.org/show_bug.cgi?id=11173 REGRESSION (NativeListBox): Shift-clicking items in list box doesn't expand the current selection
        and http://bugs.webkit.org/show_bug.cgi?id=11417 REGRESSION: onchange does not fire for list-style select elements

        Tests: 
        * LayoutTests/fast/forms/listbox-selection.html
        * LayoutTests/fast/forms/listbox-onchange.html

        * html/HTMLSelectElement.h: Added m_selectedListIndexBase and m_selectedListIndexExtent to track indices for the active selection in progress.
          Added 2 vectors to cache selection state.  One is kept so that the previous selection state can be restored as the active selection grows and shrinks.
          And one for onChange, that is updated after onChange is fired.
          Added m_activeSelectionState to keep track of whether the current drag selection is selecting or deselecting.
 
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement): Initialized new variables.
        (WebCore::HTMLSelectElement::setSelectedIndex): If needed, initialize m_selectedListIndexBase and m_selectedListIndexExtent.
        (WebCore::HTMLSelectElement::dispatchBlurEvent): Only fire the onChange event here for menu lists.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Updates base and extent variables for mouse and key events.
        (WebCore::HTMLSelectElement::setBase): Added. Also caches the selection state.
        (WebCore::HTMLSelectElement::setExtent): Added.
        (WebCore::HTMLSelectElement::updateListBoxSelection): Added.
        (WebCore::HTMLSelectElement::listBoxOnChange): Added.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement): Only scroll to reveal the first index if both the first and last indices aren't visible.
        (WebCore::RenderListBox::listIndexAtOffset): Added.  Replaces optionAtPoint, which is no longer used.
        (WebCore::RenderListBox::autoscroll): Now sets the selection using the select's base and extent.
        (WebCore::RenderListBox::stopAutoscroll): Added.  Tells the select element to fire onChange.  This is needed because the autoscroll can end from a mouseUp
         outside of the list box, and the select element won't get a mouseUp event directly.  But the frame will stop the autoscroll at that point, and now we can
         notify the select element from here.
        (WebCore::RenderListBox::scrollToRevealElementAtListIndex): Checks new listIndexIsVisible method.
        (WebCore::RenderListBox::listIndexIsVisible): Added.
        (WebCore::RenderListBox::valueChanged): Removed unnecessary printf.

        * page/Frame.cpp: (WebCore::Frame::stopAutoscrollTimer): Added rendererIsBeingDestroyed argument, so when the renderer calls this during destruction, 
        we don't try to use the pointer to that renderer to call stopAutoscroll.  This is done so a renderer that's still alive has a chance to do some cleanup after autoscroll.
        * rendering/RenderListBox.h: (WebCore::RenderListBox::shouldAutoscroll): Always returns true now, since we're also updating selection from the autoscroll timer.
        * rendering/RenderObject.h: (WebCore::RenderObject::stopAutoscroll): Added.
        * rendering/RenderObject.cpp: (WebCore::RenderObject::destroy): Calls stopAutoscrollTimer with rendererIsBeingDestroyed argument.

2006-10-31  Beth Dakin  <bdakin@apple.com>

        Forgot to check this in a minute ago. Oops!! Thanks Mitz!

        * rendering/HitTestRequest.h: Added.
        (WebCore::HitTestRequest::HitTestRequest):

2006-10-31  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11461 HitTestResult 
        should be split into HitTestRequest and HitTestResult

        This patch creates a new struct called HitTestRequest that holds 
        the three boolean values (readonly, active, and mouseMove) that 
        were formerly a part of HitTestResult. All hitTest() and 
        nodeAtPoint() functions now take a HitTestRequest in addition to 
        the HitTestResult.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::eventMayStartDrag):
        (WebCore::FrameMac::handleMouseMoveEvent):
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXTextMarkerForPosition:]):
        (-[WebCoreAXObject accessibilityHitTest:]):
        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::prepareMouseEvent):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains):
        * page/Frame.cpp:
        (WebCore::Frame::hitTestResultAtPoint):
        * page/FrameView.cpp:
        (WebCore::FrameView::handleWheelEvent):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        * rendering/HitTestResult.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nodeAtPoint):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderBox.h:
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::hitTestLines):
        * rendering/RenderFlow.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::nodeAtPoint):
        * rendering/RenderForeignObject.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::nodeAtPoint):
        * rendering/RenderFrameSet.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::nodeAtPoint):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateHoverActiveState):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::hitTest):
        (WebCore::RenderObject::nodeAtPoint):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint):
        * rendering/RenderPath.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtPoint):
        * rendering/RenderSVGText.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        (WebCore::RenderText::nodeAtPoint):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::nodeAtPoint):
        * rendering/RenderTextControl.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::nodeAtPoint):
        * rendering/RootInlineBox.h:

2006-10-31  Lars Naesbye Christensen <lars@naesbye.dk>

        Reviewed by Maciej.

        Bug 11442: [CSS 3] support for cursor: all-scroll
        http://bugs.webkit.org/show_bug.cgi?id=11442

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * page/FrameView.cpp:
        (WebCore::selectCursor):
        * rendering/RenderStyle.h:

2006-10-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Converting Obj-C++ to C++ in kcanvas

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        * kcanvas/device/quartz/KCanvasItemQuartz.cpp: Added.
        * kcanvas/device/quartz/KCanvasItemQuartz.mm: Removed.
        * kcanvas/device/quartz/KRenderingDeviceQuartz.cpp: Added.
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm: Removed.
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        * kcanvas/device/quartz/QuartzSupport.cpp: Added.
        * kcanvas/device/quartz/QuartzSupport.h:
        * kcanvas/device/quartz/QuartzSupport.mm: Removed.
        * platform/graphics/svg/cg/SVGResourceClipperCg.cpp: Added.
        (WebCore::SVGResourceClipper::applyClip):
        * platform/graphics/svg/cg/SVGResourceClipperCg.mm: Removed.
        * platform/graphics/svg/cg/SVGResourceImageCg.cpp: Added.
        * platform/graphics/svg/cg/SVGResourceImageCg.mm: Removed.

2006-10-31  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4808375>
        REGRESSION: TextIterator slowed down, affecting Find on Page & Copy (etc.) [11460}
        
        Completely back out r17276 because of performance issues.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::advance):
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::TextIterator::handleReplacedElement):
        (WebCore::TextIterator::handleNonTextNode):
        (WebCore::TextIterator::exitNode):
        (WebCore::TextIterator::emitCharacter):
        (WebCore::TextIterator::range):
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode):
        (WebCore::SimplifiedBackwardsTextIterator::handleReplacedElement):
        (WebCore::SimplifiedBackwardsTextIterator::emitCharacter):
        (WebCore::SimplifiedBackwardsTextIterator::emitNewline):
        (WebCore::SimplifiedBackwardsTextIterator::range):
        (WebCore::CharacterIterator::range):
        (WebCore::TextIterator::rangeFromLocationAndLength):
        * editing/TextIterator.h:
        (WebCore::TextIterator::atEnd):
        (WebCore::SimplifiedBackwardsTextIterator::atEnd):

2006-10-31  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - got "action dictionary" code out of FrameLoader,
          replacing with a class called NavigationAction

        * loader/DocumentLoader.h: Changed m_triggeringAction to a NavigationAction.
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::triggeringAction): Ditto.
        (WebCore::DocumentLoader::setTriggeringAction): Ditto.

        * loader/FrameLoader.h: Changed action parameters to NavigationAction.

        * loader/FrameLoaderClient.h: Changed action parameters to NavigationAction.
        Removed elementForEvent.
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::load): Ditto.
        (WebCore::FrameLoader::reload): Ditto.
        (WebCore::FrameLoader::checkNewWindowPolicy): Ditto.
        (WebCore::FrameLoader::checkNavigationPolicy): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Ditto.
        (WebCore::FrameLoader::post): Ditto.

        * loader/NavigationAction.h: Added.
        * loader/NavigationAction.cpp: Added.
        * loader/mac/NavigationActionMac.mm: Added.

        * loader/mac/MainResourceLoaderMac.mm: Fixed copyright.

        * WebCore.xcodeproj/project.pbxproj: Updated for new files.
        * WebCore.exp: Updated.

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Build fix

        * platform/win/CookieJarWin.cpp:
        (WebCore::cookies):

2006-10-31  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej. Landed by Adam.

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

        Move KCanvasTreeDebug into rendering, named as SVGRenderTreeAsText.*,
        as dicussed with Dave. Also kill the outdated DESIGN document.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/DESIGN: Removed.
        * kcanvas/KCanvasFilters.cpp:
        * kcanvas/KCanvasTreeDebug.cpp: Moved to rendering/SVGRenderTreeAsText
        * kcanvas/KCanvasTreeDebug.h: Ditto.
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        * kcanvas/device/KRenderingPaintServerSolid.cpp:
        * platform/graphics/svg/SVGResourceClipper.cpp:
        * rendering/RenderTreeAsText.cpp:
        * rendering/SVGRenderTreeAsText.cpp: Added.
        * rendering/SVGRenderTreeAsText.h: Added.
        (WebCore::operator<<):

2006-10-31  Darin Fisher  <darin@chromium.org>

        Reviewed by Maciej.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=11286
        Includes some CRLF -> LF fixups.

        * platform/win/CookieJarWin.cpp:
        (WebCore::cookies):

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

        Reviewed by Steve.

        Fix some incorrect forward declarations.

        * loader/FrameLoader.h:
        * page/Frame.h:

2006-10-31  Darin Adler  <darin@apple.com>

        * WebCore.xcodeproj/project.pbxproj: Change GraphicsTypes.h to a private header to
        try to fix the build on the buildbot.

2006-10-31  Darin Adler  <darin@apple.com>

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling): Build fix for release Tiger builds.
        (WebCore::FrameMac::markMisspellings): Ditto.

2006-10-31  John Sullivan  <sullivan@apple.com>

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        build fix: needed #ifndef BUILDING_ON_TIGER in one more place

2006-10-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben
        
        - fixes <rdar://problem/4804614> Bad grammar ranges are not visibly marked
        
        This patch introduces much of the guts of grammar checking, though still not enough to actually
        check grammar sensibly, due to:
          
        <rdar://problem/4811175> Many false reports of bad grammar appear, caused by insufficient 
        context passed to grammar checker

        * platform/Logging.h:
        * platform/Logging.cpp:
        new log channel SpellingAndGrammar

        * bridge/mac/WebCorePageBridge.mm:
        (initializeLoggingChannelsIfNecessary):
        initialize new log channel

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        Compute bad grammar range when computing misspelling range. Find first detailed grammar range from the
        set NSSpellChecker determines. Compare it with misspelling range to see which is earliest (or shortest
        in the event of a tie), and do further processing with that one (select range; create marker that
        causes range to be visibly marked with a funky underline; update spelling panel appropriately).
        (WebCore::FrameMac::markMisspellings):
        More or less the same types of changes as in advanceToNextMisspelling The loops are structured just 
        differently enough to make sharing code between these two functions a little tricky, so I decided to 
        save that for a later patch.
        
        (WebCore::FrameMac::respondToChangedSelection):
        remove grammar markers when we remove spelling markers        

2006-10-31  Nikolas Zimmermann <zimmermann@kde.org>

        Reviewed by Mitz.

        Fix Qt/Linux build with older gcc3.3.4.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):

2006-10-31  Zack Rusin  <zack@kde.org>

        Reviewed by Mitz.

        Fix the Qt build after last nights changes.

        * WebCore/platform/qt/FrameQt.cpp:
        * WebCore/platform/qt/EditorClientQt.h:
        * WebCore/platform/qt/EditorClientQt.cpp:
        * WebCore/platform/graphics/svg/qt/SVGResourceImageQt.cpp:
        * WebCore/platform/graphics/svg/qt/SVGResourceClipperQt.cpp:
        * WebCore/CMakeLists.txt:
        * WebCore/kcanvas/device/qt/KRenderingDeviceQt.cpp:
        * WebKitQt/QtLauncher/CMakeLists.txt:
        * WebKitQt/WebKitPart/CMakeLists.txt:

2006-10-30  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - remove BrowserExtension

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::WindowFunc::callAsFunction):
        * bridge/BrowserExtension.h: Removed.
        * bridge/mac/BrowserExtensionMac.h: Removed.
        * bridge/mac/BrowserExtensionMac.mm: Removed.
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::FrameMac):
        (WebCore::FrameMac::submitForm):
        (WebCore::FrameMac::urlSelected):
        * bridge/win/BrowserExtensionWin.cpp: Removed.
        * bridge/win/BrowserExtensionWin.h: Removed.
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        * loader/FrameLoader.h:
        * loader/icon/IconLoader.cpp:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::safeLoad):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::createWindow):
        * page/Frame.cpp:
        (WebCore::Frame::urlSelected):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::submitForm):
        (WebCore::Frame::scheduleHistoryNavigation):
        (WebCore::Frame::redirectionTimerFired):
        * page/Frame.h:
        * page/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::isEmpty):
        (WebCore::FrameLoadRequest::resourceRequest):
        (WebCore::FrameLoadRequest::frameName):
        (WebCore::FrameLoadRequest::setFrameName):
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        (WebCore::FramePrivate::~FramePrivate):
        * platform/gdk/BrowserExtensionGdk.h: Removed.
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::FrameGdk):
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::isEmpty):

2006-10-31  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Modified from original due to earlier reversion

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

        Better SVG integration in WebKit, Part I.

        The patch is mostly about creating a new platform/graphics directory, and
        moving the kcanvas resources (clipper/masker/marker) there (in svg budir),
        with a new name (KCanvasClipper -> SVGResourceClipper). Also fix several ownership
        issues, by using ref counting (the SVG classes now store RefPtrs to the resources).

        KCanvasFilters is still left in kcanvas/ subdirectory, to be converted in a next patch.
        All details of the patch, and upcoming patches can be found in the bug report.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * graphics/svg/SVGResource.cpp: Removed.
        * graphics/svg/SVGResourceClipper.cpp: Removed.
        * graphics/svg/SVGResourceClipper.h: Removed.
        * graphics/svg/SVGResourceImage.h: Removed.
        * graphics/svg/SVGResourceListener.h: Removed.
        * graphics/svg/SVGResourceMarker.cpp: Removed.
        * graphics/svg/SVGResourceMarker.h: Removed.
        * graphics/svg/SVGResourceMasker.cpp: Removed.
        * graphics/svg/SVGResourceMasker.h: Removed.
        * kcanvas/KCanvasClipper.cpp: Removed.
        * kcanvas/KCanvasClipper.h: Removed.
        * kcanvas/KCanvasCreator.cpp: Removed.
        * kcanvas/KCanvasCreator.h: Removed.
        * kcanvas/KCanvasFilters.cpp:
        (WebCore::getFilterById):
        * kcanvas/KCanvasFilters.h:
        * kcanvas/KCanvasImage.h: Removed.
        * kcanvas/KCanvasMarker.cpp: Removed.
        * kcanvas/KCanvasMarker.h: Removed.
        * kcanvas/KCanvasMasker.cpp: Removed.
        * kcanvas/KCanvasMasker.h: Removed.
        * kcanvas/KCanvasResource.cpp: Removed.
        * kcanvas/KCanvasResource.h: Removed.
        * kcanvas/KCanvasResourceListener.h: Removed.
        * kcanvas/KCanvasTreeDebug.cpp:
        (WebCore::writeRenderResources):
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingPaintServer.h:
        (WebCore::KRenderingPaintServer::KRenderingPaintServer):
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        (WebCore::KRenderingPaintServerGradient::listener):
        (WebCore::KRenderingPaintServerGradient::setListener):
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        (WebCore::KRenderingPaintServerPattern::KRenderingPaintServerPattern):
        (WebCore::KRenderingPaintServerPattern::~KRenderingPaintServerPattern):
        (WebCore::KRenderingPaintServerPattern::tile):
        (WebCore::KRenderingPaintServerPattern::setTile):
        (WebCore::KRenderingPaintServerPattern::listener):
        (WebCore::KRenderingPaintServerPattern::setListener):
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/KRenderingPaintServerSolid.h:
        * kcanvas/device/qt/KCanvasClipperQt.cpp: Removed.
        * kcanvas/device/qt/KCanvasClipperQt.h:
        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
        (WebCore::KRenderingDeviceQt::contextForImage):
        (WebCore::KRenderingDeviceQt::createResource):
        (WebCore::KRenderingDeviceQt::createPaintServer):
        * kcanvas/device/qt/KRenderingDeviceQt.h:
        * kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp:
        * kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp:
        * kcanvas/device/qt/KRenderingPaintServerQt.cpp:
        * kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp:
        * kcanvas/device/qt/RenderPathQt.h: Removed.
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::getCIFilterStack):
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        * kcanvas/device/quartz/KCanvasMaskerQuartz.h: Removed.
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm: Removed.
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h: Removed.
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm: Removed.
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceQuartz::contextForImage):
        (WebCore::KRenderingDeviceQuartz::createPaintServer):
        (WebCore::KRenderingDeviceQuartz::createResource):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (WebCore::KRenderingPaintServerGradientQuartz::KRenderingPaintServerGradientQuartz):
        (WebCore::KRenderingPaintServerGradientQuartz::~KRenderingPaintServerGradientQuartz):
        (WebCore::KRenderingPaintServerGradientQuartz::setup):
        (WebCore::KRenderingPaintServerGradientQuartz::teardown):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (WebCore::patternCallback):
        (WebCore::KRenderingPaintServerPatternQuartz::setup):
        * kcanvas/device/quartz/QuartzSupport.mm:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::sharedSolidPaintServer):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        (WebCore::SVGClipPathElement::~SVGClipPathElement):
        (WebCore::SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        (WebCore::SVGFilterElement::~SVGFilterElement):
        (WebCore::SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::~SVGGradientElement):
        (WebCore::SVGGradientElement::canvasResource):
        (WebCore::SVGGradientElement::resourceNotification):
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::~SVGMarkerElement):
        (WebCore::SVGMarkerElement::canvasResource):
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::~SVGMaskElement):
        (WebCore::SVGMaskElement::drawMaskerContent):
        (WebCore::SVGMaskElement::canvasResource):
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::~SVGPatternElement):
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::canvasResource):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::canvasResource):
        * platform/GraphicsContext.cpp: Removed.
        * platform/GraphicsContext.h: Removed.
        * platform/GraphicsTypes.cpp: Removed.
        * platform/GraphicsTypes.h: Removed.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate):
        (WebCore::GraphicsContext::createGraphicsContextPrivate):
        (WebCore::GraphicsContext::destroyGraphicsContextPrivate):
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (WebCore::GraphicsContext::font):
        (WebCore::GraphicsContext::setFont):
        (WebCore::GraphicsContext::pen):
        (WebCore::GraphicsContext::setPen):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::fillColor):
        (WebCore::GraphicsContext::updatingControlTints):
        (WebCore::GraphicsContext::setUpdatingControlTints):
        (WebCore::GraphicsContext::setPaintingDisabled):
        (WebCore::GraphicsContext::paintingDisabled):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawHighlightForText):
        (WebCore::GraphicsContext::initFocusRing):
        (WebCore::GraphicsContext::clearFocusRing):
        (WebCore::GraphicsContext::focusRingBoundingRect):
        (WebCore::GraphicsContext::addFocusRingRect):
        (WebCore::GraphicsContext::focusRingWidth):
        (WebCore::GraphicsContext::focusRingOffset):
        (WebCore::GraphicsContext::focusRingRects):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::):
        (WebCore::parseCompositeOperator):
        (WebCore::compositeOperatorName):
        (WebCore::parseLineCap):
        (WebCore::lineCapName):
        (WebCore::parseLineJoin):
        (WebCore::lineJoinName):
        * platform/graphics/GraphicsTypes.h:
        (WebCore::):
        * platform/graphics/svg/SVGResource.cpp: Added.
        (WebCore::SVGResource::SVGResource):
        (WebCore::SVGResource::~SVGResource):
        (WebCore::SVGResource::invalidate):
        (WebCore::SVGResource::addClient):
        (WebCore::SVGResource::clients):
        (WebCore::SVGResource::idInRegistry):
        (WebCore::SVGResource::setIdInRegistry):
        (WebCore::SVGResource::externalRepresentation):
        (WebCore::getResourceById):
        (WebCore::getPaintServerById):
        (WebCore::operator<<):
        * platform/graphics/svg/SVGResource.h: Added.
        (WebCore::):
        (WebCore::SVGResource::isPaintServer):
        (WebCore::SVGResource::isFilter):
        (WebCore::SVGResource::isClipper):
        (WebCore::SVGResource::isMarker):
        (WebCore::SVGResource::isMasker):
        (WebCore::SVGResourceListener::~SVGResourceListener):
        * platform/graphics/svg/SVGResourceClipper.cpp: Added.
        (WebCore::SVGResourceClipper::SVGResourceClipper):
        (WebCore::SVGResourceClipper::~SVGResourceClipper):
        (WebCore::SVGResourceClipper::resetClipData):
        (WebCore::SVGResourceClipper::addClipData):
        (WebCore::SVGResourceClipper::clipData):
        (WebCore::SVGResourceClipper::externalRepresentation):
        (WebCore::operator<<):
        (WebCore::getClipperById):
        * platform/graphics/svg/SVGResourceClipper.h: Added.
        (WebCore::ClipDataList::addPath):
        (WebCore::SVGResourceClipper::isClipper):
        * platform/graphics/svg/SVGResourceImage.h: Added.
        * platform/graphics/svg/SVGResourceMarker.cpp: Added.
        (WebCore::SVGResourceMarker::SVGResourceMarker):
        (WebCore::SVGResourceMarker::~SVGResourceMarker):
        (WebCore::SVGResourceMarker::setMarker):
        (WebCore::SVGResourceMarker::setRef):
        (WebCore::SVGResourceMarker::draw):
        (WebCore::SVGResourceMarker::externalRepresentation):
        (WebCore::getMarkerById):
        * platform/graphics/svg/SVGResourceMarker.h: Added.
        (WebCore::SVGResourceMarker::refX):
        (WebCore::SVGResourceMarker::refY):
        (WebCore::SVGResourceMarker::setAngle):
        (WebCore::SVGResourceMarker::setAutoAngle):
        (WebCore::SVGResourceMarker::angle):
        (WebCore::SVGResourceMarker::setUseStrokeWidth):
        (WebCore::SVGResourceMarker::useStrokeWidth):
        (WebCore::SVGResourceMarker::isMarker):
        * platform/graphics/svg/SVGResourceMasker.cpp: Added.
        (WebCore::SVGResourceMasker::SVGResourceMasker):
        (WebCore::SVGResourceMasker::~SVGResourceMasker):
        (WebCore::SVGResourceMasker::setMask):
        (WebCore::SVGResourceMasker::mask):
        (WebCore::SVGResourceMasker::externalRepresentation):
        (WebCore::getMaskerById):
        * platform/graphics/svg/SVGResourceMasker.h: Added.
        (WebCore::SVGResourceMasker::isMasker):
        * platform/graphics/svg/cg/SVGResourceClipperCg.mm: Added.
        (WebCore::SVGResourceClipper::applyClip):
        * platform/graphics/svg/cg/SVGResourceImageCg.mm: Added.
        (WebCore::SVGResourceImage::SVGResourceImage):
        (WebCore::SVGResourceImage::~SVGResourceImage):
        (WebCore::SVGResourceImage::init):
        (WebCore::SVGResourceImage::size):
        (WebCore::SVGResourceImage::cgLayer):
        (WebCore::SVGResourceImage::setCGLayer):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm: Added.
        (WebCore::applyLuminanceToAlphaFilter):
        (WebCore::applyExpandAlphatoGrayscaleFilter):
        (WebCore::transformImageIntoGrayscaleMask):
        (WebCore::SVGResourceMasker::applyMask):
        * platform/graphics/svg/qt/SVGResourceClipperQt.cpp: Added.
        (WebCore::SVGResourceClipper::applyClip):
        * platform/graphics/svg/qt/SVGResourceImageQt.cpp: Added.
        (WebCore::SVGResourceImage::init):
        (WebCore::SVGResourceImage::size):
        * platform/graphics/svg/qt/SVGResourceMaskerQt.cpp: Added.
        (WebCore::SVGResourceMasker::applyMask):
        * platform/qt/GraphicsContextQt.cpp:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        (WebCore::DrawMarkersData::DrawMarkersData):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):

2006-10-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady
        
        - minor cleanup to make future patches clearer

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        renamed misspelling to misspellingNSRange for clarity; changed > 0 test to == 0 test
        with "continue" to better match structure of similar code in markMisspellings; a few
        other style tweaks.
        
        (WebCore::FrameMac::markMisspellings):
        renamed misspelling to misspellingNSRange for clarity; removed unnecessary braces around
        a block just after a break and outdented accordingly.

2006-10-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff Garen
        
        WebCore part of change to push the code that updates the spelling panel
        into WebCore, in preparation for some grammar-checking stuff.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        no more return value for this method, and update the spelling panel with
        the misspelled word here rather than in the WebKit callers.

2006-10-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders.

        Roll out last patch

        * CMakeLists.txt:
        * ChangeLog:
        * WebCore.xcodeproj/project.pbxproj:
        * graphics/svg/SVGResource.cpp:
        * graphics/svg/SVGResourceClipper.cpp:
        * graphics/svg/SVGResourceClipper.h:
        * graphics/svg/SVGResourceImage.h:
        * graphics/svg/SVGResourceListener.h:
        * graphics/svg/SVGResourceMarker.cpp:
        * graphics/svg/SVGResourceMarker.h:
        * graphics/svg/SVGResourceMasker.cpp:
        * graphics/svg/SVGResourceMasker.h:
        * kcanvas/KCanvasClipper.cpp: Added.
        (WebCore::operator<<):
        (WebCore::KCanvasClipper::KCanvasClipper):
        (WebCore::KCanvasClipper::~KCanvasClipper):
        (WebCore::KCanvasClipper::resetClipData):
        (WebCore::KCanvasClipper::addClipData):
        (WebCore::KCanvasClipper::clipData):
        (WebCore::KCanvasClipper::externalRepresentation):
        (WebCore::getClipperById):
        * kcanvas/KCanvasClipper.h: Added.
        (WebCore::KCClipData::windRule):
        (WebCore::KCClipDataList::KCClipDataList):
        (WebCore::KCClipDataList::addPath):
        (WebCore::KCanvasClipper::isClipper):
        * kcanvas/KCanvasFilters.cpp:
        (WebCore::getFilterById):
        * kcanvas/KCanvasFilters.h:
        * kcanvas/KCanvasImage.h: Added.
        (WebCore::KCanvasImage::KCanvasImage):
        (WebCore::KCanvasImage::~KCanvasImage):
        * kcanvas/KCanvasMarker.cpp: Added.
        (WebCore::KCanvasMarker::KCanvasMarker):
        (WebCore::KCanvasMarker::~KCanvasMarker):
        (WebCore::KCanvasMarker::setMarker):
        (WebCore::KCanvasMarker::setRef):
        (WebCore::KCanvasMarker::refX):
        (WebCore::KCanvasMarker::refY):
        (WebCore::KCanvasMarker::setAngle):
        (WebCore::KCanvasMarker::angle):
        (WebCore::KCanvasMarker::setAutoAngle):
        (WebCore::KCanvasMarker::setUseStrokeWidth):
        (WebCore::KCanvasMarker::useStrokeWidth):
        (WebCore::KCanvasMarker::draw):
        (WebCore::KCanvasMarker::externalRepresentation):
        (WebCore::getMarkerById):
        * kcanvas/KCanvasMarker.h: Added.
        (WebCore::KCanvasMarker::isMarker):
        * kcanvas/KCanvasMasker.cpp: Added.
        (WebCore::KCanvasMasker::KCanvasMasker):
        (WebCore::KCanvasMasker::~KCanvasMasker):
        (WebCore::KCanvasMasker::setMask):
        (WebCore::KCanvasMasker::externalRepresentation):
        (WebCore::getMaskerById):
        * kcanvas/KCanvasMasker.h: Added.
        (WebCore::KCanvasMasker::isMasker):
        (WebCore::KCanvasMasker::mask):
        * kcanvas/KCanvasResource.cpp: Added.
        (WebCore::operator<<):
        (WebCore::KCanvasResource::KCanvasResource):
        (WebCore::KCanvasResource::~KCanvasResource):
        (WebCore::KCanvasResource::addClient):
        (WebCore::KCanvasResource::clients):
        (WebCore::KCanvasResource::invalidate):
        (WebCore::KCanvasResource::idInRegistry):
        (WebCore::KCanvasResource::setIdInRegistry):
        (WebCore::KCanvasResource::externalRepresentation):
        (WebCore::getResourceById):
        (WebCore::getPaintServerById):
        * kcanvas/KCanvasResource.h:
        (WebCore::):
        (WebCore::KCanvasResource::isPaintServer):
        (WebCore::KCanvasResource::isFilter):
        (WebCore::KCanvasResource::isClipper):
        (WebCore::KCanvasResource::isMarker):
        (WebCore::KCanvasResource::isMasker):
        * kcanvas/KCanvasResourceListener.h: Added.
        (KCanvasResourceListener::KCanvasResourceListener):
        (KCanvasResourceListener::~KCanvasResourceListener):
        * kcanvas/KCanvasTreeDebug.cpp:
        (WebCore::writeRenderResources):
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingPaintServer.h:
        (WebCore::KRenderingPaintServer::KRenderingPaintServer):
        (WebCore::KRenderingPaintServer::idInRegistry):
        (WebCore::KRenderingPaintServer::setIdInRegistry):
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        (WebCore::KRenderingPaintServerGradient::listener):
        (WebCore::KRenderingPaintServerGradient::setListener):
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        (WebCore::KRenderingPaintServerPattern::KRenderingPaintServerPattern):
        (WebCore::KRenderingPaintServerPattern::~KRenderingPaintServerPattern):
        (WebCore::KRenderingPaintServerPattern::tile):
        (WebCore::KRenderingPaintServerPattern::setTile):
        (WebCore::KRenderingPaintServerPattern::listener):
        (WebCore::KRenderingPaintServerPattern::setListener):
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/KRenderingPaintServerSolid.h:
        * kcanvas/device/qt/KCanvasClipperQt.cpp:
        (WebCore::KCanvasClipperQt::applyClip):
        * kcanvas/device/qt/KCanvasClipperQt.h:
        (WebCore::KCanvasClipperQt::KCanvasClipperQt):
        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
        (WebCore::KRenderingDeviceQt::contextForImage):
        (WebCore::KRenderingDeviceQt::createResource):
        (WebCore::KRenderingDeviceQt::createPaintServer):
        * kcanvas/device/qt/KRenderingDeviceQt.h:
        * kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp:
        * kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp:
        * kcanvas/device/qt/KRenderingPaintServerQt.cpp:
        * kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::getCIFilterStack):
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        * kcanvas/device/quartz/KCanvasMaskerQuartz.h:
        (WebCore::KCanvasMaskerQuartz::KCanvasMaskerQuartz):
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm:
        (WebCore::applyLuminanceToAlphaFilter):
        (WebCore::applyExpandAlphatoGrayscaleFilter):
        (WebCore::transformImageIntoGrayscaleMask):
        (WebCore::KCanvasMaskerQuartz::applyMask):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        (WebCore::KCanvasClipperQuartz::KCanvasClipperQuartz):
        (WebCore::KCanvasImageQuartz::KCanvasImageQuartz):
        (WebCore::KCanvasImageQuartz::init):
        (WebCore::KCanvasImageQuartz::size):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (WebCore::KCanvasClipperQuartz::applyClip):
        (WebCore::KCanvasImageQuartz::~KCanvasImageQuartz):
        (WebCore::KCanvasImageQuartz::cgLayer):
        (WebCore::KCanvasImageQuartz::setCGLayer):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceQuartz::contextForImage):
        (WebCore::KRenderingDeviceQuartz::createPaintServer):
        (WebCore::KRenderingDeviceQuartz::createResource):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (WebCore::KRenderingPaintServerGradientQuartz::KRenderingPaintServerGradientQuartz):
        (WebCore::KRenderingPaintServerGradientQuartz::~KRenderingPaintServerGradientQuartz):
        (WebCore::KRenderingPaintServerGradientQuartz::setup):
        (WebCore::KRenderingPaintServerGradientQuartz::teardown):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (WebCore::patternCallback):
        (WebCore::KRenderingPaintServerPatternQuartz::setup):
        * kcanvas/device/quartz/QuartzSupport.mm:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::sharedSolidPaintServer):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        (WebCore::SVGClipPathElement::~SVGClipPathElement):
        (WebCore::SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        (WebCore::SVGFilterElement::~SVGFilterElement):
        (WebCore::SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::~SVGGradientElement):
        (WebCore::SVGGradientElement::canvasResource):
        (WebCore::SVGGradientElement::resourceNotification):
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::~SVGMarkerElement):
        (WebCore::SVGMarkerElement::canvasResource):
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::~SVGMaskElement):
        (WebCore::SVGMaskElement::drawMaskerContent):
        (WebCore::SVGMaskElement::canvasResource):
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::~SVGPatternElement):
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::canvasResource):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::canvasResource):
        * platform/GraphicsContext.cpp: Added.
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate):
        (WebCore::GraphicsContext::createGraphicsContextPrivate):
        (WebCore::GraphicsContext::destroyGraphicsContextPrivate):
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (WebCore::GraphicsContext::font):
        (WebCore::GraphicsContext::setFont):
        (WebCore::GraphicsContext::pen):
        (WebCore::GraphicsContext::setPen):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::fillColor):
        (WebCore::GraphicsContext::updatingControlTints):
        (WebCore::GraphicsContext::setUpdatingControlTints):
        (WebCore::GraphicsContext::setPaintingDisabled):
        (WebCore::GraphicsContext::paintingDisabled):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawHighlightForText):
        (WebCore::GraphicsContext::initFocusRing):
        (WebCore::GraphicsContext::clearFocusRing):
        (WebCore::GraphicsContext::focusRingBoundingRect):
        (WebCore::GraphicsContext::addFocusRingRect):
        (WebCore::GraphicsContext::focusRingWidth):
        (WebCore::GraphicsContext::focusRingOffset):
        (WebCore::GraphicsContext::focusRingRects):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/GraphicsContext.h: Added.
        * platform/GraphicsTypes.cpp: Added.
        (WebCore::):
        (WebCore::parseCompositeOperator):
        (WebCore::compositeOperatorName):
        (WebCore::parseLineCap):
        (WebCore::lineCapName):
        (WebCore::parseLineJoin):
        (WebCore::lineJoinName):
        * platform/GraphicsTypes.h: Added.
        (WebCore::):
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsTypes.cpp:
        * platform/graphics/GraphicsTypes.h:
        * platform/qt/GraphicsContextQt.cpp:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        (WebCore::DrawMarkersData::DrawMarkersData):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):

2006-10-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff Garen.
        
        Moved spelling-related methods from bridge to EditorClient. Added one not-yet-used
        grammar-related method.

        * bridge/EditorClient.h:
        declare isContinuousSpellCheckingEnabled(), spellCheckerDocumentTag(), and new
        isGrammarCheckingEnabled()
        
        * bridge/mac/WebCoreFrameBridge.h:
        removed bridge equivalents

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        convert bridge-using code to editor()->client()-using code
        (WebCore::FrameMac::markMisspellingsInAdjacentWords):
        ditto
        (WebCore::FrameMac::markMisspellings):
        ditto
        (WebCore::FrameMac::respondToChangedSelection):
        ditto
        
        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::Editor::client):
        new method, returns EditorClient pointer. In an ideal world all the code that needed to
        access the EditorClient would be in Editor.cpp, and we wouldn't need this accessor.
        But for now it's too tricky to extricate the spelling-related code from FrameMac.mm.

2006-10-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Removed a number of editing and selection methods from the bridge.
        
        I moved cross-platform editing and selection code into Editor and 
        SelectionController, respecitvely.

        I moved ObjC and AppKit stuff up into WebKit, so I ended up exporting
        everything + the kitchen sink.
        
        Specific comments below for interesting things.
        
        * bindings/objc/DOMInternal.h: Moved exception handling helper methods into
        a new file so that WebKit can use them, too. Added a helper method for
        handling exceptions when selecting a Range.
        * bridge/mac/FrameMac.h: Moved attributedString creation and helper functions into 
        WebKit, since they have to do with creating an NSAttributedString for API
        consumption, and not much to do with general Frame functionality.
        * editing/Editor.h: Moved lastEditCommand tracking (at least the data,
        for now) into the Editor. Eventually, the Frame will not have to notify 
        the Editor of what the lastEditCommand was, since the Editor will perform
        all EditCommands.
        * editing/SelectionController.h: The code here is just stuff moved from the bridge.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelectedRange): We now explicitly check from DOM exceptions
        and return them. The bridge method to select a DOM range did this implicitly,
        since all ObjC DOM operations handle DOM exceptions by throwing them as
        ObjC exceptions.
        * editing/TextAffinity.h: Added helper functions for conversion to NSSelectionAffinity.
        The two enumerations are numerically identical, but that's an implementation
        detail of TextAffinity that clients shouldn't be required to know about.

2006-10-30  Timothy Hatcher  <timothy@apple.com>

        Rolling out the following change because this crash:
        <rdar://problem/4806705> REGRESSION: Crash occurs at WebCore::Font::lineSpacing() when loading site (http://www.photoplusexpo.com/ppe/index.jsp) 

        And this regression:
        <rdar://problem/4728514> REGRESSION: Safari applies the wrong font to BODY element at http://www.apple.com/downloads/dashboard/

    2006-09-06  David Harrison  <harrison@apple.com>

        Reviewed and tweaked by Tim H. 

        <rdar://problem/4564955> WebKit doesn't trigger Auto Font Activation 

        If we don't find the font in the available fonts list, call [NSFont fontWithName:size:] 
        to trigger a search that will include auto activation. No PLT or iBench perf impact. 
        No layout tests affected. Not testable in an automated way that will work on all systems. 

        * platform/mac/WebFontCache.mm: 
        (+[WebFontCache fontWithFamily:traits:size:]): 

2006-10-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4808375>
        REGRESSION: TextIterator slowed down, affecting Find on Page & Copy (etc.) (11460)

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::exitNode): Only create VisiblePositions
        when we're going to use them to create a range for an emitted character.
        We should further speed TextIterators up by avoiding creating VisiblePositions
        for TIs that are only used for the characters they emit (like the one that 
        plainText uses).

2006-10-30  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11441
        More rendering code cleaning

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::RenderApplet):
        (WebCore::RenderApplet::createWidgetIfNecessary):
        * rendering/RenderApplet.h:
        * rendering/RenderArena.cpp:
        (WebCore::):
        (WebCore::RenderArena::RenderArena):
        (WebCore::RenderArena::allocate):
        (WebCore::RenderArena::free):
        * rendering/RenderArena.h:
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::RenderBR):
        (WebCore::RenderBR::baselinePosition):
        (WebCore::RenderBR::lineHeight):
        (WebCore::RenderBR::setStyle):
        (WebCore::RenderBR::caretMinOffset):
        (WebCore::RenderBR::positionForCoordinates):
        (WebCore::RenderBR::inlineBox):
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::maxTopMargin):
        (WebCore::RenderBlock::maxBottomMargin):
        (WebCore::RenderBlock::initMaxMarginValues):
        (WebCore::RenderBlock::containsFloats):
        (WebCore::RenderBlock::setHasMarkupTruncation):
        (WebCore::RenderBlock::BlockSelectionInfo::BlockSelectionInfo):
        (WebCore::RenderBlock::BlockSelectionInfo::block):
        (WebCore::RenderBlock::BlockSelectionInfo::state):
        (WebCore::RenderBlock::FloatingObject::FloatingObject):
        (WebCore::RenderBlock::CompactInfo::clear):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::removeChild):
        (WebCore::RenderButton::paintObject):
        * rendering/RenderButton.h:
        (WebCore::RenderButton::renderName):
        (WebCore::RenderButton::removeLeftoverAnonymousBoxes):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::RenderContainer):
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::firstChild):
        (WebCore::RenderContainer::lastChild):
        (WebCore::RenderContainer::calcMinMaxWidth):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::RenderCounter):
        (WebCore::toRoman):
        (WebCore::toHebrew):
        (WebCore::RenderCounter::calcMinMaxWidth):
        * rendering/RenderCounter.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintBorderMinusLegend):
        (WebCore::RenderFieldset::setStyle):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::~RenderFileUploadControl):
        (WebCore::RenderFileUploadControl::setStyle):
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::calcMinMaxWidth):
        * rendering/RenderFileUploadControl.h:
        (WebCore::RenderFileUploadControl::renderName):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::RenderForeignObject):
        (WebCore::RenderForeignObject::paint):
        (WebCore::RenderForeignObject::computeAbsoluteRepaintRect):
        (WebCore::RenderForeignObject::layout):
        (WebCore::RenderForeignObject::nodeAtPoint):
        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::renderName):
        * rendering/RenderFormElement.cpp:
        (WebCore::RenderFormElement::setStyle):
        (WebCore::RenderFormElement::layout):
        (WebCore::RenderFormElement::textAlignment):
        * rendering/RenderFormElement.h:
        * rendering/RenderFrame.cpp:
        * rendering/RenderFrame.h:
        (WebCore::RenderFrame::element):
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderFrameSet.h:
        (WebCore::RenderFrameSet::element):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::RenderHTMLCanvas):
        (WebCore::RenderHTMLCanvas::paint):
        * rendering/RenderHTMLCanvas.h:
        (WebCore::RenderHTMLCanvas::renderName):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::setStyle):
        (WebCore::RenderImage::setContentObject):
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::updateAltText):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::element):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::~RenderInline):
        (WebCore::RenderInline::setStyle):
        (WebCore::RenderInline::addChildToFlow):
        (WebCore::RenderInline::cloneInline):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::paint):
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::calcMinMaxWidth):
        (WebCore::RenderInline::requiresLayer):
        (WebCore::RenderInline::width):
        (WebCore::RenderInline::height):
        (WebCore::RenderInline::renderName):
        (WebCore::RenderInline::nodeAtPoint):
        (WebCore::RenderInline::positionForCoordinates):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::layout):
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        (WebCore::ClipRects::ClipRects):
        (WebCore::RenderLayer::nextSibling):
        (WebCore::RenderLayer::root):
        (WebCore::RenderLayer::setPos):
        (WebCore::RenderLayer::height):
        (WebCore::RenderLayer::relativePositionOffset):
        * rendering/RenderLineEdit.cpp:
        (WebCore::RenderLineEdit::setStyle):
        (WebCore::RenderLineEdit::updateFromElement):
        (WebCore::RenderLineEdit::selectionStart):
        (WebCore::RenderLineEdit::selectionEnd):
        (WebCore::RenderLineEdit::setSelectionStart):
        (WebCore::RenderLineEdit::setSelectionEnd):
        (WebCore::RenderLineEdit::setSelectionRange):
        * rendering/RenderLineEdit.h:
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::renderName):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::setStyle):
        (WebCore::getParentOfFirstLineBox):
        (WebCore::RenderListItem::updateMarkerLocation):
        (WebCore::RenderListItem::positionListMarker):
        (WebCore::RenderListItem::paint):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderListMarker.h:
        (WebCore::RenderListMarker::renderName):
        (WebCore::RenderListMarker::isListMarker):

2006-10-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/4478625> Basic table editing and culling

        Refined the criteria for deletable elements, rely on the renderer more.
        Corrected the interface positioning for elements that have borders.

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        (WebCore::DeleteButtonController::show):

2006-10-30  Darin Adler  <darin@apple.com>

        - fix build

        * loader/ResourceLoader.h: Added header guard.

2006-10-31  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix FrameLoader files so they can be built on non-Mac platforms

        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate): Added code to create the frame loader.
        (WebCore::FramePrivate::~FramePrivate): Added code to delete the frame loader.

        * page/Page.h:
        * page/Page.cpp: (WebCore::Page::setDefersLoading): Removed the
        #if PLATFORM(MAC) that Adam added as a stop-gap when I did this wrong
        the other day.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::FrameMac): Removed code to create the frame loader.
        (WebCore::FrameMac::~FrameMac): Removed code to delete the frame loader.

        * loader/FrameLoader.h: Changed import to include, added #if PLATFORM(MAC)
        around the PolicyCheck definition.

        * loader/FormState.cpp: Changed import to include.
        * loader/FrameLoader.cpp: Ditto.
        * loader/MainResourceLoader.h: Ditto.

        * loader/FrameLoaderTypes.h: Added a header guard.

        * loader/NetscapePlugInStreamLoader.h: Changed import to include.
        Added #if PLATFORM(MAC) around Mac-specific details.
        * loader/SubresourceLoader.h: Ditto.

        * page/Frame.cpp: (WebCore::Frame::loader): Updated name of loader to
        m_loader from m_frameLoader.

        * CMakeLists.txt: Updated.
        * WebCoreSources.bkl: Updated.

2006-10-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Patch by Zack rusin to fix: 
        http://bugs.webkit.org/show_bug.cgi?id=11429

        Fix startup crash.

        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::openURL):

2006-10-30  Zach Rusin  <zack@kde.org>

        Reviewed and landed by Anders.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::receivedResponse):
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::FrameQtClientDefault):
        * platform/qt/LoaderFunctionsQt.cpp:
        (WebCore::ServeSynchronousRequest):
        More build fixes.

2006-10-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed and landed by Anders.
        
        - fix Qt build
        * platform/qt/FrameQtClient.cpp: ResourceLoaderClient ->
        ResourceHandleClient

2006-10-30  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - work toward removing Objective-C data types from FrameLoader.h:
          removed NSDate, NSString, WebCorePageState, WebCoreResourceLoader,
          and WebCoreResourceHandle
        - moved bodyBackgroundColor function from Frame to WebFrame in WebKit

        * page/PageState.h:
        * page/PageState.cpp: Added, C++ class with much of what WebCorePageState had.

        * bridge/mac/FrameMac.h: Removed uneeeded declarations and bodyBackgroundColor().
        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::startRedirectionTimer): Use a
        double for the date instead of an NSDate.

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm: Removed invalidatePageCache and
        saveDocumentToPageCache methods.

        * bridge/mac/WebCorePageState.h:
        * bridge/mac/WebCorePageState.mm: Removed most of the class and turned it into
        an Objective-C wrapper for PageState.

        * loader/FrameLoader.h: Removed unused Objective-C types, eliminated use of
        NSDate and WebCorePageState.
        * loader/FrameLoaderClient.h: Changed NSDate to double.
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::receivedMainResourceError): Moved call to setInPageCache
        here that used to be in invalidateCurrentItemPageCache on the WebKit side.
        (WebCore::FrameLoader::clientRedirected): Changed NSDate to double for date.
        (WebCore::FrameLoader::open): Moved one of the open functions that was part of
        commitProvisionalLoad inside the commitProvisionalLoad function, so that it can
        extract the parameters from the response. Changed the open function that takes
        a PageState to use the new C++ PageState.
        (WebCore::FrameLoader::commitProvisionalLoad): Added the code from the open
        function; tightened up logic, removing a few cases that could never happen, as
        well as the unused reload boolean.

        * ForwardingHeaders/kjs/property_map.h: Added.

        * WebCore.exp: Updated.
        * WebCore.xcodeproj/project.pbxproj: Updated.

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - added ResourceResponse class and didReceiveResponse delegate call
        
        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * bridge/mac/WebCoreFrameBridge.h: Removed no longer needed
        expiresTimeForResponse: method.
        * dom/XMLTokenizer.cpp:
        (WebCore::openFunc): Updated to use ResourceResponse.
        * loader/FrameLoader.h: Update loadResourceSynchronously to
        use ResourceResponse.
        * loader/LoaderFunctions.h:
        * loader/icon/IconLoader.cpp:
        (IconLoader::didReceiveResponse): Updated from receivedResponse
        and made cross-platform.
        * loader/icon/IconLoader.h: updated for above change
        * loader/loader.cpp:
        (WebCore::Loader::receivedResponse): reduced to just saving
        the PlatformResponse (ideally we'd phase out use of this).
        (WebCore::Loader::didReceivedResponse): most of the ReceivedResponse 
        logic.
        * loader/loader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::loadResourceSynchronously): Return results
        as ResourceResponse.
        * loader/mac/IconLoaderMac.mm: remove receivedResponse.
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::ServeSynchronousRequest): take ResourceResponse as
        argument.
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h: Remove calls for
        broken out response pieces.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveResponse): New
        delegate method.
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): Remove
        storage of response bits, we're not gonna return them
        seprately any more.
        * platform/network/ResourceResponse.h: Added.
        (WebCore::ResourceResponse::ResourceResponse): Freshly
        implemented. Same for below.
        (WebCore::ResourceResponse::url):
        (WebCore::ResourceResponse::mimeType):
        (WebCore::ResourceResponse::expectedContentLength):
        (WebCore::ResourceResponse::textEncodingName):
        (WebCore::ResourceResponse::suggestedFilename):
        (WebCore::ResourceResponse::httpStatusCode):
        (WebCore::ResourceResponse::setHTTPStatusCode):
        (WebCore::ResourceResponse::httpHeaderField):
        (WebCore::ResourceResponse::httpHeaderFields):
        (WebCore::ResourceResponse::isMultipart):
        (WebCore::ResourceResponse::setExpirationDate):
        (WebCore::ResourceResponse::expirationDate):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveResponse): Send didReceiveResponse
        client method.
        * platform/network/cf/ResourceResponseCFNet.h: Added.
        * platform/network/cf/ResourceResponseCFNet.mm: Added.
        (getResourceResponse): Helper function to get a ResourceResponse 
        from CFURLResponseRef.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        Don't bother cleaning up fields we no longer have.
        (WebCore::ResourceHandle::receivedResponse): Send
        didReceiveResponse client method.
        * platform/network/mac/ResourceResponseMac.h: Added.
        * platform/network/mac/ResourceResponseMac.mm: Added.
        (getResourceResponse): Helper function to get a ResourceResponse 
        from an NSURLResponse*.
        * rendering/HitTestResult.cpp:
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc): Prepare for use of ResourceResponse.
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::getResponseText): Store http response
        info in the form of a ResourceResponse, change all methods to
        account for this.
        (WebCore::XMLHttpRequest::getResponseXML):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        (WebCore::XMLHttpRequest::getStatus):
        (WebCore::XMLHttpRequest::getStatusText):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/xmlhttprequest.h:

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

        - fix build

        * loader/DocumentLoader.h: Add declarations so this compiles without ObjC.
        * loader/NetscapePlugInStreamLoader.h: Ditto.
        * loader/ResourceLoader.h: Ditto.

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

        - one last name change -- WebFormState.h to FormState.h
        - added more empty placeholder platform-independent files
          for currently-Mac-specific loader classes

        * loader/FormState.cpp: Updated include.
        * loader/FrameLoader.cpp: Updated include.
        * loader/mac/FrameLoaderMac.mm: Updated include.

        * loader/WebFormState.h: Removed.
        * loader/FormState.h: Added.

        * loader/DocumentLoader.cpp: Added.
        * loader/MainResourceLoader.cpp: Added.
        * loader/NetscapePlugInStreamLoader.cpp: Added.
        * loader/ResourceLoader.cpp: Added.
        * loader/SubresourceLoader.cpp: Added.

        * WebCore.xcodeproj/project.pbxproj: Updated for changes above.

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

        - did the do-webcore-rename renames, including a number of changes
          to the names of loader files (and WebResourceLoader -> ResourceLoader),
          jScript() to scriptProxy(), jScriptEnabled() to javaScriptEnabled(),
          and improvements to the names of decoder classes and their source
          files (Decoder -> TextResourceDecoder, StreamingTextDecoder -> TextCodec)

        * CMakeLists.txt:
        * WebCore.exp:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::updateDOMNodeDocument):
        * bindings/js/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        (KJS::JSLazyEventListener::parseCode):
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::implementsCall):
        * bindings/js/kjs_traversal.cpp:
        (KJS::JSNodeFilterCondition::acceptNode):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::interpreter):
        (KJS::Window::retrieveWindow):
        (KJS::Window::retrieve):
        (KJS::ScheduledAction::execute):
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::executionContextForDOM):
        (WebCore::FrameMac::bindingRootObject):
        (WebCore::FrameMac::windowScriptObject):
        (WebCore::FrameMac::windowScriptNPObject):
        (WebCore::FrameMac::partClearedInBegin):
        * bridge/mac/WebCoreEncodings.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]):
        (-[WebCoreFrameBridge stringWithData:]):
        (-[WebCoreFrameBridge executionContextForView:]):
        * bridge/win/FrameWin.cpp:
        * dom/Document.cpp:
        (WebCore::Document::inputEncoding):
        (WebCore::Document::setCharset):
        (WebCore::Document::createHTMLEventListener):
        (WebCore::Document::setDecoder):
        * dom/Document.h:
        (WebCore::Document::decoder):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::noscriptCreateErrorCheck):
        (WebCore::HTMLParser::canvasCreateErrorCheck):
        (WebCore::HTMLParser::isInline):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createNPObject):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::evaluateScript):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::processToken):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::createSVGEventListener):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        (WebCore::CachedCSSStyleSheet::setEncoding):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::CachedXBLDocument):
        (WebCore::CachedXBLDocument::setEncoding):
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        (WebCore::CachedXSLStyleSheet::setEncoding):
        * loader/CachedXSLStyleSheet.h:
        * loader/Decoder.cpp: Removed.
        * loader/Decoder.h: Removed.
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h: Added.
        * loader/NetscapePlugInStreamLoader.h: Added.
        * loader/Request.h:
        (WebCore::Request::cachedResource):
        * loader/ResourceLoader.h: Added.
        * loader/SubresourceLoader.h: Added.
        * loader/TextResourceDecoder.cpp: Added.
        (WebCore::TextResourceDecoder::determineContentType):
        (WebCore::TextResourceDecoder::defaultEncoding):
        (WebCore::TextResourceDecoder::TextResourceDecoder):
        (WebCore::TextResourceDecoder::~TextResourceDecoder):
        (WebCore::TextResourceDecoder::setEncoding):
        (WebCore::TextResourceDecoder::checkForBOM):
        (WebCore::TextResourceDecoder::checkForCSSCharset):
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        (WebCore::TextResourceDecoder::detectJapaneseEncoding):
        (WebCore::TextResourceDecoder::decode):
        (WebCore::TextResourceDecoder::flush):
        * loader/TextResourceDecoder.h: Added.
        * loader/WebDocumentLoader.h: Removed.
        * loader/WebLoader.h: Removed.
        * loader/WebMainResourceLoader.h: Removed.
        * loader/WebNetscapePlugInStreamLoader.h: Removed.
        * loader/WebSubresourceLoader.h: Removed.
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::receivedAllData):
        (WebCore::Loader::receivedResponse):
        (WebCore::Loader::didReceiveData):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::jobForRequest):
        * loader/mac/DocumentLoaderMac.mm:
        * loader/mac/FormDataStream.m: Added.
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::cancelPendingArchiveLoad):
        (WebCore::FrameLoader::addPlugInStreamLoader):
        (WebCore::FrameLoader::removePlugInStreamLoader):
        (WebCore::FrameLoader::addSubresourceLoader):
        (WebCore::FrameLoader::removeSubresourceLoader):
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFinishLoad):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::willUseArchive):
        (WebCore::FrameLoader::isArchiveLoadPending):
        * loader/mac/ImageDocumentMac.mm:
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::releaseDelegate):
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::addData):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::setDefersLoading):
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        (WebCore::NetscapePlugInStreamLoader::releaseResources):
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        (WebCore::NetscapePlugInStreamLoader::didFail):
        (WebCore::NetscapePlugInStreamLoader::didCancel):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::setDefersLoading):
        (WebCore::ResourceLoader::frameLoader):
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::resourceData):
        (WebCore::ResourceLoader::clearResourceData):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::willStopBufferingData):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::willCacheResponse):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::setIdentifier):
        (WebCore::ResourceLoader::response):
        (WebCore::ResourceLoader::inConnectionCallback):
        (WebCore::ResourceLoader::cancelledError):
        (WebCore::ResourceLoader::receivedCredential):
        (WebCore::ResourceLoader::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceLoader::receivedCancellation):
        (WebCore::ResourceLoader::delegate):
        (WebCore::ResourceLoader::releaseDelegate):
        (-[WebCoreResourceLoaderAsDelegate initWithLoader:]):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * loader/mac/WebFormDataStream.h: Removed.
        * loader/mac/WebFormDataStream.m: Removed.
        * page/Frame.cpp:
        (WebCore::Frame::javaScriptEnabled):
        (WebCore::Frame::scriptProxy):
        (WebCore::Frame::executeScript):
        (WebCore::Frame::write):
        (WebCore::Frame::userGestureHint):
        (WebCore::Frame::saveInterpreterBuiltins):
        (WebCore::Frame::restoreInterpreterBuiltins):
        (WebCore::Frame::backslashAsCurrencySymbol):
        * page/Frame.h:
        * page/FramePrivate.h:
        * platform/StreamingTextDecoder.cpp: Removed.
        * platform/StreamingTextDecoder.h: Removed.
        * platform/StreamingTextDecoderICU.cpp: Removed.
        * platform/StreamingTextDecoderICU.h: Removed.
        * platform/TextCodec.cpp: Added.
        * platform/TextCodec.h: Added.
        * platform/TextCodecICU.cpp: Added.
        * platform/TextCodecICU.h: Added.
        * platform/TextCodecLatin1.h:
        * platform/TextCodecUTF16.h:
        * platform/TextDecoder.h:
        * platform/TextEncoding.cpp:
        * platform/TextEncodingRegistry.cpp:
        * platform/image-decoders/jpeg/jmorecfg.h:
        * platform/mac/StreamingTextDecoderMac.cpp: Removed.
        * platform/mac/StreamingTextDecoderMac.h: Removed.
        * platform/mac/TextCodecMac.cpp: Added.
        * platform/mac/TextCodecMac.h: Added.
        * platform/network/ResourceHandleInternal.h:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::bindingRootObject):
        * platform/qt/LoaderFunctionsQt.cpp:
        (WebCore::CheckCacheObjectStatus):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::backslashAsCurrencySymbol):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/xmlhttprequest.h:

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

        Rubber stamped by Adam (kinda).

        - add Mac suffixes and correct filenames inside loader/mac

        * WebCore.xcodeproj/project.pbxproj: Updated for changes below.

        * loader/mac/FrameLoader.mm: Removed.
        * loader/mac/WebDocumentLoader.mm: Removed.
        * loader/mac/WebLoader.mm: Removed.
        * loader/mac/WebMainResourceLoader.mm: Removed.
        * loader/mac/WebNetscapePlugInStreamLoader.mm: Removed.
        * loader/mac/WebSubresourceLoader.mm: Removed.

        * loader/mac/FrameLoaderMac.mm: Added.
        * loader/mac/DocumentLoaderMac.mm: Added.
        * loader/mac/ResourceLoaderMac.mm: Added.
        * loader/mac/MainResourceLoaderMac.mm: Added.
        * loader/mac/WebNetscapePlugInStreamLoaderMac.mm: Added.
        * loader/mac/SubresourceLoaderMac.mm: Removed.

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

        Reviewed by Adam.

        - moving towards use of FrameLoader cross-platform; get FrameLoader.h
          and FrameLoader.cpp mostly ready

        * WebCore.xcodeproj/project.pbxproj: Added FrameLoader.cpp and
        FormState.cpp. Removed WebFormState.mm.

        * loader/FrameLoader.h: Put in lots of #if statements to see if we can
        get this header compiling on non-Mac.
        * loader/FrameLoader.cpp: Added. Has non-Mac-specific bits of FrameLoader.
        * loader/mac/FrameLoader.mm: Moved some non-Mac-specific bits out.

        * loader/FrameLoaderClient.h: Added some ifdefs.
        * loader/WebDocumentLoader.h: Ditto.
        * loader/WebLoader.h: Ditto.
        * loader/WebMainResourceLoader.h: Ditto.

        * loader/mac/WebDocumentLoader.mm:
        (WebCore::DocumentLoader::isLoadingInAPISense):
        Rewrote to work without bridge, partly to remove the need for ObjC
        bridge type in the header, and also because we're tearing down the bridge.

        * loader/mac/WebMainResourceLoader.mm:
        (WebCore::MainResourceLoader::MainResourceLoader): Removed unused
        m_contentLength and m_bytesReceived.
        (WebCore::MainResourceLoader::didReceiveResponse): Ditto.
        (WebCore::MainResourceLoader::didReceiveData): Ditto.

        * bridge/mac/WebCoreFrameBridge.h: Removed doneProcessingData.
        * bridge/mac/WebCoreFrameBridge.mm: Ditto.

        * loader/mac/FormState.mm: Removed.
        * loader/FormState.cpp: Added.

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

        Rubber stamped by Adam.

        - moving towards use of FrameLoader cross-platform; move the headers
          for the Mac loader from loader/mac into loader, in preparation for
          making them useful on non-Mac

        * WebCore.xcodeproj/project.pbxproj:

        * loader/mac/FrameLoader.h: Removed.
        * loader/mac/WebDocumentLoader.h: Removed.
        * loader/mac/WebFormState.h: Removed.
        * loader/mac/WebLoader.h: Removed.
        * loader/mac/WebMainResourceLoader.h: Removed.
        * loader/mac/WebNetscapePlugInStreamLoader.h: Removed.
        * loader/mac/WebSubresourceLoader.h: Removed.

        * loader/FrameLoader.h: Added.
        * loader/WebDocumentLoader.h: Added.
        * loader/WebFormState.h: Added.
        * loader/WebLoader.h: Added.
        * loader/WebMainResourceLoader.h: Added.
        * loader/WebNetscapePlugInStreamLoader.h: Added.
        * loader/WebSubresourceLoader.h: Added.

2006-10-29  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Finish Darin's clean up of the use of __APPLE__ in WebCore, begun in
        r17405.

        * platform/DeprecatedString.h:

2006-10-29  Beth Dakin  <bdakin@apple.com>

        Rubber stamped by Geoff.

        This is a followup to my HitTestResult checkin. Most of the 
        HitTestResult local variables in the code were named i or info for 
        when the class was named NodeInfo. This patch renames all of these 
        local variables to result.

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::mapMouseEvent):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::mapMouseEvent):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nodeAtPoint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInScrollbar):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderBox.h:
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::hitTestLines):
        * rendering/RenderFlow.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::nodeAtPoint):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::nodeAtPoint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::nodeAtPoint):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateHoverActiveState):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isPointInScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::hitTest):
        (WebCore::RenderObject::setInnerNode):
        (WebCore::RenderObject::nodeAtPoint):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtPoint):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTableSection.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::nodeAtPoint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::nodeAtPoint):
        * rendering/RootInlineBox.h:

2006-10-29  Adam Roben  <aroben@apple.com>

        More semi-fixes.

        * page/Page.cpp: Forgot to wrap the actual definition of
        setDefersLoading() in PLATFORM(MAC).
        * platform/PlatformWheelEvent.h: Fix up preprocessor directives.

2006-10-29  Adam Roben  <aroben@apple.com>

        Build semi-fix.

        Move all FrameLoader-related code in Page.{cpp,h} within #if
        PLATFORM(MAC), since this class currently only exists on Mac.

        * page/Page.cpp:
        * page/Page.h:

2006-10-29  Geoffrey Garen  <ggaren@apple.com>

        build fix.
        
        * platform/PlatformString.h:
        (WebCore::String::operator NSString*):

2006-10-29  Geoffrey Garen  <ggaren@apple.com>

        Rolled out accidental commit.
        
        * platform/AtomicString.h:
        (WebCore::AtomicString::AtomicString):
        (WebCore::AtomicString::operator NSString*):

2006-10-29  Geoffrey Garen  <ggaren@apple.com>

        RS by Darin.

        Rolled out change to map NULL Strings to nil NSStrings because it caused
        even more AppKit crashes. Maybe we should remove the NSString * operator
        entirely, since its use is not straight-forward, and require callers to
        specify explicitly whether they tolerate NULL.
        
        * platform/AtomicString.h:
        * platform/PlatformString.h:
        (WebCore::String::operator NSString*):
        * platform/mac/TextFieldMac.mm:
        (-[NSSearchFieldCell _addStringToRecentSearches:]):

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

        Reviewed by Geoff.

        - fixed storage leak showing up on the buildbot

        * loader/mac/WebSubresourceLoader.mm: (WebCore::SubresourceLoader::create):
        Release the NSURLRequest after passing it to load. Also clean up logic a bit.

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

        Rubber stamped by Adam.

        - renamed WebFrameLoaderClient to match the class name inside it

        * loader/mac/WebFrameLoaderClient.h: Removed.
        * loader/FrameLoaderClient.h: Moved it here.

        * WebCore.xcodeproj/project.pbxproj: Updated project.

        * bridge/mac/FrameMac.mm: Updated includes.
        * bridge/mac/WebCoreFrameBridge.mm: Ditto.
        * loader/mac/FrameLoader.mm: Ditto.
        * loader/mac/WebLoader.h: Ditto.

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

        Reviewed by Mitz.

        - fix crash visible on buildbot and also when running the test
          anchor-image-scrolled-x-y.html under libgmalloc

        * loader/mac/WebSubresourceLoader.h: Renamed m_loader to m_handle
        now that the class is named ResourceHandle.
        * loader/mac/WebSubresourceLoader.mm: Renaming, plus:
        (WebCore::SubresourceLoader::didFinishLoading): Get the handle into
        a local RefPtr before calling finishJobAndHandle, since we might get
        cancelled inside that function, so we should not rely on m_handle to
        keep the ResourceHandle alive.
        (WebCore::SubresourceLoader::didFail): Ditto.
        (WebCore::SubresourceLoader::didCancel): Ditto.

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        - build fix

        * platform/network/mac/ResourceHandleMac.mm:

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Darin.

        - renamed ResourceLoader to ResourceHandle (and same for related classes)

        * CMakeLists.txt:
        * Projects/gdk/webcore-gdk.bkl:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bridge/mac/FrameMac.mm:
        * bridge/win/FrameWin.cpp:
        * dom/XMLTokenizer.cpp:
        * loader/Cache.cpp:
        * loader/CachedResource.h:
        * loader/LoaderFunctions.h:
        * loader/icon/IconLoader.cpp:
        (IconLoader::startLoading):
        (IconLoader::didReceiveData):
        (IconLoader::didFinishLoading):
        * loader/icon/IconLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::receivedAllData):
        (WebCore::Loader::receivedResponse):
        (WebCore::Loader::didReceiveData):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::jobForRequest):
        * loader/loader.h:
        * loader/mac/IconLoaderMac.mm:
        (IconLoader::receivedResponse):
        * loader/mac/LoaderFunctionsMac.mm:
        * loader/mac/WebLoader.h:
        * loader/mac/WebSubresourceLoader.h:
        * loader/mac/WebSubresourceLoader.mm:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::create):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdkClientDefault::FrameGdkClientDefault):
        (WebCore::FrameGdkClientDefault::openURL):
        (WebCore::FrameGdkClientDefault::submitForm):
        (WebCore::FrameGdkClientDefault::receivedResponse):
        (WebCore::FrameGdkClientDefault::didReceiveData):
        (WebCore::FrameGdkClientDefault::receivedAllData):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::ServeSynchronousRequest):
        (WebCore::ResourceHandle::assembleResponseHeaders):
        (WebCore::ResourceHandle::retrieveCharset):
        * platform/network/ResourceHandle.cpp: Added.
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        (WebCore::ResourceHandle::isErrorPage):
        (WebCore::ResourceHandle::error):
        (WebCore::ResourceHandle::setError):
        (WebCore::ResourceHandle::responseEncoding):
        (WebCore::ResourceHandle::responseHTTPHeadersAsString):
        (WebCore::ResourceHandle::kill):
        (WebCore::ResourceHandle::requestHeaders):
        (WebCore::ResourceHandle::url):
        (WebCore::ResourceHandle::postData):
        (WebCore::ResourceHandle::method):
        (WebCore::ResourceHandle::client):
        * platform/network/ResourceHandle.h: Added.
        (WebCore::ResourceHandle::getInternal):
        * platform/network/ResourceHandleClient.h: Added.
        (WebCore::ResourceHandleClient::~ResourceHandleClient):
        (WebCore::ResourceHandleClient::didReceiveData):
        (WebCore::ResourceHandleClient::didFinishLoading):
        (WebCore::ResourceHandleClient::receivedRedirect):
        (WebCore::ResourceHandleClient::receivedResponse):
        (WebCore::ResourceHandleClient::receivedAllData):
        * platform/network/ResourceHandleInternal.h: Added.
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/ResourceLoader.cpp: Removed.
        * platform/network/ResourceLoader.h: Removed.
        * platform/network/ResourceLoaderClient.h: Removed.
        * platform/network/ResourceLoaderInternal.h: Removed.
        * platform/network/cf/ResourceHandleCFNet.cpp: Added.
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::willCacheResponse):
        (WebCore::didReceiveChallenge):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        * platform/network/cf/ResourceLoaderCFNet.cpp: Removed.
        * platform/network/gdk/ResourceHandleCurl.cpp: Added.
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        * platform/network/gdk/ResourceHandleManager.cpp: Added.
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::get):
        (WebCore::ResourceHandleManager::useSimpleTransfer):
        (WebCore::writeCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::remove):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        * platform/network/gdk/ResourceHandleManager.h: Added.
        * platform/network/gdk/ResourceLoaderCurl.cpp: Removed.
        * platform/network/gdk/ResourceLoaderManager.cpp: Removed.
        * platform/network/gdk/ResourceLoaderManager.h: Removed.
        * platform/network/mac/ResourceHandleMac.mm: Added.
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::assembleResponseHeaders):
        (WebCore::ResourceHandle::retrieveResponseEncoding):
        (WebCore::ResourceHandle::receivedResponse):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::redirectedToURL):
        (WebCore::ResourceHandle::addData):
        (WebCore::ResourceHandle::finishJobAndHandle):
        (WebCore::ResourceHandle::reportError):
        * platform/network/mac/ResourceLoaderMac.mm: Removed.
        * platform/network/qt/ResourceHandleManager.cpp: Added.
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::ResourceHandleManager::self):
        (WebCore::ResourceHandleManager::slotData):
        (WebCore::ResourceHandleManager::slotMimetype):
        (WebCore::ResourceHandleManager::slotResult):
        (WebCore::ResourceHandleManager::remove):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        * platform/network/qt/ResourceHandleManager.h: Added.
        * platform/network/qt/ResourceHandleQt.cpp: Added.
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::assembleResponseHeaders):
        (WebCore::ResourceHandle::retrieveResponseEncoding):
        (WebCore::ResourceHandle::receivedResponse):
        (WebCore::ResourceHandle::extractCharsetFromHeaders):
        * platform/network/qt/ResourceLoaderManager.cpp: Removed.
        * platform/network/qt/ResourceLoaderManager.h: Removed.
        * platform/network/qt/ResourceLoaderQt.cpp: Removed.
        * platform/network/win/ResourceHandleWin.cpp: Added.
        (WebCore::):
        (WebCore::addToOutstandingJobs):
        (WebCore::lookupResourceHandle):
        (WebCore::ResourceHandleWndProc):
        (WebCore::initializeOffScreenResourceHandleWindow):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::onHandleCreated):
        (WebCore::ResourceHandle::onRequestRedirected):
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::fileLoadTimer):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::setHasReceivedResponse):
        (WebCore::ResourceHandle::hasReceivedResponse):
        * platform/network/win/ResourceHandleWin.h: Added.
        * platform/network/win/ResourceLoaderWin.cpp: Removed.
        * platform/network/win/ResourceLoaderWin.h: Removed.
        * platform/qt/FrameQt.cpp:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::openURL):
        (WebCore::FrameQtClientDefault::submitForm):
        (WebCore::FrameQtClientDefault::receivedResponse):
        (WebCore::FrameQtClientDefault::didReceiveData):
        (WebCore::FrameQtClientDefault::receivedAllData):
        * platform/qt/FrameQtClient.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ResourceHandle::assembleResponseHeaders):
        (WebCore::ResourceHandle::retrieveResponseEncoding):
        (WebCore::ServeSynchronousRequest):
        * xml/XSLTProcessor.cpp:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::receivedRedirect):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/xmlhttprequest.h:

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

        Reviewed by Maciej.

        - eliminate use of NSArray to carry form data around

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/FormDataMac.h: Removed.
        * bridge/mac/FormDataMac.mm: Removed.
        * bridge/mac/FrameMac.h:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * loader/FormData.h:
        (WebCore::FormData::isEmpty):
        * loader/mac/FrameLoader.h:
        * loader/mac/FrameLoader.mm:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::loadEmptyDocumentSynchronously):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::ServeSynchronousRequest):
        * loader/mac/WebFormDataStream.h:
        * loader/mac/WebFormDataStream.m:
        (WebCore::pairRetain):
        (WebCore::pairRelease):
        (WebCore::pairEqual):
        (WebCore::pairHash):
        (WebCore::closeCurrentStream):
        (WebCore::scheduleWithPair):
        (WebCore::advanceCurrentStream):
        (WebCore::openNextStream):
        (WebCore::formCreate):
        (WebCore::formFinalize):
        (WebCore::formOpen):
        (WebCore::formRead):
        (WebCore::formCanRead):
        (WebCore::formClose):
        (WebCore::formSchedule):
        (WebCore::formUnschedule):
        (WebCore::formEventCallback):
        (WebCore::setHTTPBody):
        * loader/mac/WebSubresourceLoader.h:
        * loader/mac/WebSubresourceLoader.mm:
        (WebCore::SubresourceLoader::create):
        * platform/network/mac/ResourceLoaderMac.mm:

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - create SubresourceLoader with a ResourceRequest, not broken out request bits

        * loader/mac/WebSubresourceLoader.h:
        * loader/mac/WebSubresourceLoader.mm:
        (WebCore::SubresourceLoader::create):
        * platform/network/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::start):

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - removed ObjC glue between ResourceLoader and SubresourceLoader, then now talk to each other directly

        Removed WebCoreResourceLoader, WebCoreResourceHandle and WebCoreResourceLoaderImp
        
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.h:
        * loader/mac/FrameLoader.h:
        * loader/mac/FrameLoader.mm:
        * loader/mac/LoaderFunctionsMac.mm:
        * loader/mac/WebLoader.h:
        * loader/mac/WebSubresourceLoader.h:
        * loader/mac/WebSubresourceLoader.mm:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * platform/network/ResourceLoader.h:
        * platform/network/ResourceLoaderInternal.h:
        * platform/network/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::receivedResponse):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::redirectedToURL):
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::finishJobAndHandle):
        (WebCore::ResourceLoader::reportError):
        * platform/network/mac/WebCoreResourceLoader.h: Removed.
        * platform/network/mac/WebCoreResourceLoaderImp.h: Removed.
        * platform/network/mac/WebCoreResourceLoaderImp.mm: Removed.

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

        Reviewed by Maciej.

        - eliminated the use of Objective-C for the policy decider
          machinery, obviating the need for WebPolicyDecider,
          WebCoreFrameLoaderAsDelegate, and
          WebCoreMainResourceLoaderAsPolicyDelegate

        - grouped the state related to policy decisions into a PolicyCheck
          class to simplify the FrameLoader logic

        - removed six methods from the bridge, reducing FrameLoader's use of
          the bridge to a single method

        - changed form state to always use HashMap instead of NSDictionary

        - moved the defersLoading flag from WebView to WebCore::Page
          and changed code to consistently call it defersLoading rather
          than defersCallbacks

        - updated for rename of PassRefPtr::release to releaseRef
        - replaced all uses of __APPLE__ with appropriate PLATFORM defines
        - cleaned up kjs_binding.h a bit
        - cleaned up FrameMac.h a bit

        * loader/mac/WebPolicyDecider.h: Removed.
        * loader/mac/WebPolicyDecider.mm: Removed.
        * WebCore.xcodeproj/project.pbxproj: Updated for removal.

        * WebCore.exp:
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::ScriptInterpreter):
        (KJS::ScriptInterpreter::wasRunByUserGesture):
        * bindings/js/kjs_binding.h:
        (KJS::ScriptInterpreter::setCurrentEvent):
        (KJS::ScriptInterpreter::setInlineCode):
        (KJS::ScriptInterpreter::setProcessingTimerCallback):
        (KJS::ScriptInterpreter::getCurrentEvent):
        (KJS::cacheDOMObject):
        (KJS::DOMExceptionTranslator::DOMExceptionTranslator):
        * bridge/AXObjectCache.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::loadRequest):
        (WebCore::FrameMac::submitForm):
        (WebCore::FrameMac::urlSelected):
        (WebCore::FrameMac::userAgent):
        (WebCore::FrameMac::passMouseDownEventToWidget):
        (WebCore::FrameMac::handleMouseMoveEvent):
        * bridge/mac/PageMac.mm:
        (WebCore::Page::Page):
        * bridge/mac/WebCoreEditCommand.mm:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge dragOperationForDraggingInfo:]):
        (-[WebCoreFrameBridge syncLoadResourceWithMethod:URL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::append):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateSelection):
        (WebCore::Document::implicitClose):
        (WebCore::Document::setFocusNode):
        * dom/Document.h:
        * editing/ReplaceSelectionCommand.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        * loader/mac/FrameLoader.h:
        (WebCore::PolicyCheck::request):
        * loader/mac/FrameLoader.mm:
        (WebCore::FrameLoader::~FrameLoader):
        (WebCore::FrameLoader::safeLoad):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::setAllDefersLoading):
        (WebCore::FrameLoader::setDefersLoading):
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::callContinueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::checkNavigationPolicy):
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::cancelContentPolicyCheck):
        (WebCore::FrameLoader::stopPolicyCheck):
        (WebCore::FrameLoader::checkNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        (WebCore::FrameLoader::continueAfterContentPolicy):
        (WebCore::FrameLoader::continueAfterWillSubmitForm):
        (WebCore::FrameLoader::callContinueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::closeDocument):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::callContinueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::PolicyCheck::PolicyCheck):
        (WebCore::PolicyCheck::clear):
        (WebCore::PolicyCheck::set):
        (WebCore::PolicyCheck::call):
        (WebCore::PolicyCheck::dropRequest):
        (WebCore::FrameLoaderClient::~FrameLoaderClient):
        * loader/mac/WebFormState.h:
        * loader/mac/WebFormState.mm:
        * loader/mac/WebFrameLoaderClient.h:
        * loader/mac/WebLoader.h:
        (WebCore::WebResourceLoader::defersLoading):
        * loader/mac/WebLoader.mm:
        (WebCore::WebResourceLoader::WebResourceLoader):
        (WebCore::WebResourceLoader::load):
        (WebCore::WebResourceLoader::setDefersLoading):
        * loader/mac/WebMainResourceLoader.h:
        * loader/mac/WebMainResourceLoader.mm:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::releaseDelegate):
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::callContinueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::callContinueAfterContentPolicy):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::setDefersLoading):
        * page/Frame.cpp:
        (WebCore::Frame::paint):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setDefersLoading):
        * page/Page.h:
        (WebCore::Page::defersLoading):
        * platform/DeprecatedString.h:
        * platform/DeprecatedStringList.h:
        * platform/FontFallbackList.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::setDragImage):
        (WebCore::ClipboardMac::dragNSImage):
        (WebCore::ClipboardMac::sourceOperation):
        (WebCore::ClipboardMac::destinationOperation):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):
        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition):

2006-10-28  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fix layout tests that broke after r17399. Mitz discovered that the
        failures were caused by HitTestResult::m_point being uninitialized
        much of the time. HitTestResults are now always constructed with a
        point, and RenderLayer::hitTest and RenderLayer::hitTestLayer use that
        point instead of being passed one explicitly.

        * WebCore.exp: Change constructor symbol.
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::eventMayStartDrag): Update to new constructor and
        hitTest().
        (WebCore::FrameMac::handleMouseMoveEvent): Ditto.
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXTextMarkerForPosition:]): Ditto.
        (-[WebCoreAXObject accessibilityHitTest:]): Ditto.
        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint): Ditto.
        (WebCore::Document::prepareMouseEvent): Ditto.
        * page/Frame.cpp:
        (WebCore::Frame::isPointInsideSelection): Ditto.
        (WebCore::Frame::hitTestResultAtPoint): Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::handleWheelEvent): Ditto.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult): Initalize m_point with the
        passed point.
        * rendering/HitTestResult.h: Update constructor declaration.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll): Update to new constructor and
        hitTest().
        (WebCore::RenderLayer::hitTest): Use the IntPoint stored in the
        HitTestResult instead of being passed one.
        (WebCore::RenderLayer::hitTestLayer): Ditto.
        * rendering/RenderLayer.h: Update declarations.

2006-10-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Anders.

        Fix Qt/Linux build.

        * CMakeLists.txt:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::numRequests):
        (WebCore::FrameQtClientDefault::numPendingOrLoadingRequests):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::updateFromElement):

2006-10-28  David Carson  <dacarson@gmail.com>

        Tweaked by Sam. Reviewed by Brady.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=11437
        Initialize m_modifyBiasSet to false, as it sometimes gets 
        used before it has been initalized.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):

2006-10-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        This is the WebCore half of pushing elementAtPoint and the backend 
        of WebElementDictionary into WebCore. Most of the changes below are 
        to accommodate one of the following:
                
        -NodeInfo is now a stand-alone class called HitTestResult. 
                Previously it was defined in RenderObject.h, but not for 
                any particular reason. The WebElementDictionary 
                functionality that was pushed into WebCore has been pushed 
                specifically into the this class. In fact, 
                WebElementDictionary now keeps a HitTestResult as a member 
                varibale.
                
        -The enumeration AccessPolicy is now called 
                ClipboardAccessPolicy and is defined in its own header. It 
                was previously defined in ClipboardMac.h, but is now 
                defined independently to avoid including ClipboardMac.h 
                from within FrameMac.h since FrameMac.h is now included in 
                WebElementDictionary.m in WebKit.
                
        -Element now has a virtual target() for the sake of 
                NodeInfo::targetFrame() 

        * WebCore.exp: Several WebCore functions are newly called from 
        WebKit, so they have been added here. 
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm: Must include Image.h because of adjustments 
        to ClipboardMac.
        * bridge/mac/FrameMac.h: Adjust to HitTestResult changes.
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::freeClipboard): Adjust to ClipboardAccessPolicy 
        and HitTestResult changes.
        (WebCore::FrameMac::eventMayStartDrag): Same.
        (WebCore::FrameMac::handleMouseMoveEvent): Same.
        (WebCore::FrameMac::dispatchCPPEvent): Same.
        (WebCore::FrameMac::mayDHTMLCut): Same.
        (WebCore::FrameMac::mayDHTMLCopy): Same.
        (WebCore::FrameMac::mayDHTMLPaste): Same.
        (WebCore::FrameMac::tryDHTMLCut): Same
        (WebCore::FrameMac::tryDHTMLCopy): Same.
        (WebCore::FrameMac::tryDHTMLPaste): Same.
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXTextMarkerForPosition:]): Adjust to 
        HitTestResult changes.
        (-[WebCoreAXObject accessibilityHitTest:]): Same.
        * bridge/mac/WebCoreFrameBridge.h: Same.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge dragOperationForDraggingInfo:]): Adjust for 
        ClipboardAccessPolicy changes.
        (-[WebCoreFrameBridge dragExitedWithDraggingInfo:]): Same.
        (-[WebCoreFrameBridge concludeDragForDraggingInfo:]): Same.
        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint): Adjust for HitTestResult 
        changes.
        (WebCore::Document::prepareMouseEvent): Same.
        * dom/Element.h:
        (WebCore::Element::target): Now has a virtual target()
        * html/HTMLAnchorElement.h: Same.
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::mapMouseEvent): Adjust for HitTestResult 
        changes.
        * html/HTMLAreaElement.h: Virtual target()
        * html/HTMLBaseElement.h:
        (WebCore::HTMLBaseElement::target): Same.
        * html/HTMLFormElement.h: Same.
        * html/HTMLLinkElement.h: Same.
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::mapMouseEvent): Adjust for HitTestResult 
        changes.
        * html/HTMLMapElement.h: Same.
        * page/Frame.cpp:
        (WebCore::Frame::isPointInsideSelection): Same.
        (WebCore::Frame::hitTestResultAtPoint): Same. 
        * page/Frame.h: Same.
        * page/FrameView.cpp:
        (WebCore::FrameView::handleWheelEvent): Same.
        * platform/mac/ClipboardAccessPolicy.h: Added.
        (WebCore::):
        * platform/mac/ClipboardMac.h: Remove definition of AccessPolicy, 
        include ClipboardAccessPolicy.h, and rename AccessPolicy to 
        ClipboardAccessPolicy.
        * platform/mac/ClipboardMac.mm: Rename ClipboardAccessPolicy.
        (WebCore::ClipboardMac::ClipboardMac):
        (WebCore::ClipboardMac::setAccessPolicy):
        (WebCore::ClipboardMac::clearData):
        (WebCore::ClipboardMac::clearAllData):
        (WebCore::ClipboardMac::getData):
        (WebCore::ClipboardMac::setData):
        (WebCore::ClipboardMac::types):
        (WebCore::ClipboardMac::setDragImage):
        (WebCore::ClipboardMac::setDropEffect):
        (WebCore::ClipboardMac::setEffectAllowed):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint): Adjust for HitTestResult 
        changes.
        * rendering/EllipsisBox.h:
        * rendering/HitTestResult.cpp: Added.
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::~HitTestResult):
        (WebCore::HitTestResult::operator=):
        (WebCore::HitTestResult::setInnerNode):
        (WebCore::HitTestResult::setInnerNonSharedNode):
        (WebCore::HitTestResult::setURLElement):
        (WebCore::HitTestResult::setScrollbar):
        (WebCore::HitTestResult::targetFrame):
        (WebCore::HitTestResult::boundingBox):
        (WebCore::HitTestResult::isSelected):
        (WebCore::HitTestResult::title):
        * rendering/HitTestResult.h: Added.
        (WebCore::HitTestResult::readonly):
        (WebCore::HitTestResult::active):
        (WebCore::HitTestResult::mouseMove):
        (WebCore::HitTestResult::innerNode):
        (WebCore::HitTestResult::innerNonSharedNode):
        (WebCore::HitTestResult::point):
        (WebCore::HitTestResult::URLElement):
        (WebCore::HitTestResult::scrollbar):
        (WebCore::HitTestResult::setPoint):
        (WebCore::HitTestResult::setReadonly):
        (WebCore::HitTestResult::setActive):
        (WebCore::HitTestResult::setMouseMove):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nodeAtPoint): Adjust to HitTestResult changes.
        * rendering/InlineBox.h: Same.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint): Same.
        * rendering/InlineFlowBox.h: Same.
        * rendering/InlineTextBox.cpp: 
        (WebCore::InlineTextBox::nodeAtPoint): Same.
        * rendering/InlineTextBox.h: Same.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInScrollbar): Same.
        (WebCore::RenderBlock::nodeAtPoint): Same.
        * rendering/RenderBlock.h: Same.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint): Same.
        * rendering/RenderBox.h: Same.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::hitTestLines): Same.
        * rendering/RenderFlow.h: Same.
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::nodeAtPoint): Same.
        * rendering/RenderForeignObject.h: Same.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::nodeAtPoint): Same.
        * rendering/RenderFrameSet.h: Same.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint): Same.
        * rendering/RenderImage.h: Same.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::nodeAtPoint): Same.
        * rendering/RenderInline.h: Same.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll): Same.
        (WebCore::RenderLayer::hitTest): Same.
        (WebCore::RenderLayer::hitTestLayer): Same.
        (WebCore::RenderLayer::updateHoverActiveState): Same.
        * rendering/RenderLayer.h: Same.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isPointInScrollbar): Same.
        * rendering/RenderListBox.h: Same.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::hitTest): Same.
        (WebCore::RenderObject::setInnerNode): Same.
        (WebCore::RenderObject::nodeAtPoint): Same.
        * rendering/RenderObject.h: Remove NodeInfo class and forward 
        declare HitTestResult.
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint): Adjust to HitTestResult 
        changes.
        * rendering/RenderPath.h: Same.
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint): Same.
        * rendering/RenderSVGImage.h: Same
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtPoint): Same.
        * rendering/RenderSVGText.h: Same.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint): Same.
        * rendering/RenderTableRow.h: Same.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint): Same.
        * rendering/RenderTableSection.h: Same.
        * rendering/RenderText.h: Same.
        (WebCore::RenderText::nodeAtPoint): Same.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::nodeAtPoint): Same.
        * rendering/RenderTextControl.h: Same.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::nodeAtPoint): Same.
        * rendering/RootInlineBox.h: Same.

2006-10-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - reverted fix for http://bugs.webkit.org/show_bug.cgi?id=11212, later we will address the performance
        impact of fixing it again.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::clear):

2006-10-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John & Adam.

        - assorted speedups to fix perf regression from fixing correctness regression

        * WebCore.exp: exported new methods.
        * WebCore.xcodeproj/project.pbxproj: Added CachedResourceMac.mm
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        * loader/CachedResource.cpp: Removed now obsolete getCFURL.
        * loader/CachedResource.h:
        * loader/mac/CachedResourceMac.mm: Added.
        (WebCore::CachedResource::getNSURLRequest): New method; the NSURLRequest is
        now cached in the CachedObject.
        * loader/mac/FrameLoader.h:
        * loader/mac/FrameLoader.mm:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache): New method - lets
        the WebKit side do faster dispatch for clients that implement the fast path delegate. 
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus): Instead of calling several FrameLoader methods,
        just call loadedResourceFromMemoryCache.
        * loader/mac/WebFrameLoaderClient.h:

2006-10-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        build fix

        * dom/Document.cpp:
        (WebCore::Document::referrer):

2006-10-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        Moved some WebCoreFrameBridge functions into FrameLoader.
        
        I had to make FrameLoader.h capable of compiling in C++-only source files
        by adding some forward declarations and __OBJC__ #ifdefs.

        * WebCore.exp:
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::createEmptyDocument):
        (WebCore::FrameMac::tokenizerProcessedData):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::referrer):
        * loader/LoaderFunctions.h:
        * loader/mac/FrameLoader.h:
        * loader/mac/FrameLoader.mm:
        (WebCore::numRequests):
        (WebCore::FrameLoader::numPendingOrLoadingRequests):
        (WebCore::FrameLoader::isReloading):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::loadEmptyDocumentSynchronously):
        (WebCore::FrameLoader::startLoadingResource):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckIfReloading):
        * page/Frame.h:
        * page/FrameTree.cpp:
        (WebCore::FrameTree::isDescendantOf):
        (WebCore::FrameTree::traverseNext):
        * page/FrameTree.h:
        * platform/network/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::start):

2006-10-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4478625> HTML Editing: Basic table editing and culling

        Expanded the Deletion UI to lists, positioned block element and block elementss with borders.

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        (WebCore::enclosingDeletableElement):
        (WebCore::DeleteButtonController::respondToChangedSelection):

2006-10-27  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin Decker
        
        Some more grammar-checking plumbing. No additional grammar jokes will have been made by the time
        you haven't not finished reading this.

        * rendering/InlineTextBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        Updated for changed signature of paintDocumentMarkers, which causes grammar markers to be
        considered also.
        (WebCore::InlineTextBox::paintDocumentMarkers):
        Renamed from paintAllMarkersOfType; now takes a bool for whether background or foreground
        markers should be painted, instead of a marker type. This avoids walking the collection of
        markers multiple times back to back. Now handles grammar markers.

2006-10-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Beth.

        Renamed Copy Files to Copy Generated Headers.
        Copy 4 DOM*Internal.h headers.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorObjC.pm:

2006-10-27  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders

        * WebCore.exp:
        exported symbol for FrameMac->advanceToNextSpelling()
        
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        removed advanceToNextMisspelling callers. Clients in WebKit must now call FrameMac directly.

2006-10-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=11423>
        REGRESSION: First newline missing from textarea's value
        
        The regression is that foo, return, bar in a textarea serializes as 'foobar'.
        
        Before my change in r17223, return (an InsertLineBreak) would insert a '\n' 
        (the line break) then a br to prevent the '\n' from collapsing, since the 
        insertion is being done at the end of a block (the textarea's shadow div).  Then, 
        inserting "bar" would displace the br, and "foo\nbar" would serialize as "foo\nbar".  
        After my change in r17223, InsertLineBreak would insert a br then a '\n' (reversed 
        the order).  Then inserting "bar" would displace the '\n' and "foo"<br>"bar" would 
        serialize as "foobar" because when serializing RenderTextControl intentionally asks 
        textContent to not convert brs to newlines.  It seems to think that the only brs in 
        the shadow div will be placeholders or collapsed.
        
        We could remove this assumption, but, for consistancy's sake, I changed InsertLineBreak 
        to insert two '\n's when at the end of a block in white-space:pre text.  This alone 
        would have fixed the bug, but introduced a new one, because foo, return, bar would 
        produce "foo\nbar\n" which would serialize as "foo\nbar\n" (even though the second 
        '\n' is collapsed, because of 9661).  So, then I changed placeholder displacement to 
        displace a '\n' if it's acting as a placeholder.  A "placeholder" is now defined as 
        a br or '\n' that will collapse (become superfluous) when content is inserted just 
        before it.
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removePlaceholderAt): Renamed.  Remove
        a br or '\n' if content inserted just before it will cause it to collapse.
        * editing/CompositeEditCommand.h:
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): Insert the same type of node
        to prevent a collapse as was used for the line break.  Fixed comments.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Call the renamed function.
        
2006-10-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady.

        Fixed semantic inaccuracy in String::operator NSString *(), where a NULL
        String became an empty NSString *, instead of nil. This will become important
        as we start using this conversion more.
        
        Added work-around for AppKit crash that semantic accuracy revealed.
        
        No testcase because I don't think there's a way to reflect this change
        in a webpage yet.

        * platform/PlatformString.h:
        (WebCore::String::operator NSString*):
        * platform/mac/TextFieldMac.mm:
        (-[NSSearchFieldCell _addStringToRecentSearches:]):

2006-10-27  David Harrison  <harrison@apple.com>

        Reviewed by Maciej,

        <rdar://problem/4003820> Expose blockquotes in AXAttributedStringForTextMarkerRange

        * bridge/mac/WebCoreAXObject.mm:
        (blockquoteLevel):
        Calculate and return the blockquote level of the element.
        
        (AXAttributeStringSetBlockquoteLevel):
        Add, if non-zero, or clear the block quote level attribute.
        
        (AXAttributedStringAppendText):
        Send AXAttributeStringSetBlockquoteLevel.

2006-10-27  Darin Adler  <darin@apple.com>

        - fix one error in the Qt build

        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        Updated.

2006-10-27  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * WebCore.exp: Export more symbols needed by WebKit.

2006-10-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by the Baroness Esmeralda Von Scratch N' Purr XIV.

        Fixed layout test crash. Oops.
        
        * loader/mac/WebDocumentLoader.mm:
        (WebCore::canonicalizedTitle):

2006-10-26  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady
        
        - fixed <rdar://problem/4806064> Repro crash in FrameMac::loadRequest following iTunes music store link from salon.com
        
        This restores some of the nil-handling that was implicit before some of the code was converted from
        Objective-C to C++.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::loadRequest):
        handle nil FrameMac
        
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canTargetLoadInFrame:]):
        handle nil Frame

2006-10-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin, Maciej.

        Removed many uses of NSString *.
        Moved a few methods from WebCoreFrameBridge to FrameLoader, replacing 
        stringByCollapsingNonPrintingCharacters with a c++ equivalent.
        
        PLT says no performance regression.
        
        * WebCore.exp:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge receivedData:textEncodingName:]):
        * loader/mac/FrameLoader.h:
        * loader/mac/FrameLoader.mm:
        (WebCore::FrameLoader::setupForReplaceByMIMEType):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::canShowMIMEType):
        (WebCore::FrameLoader::representationExistsForURLScheme):
        (WebCore::FrameLoader::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::invalidatePendingPolicyDecision):
        (WebCore::FrameLoader::checkNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNewWindowPolicy):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::continueLoadRequestAfterNewWindowPolicy):
        (WebCore::FrameLoader::post):
        * loader/mac/WebDocumentLoader.h:
        * loader/mac/WebDocumentLoader.mm:
        (WebCore::DocumentLoader::doesProgressiveLoad):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::title):
        (WebCore::DocumentLoader::setOverrideEncoding):
        (WebCore::DocumentLoader::overrideEncoding):
        (WebCore::DocumentLoader::setTitle):
        * loader/mac/WebFrameLoaderClient.h:
        * loader/mac/WebMainResourceLoader.mm:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):

2006-10-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/4796941> Table deletion outline is misplaced at nytimes.com

        The main table at nytimes.com has a fixed width of 874px, but the table ends
        up overflowing to 963px. We now use overflowWidth() and overflowHeight() to correct
        this. The other bug was a missing top and left of 0px on the container element,
        causing the deletion UI to sometimes be offset below the table.

        Now check for the element's renderer at the beginning of show() and
        return early if it is null.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::updateOutlineStyle):
        (WebCore::DeleteButtonController::show):

2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        Build fix.

        * html/CanvasRenderingContext2D.cpp:
        Include MathExtras.h
        
2006-10-26  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders.

        Some changes to support new grammar checking code in WebKit.

        * WebCore.exp:
        added mangled symbol for Document->removeMarkers() so I can call it from WebKit
        
        * WebCore.xcodeproj/project.pbxproj:
        Made Document.h and DocumentMarker.h private so I can include them from WebKit.
        Made HTMLCollection.h private because Document.h uses it.
        
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        removed unmarkAllMisspellings(); WebKit now calls through to the Document directly

2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Add reverseFind to String and use it instead of findRev.
        Use CString instead of DeprecatedCString in one place.
        
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * ksvg2/svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::getTarget):
        * loader/Decoder.cpp:
        (WebCore::Decoder::checkForCSSCharset):
        * platform/PlatformString.h:
        (WebCore::String::reverseFind):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::reverseFind):
        * platform/StringImpl.h:

2006-10-26  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        More plumbing for grammar checking. Still no grammars is checked.

        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::):
        added Grammar to enum of marker types; removed explicit enum values; removed unnecessary "enum"
        
        * platform/GraphicsContext.h:
        renamed method drawLineForMisspelling to drawLineForMisspellingOrBadGrammar;
        now takes a bool parameter for whether it represents bad grammar or a misspelling 
        
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        Renamed from drawLineForMisspelling; uses green dot instead of red dot for grammar case. Changed
        an existing "assert" to "ASSERT".
        
        * rendering/InlineTextBox.h:
        renamed function paintSpellingMarker to paintSpellingOrGrammarMarker;

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        Renamed from paintSpellingMarker; now takes a bool parameter for whether it represents
        bad grammar or a misspelling
        (WebCore::InlineTextBox::paintAllMarkersOfType):
        now handles markers of type Grammar

=== Safari-521.29 ===
        
2006-10-26  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11424
        Cleanup rendering code

        - Assorted code cleanup.

        * rendering/AutoTableLayout.cpp:
        * rendering/AutoTableLayout.h:
        (WebCore::AutoTableLayout::totalPercent):
        * rendering/CounterListItem.h:
        * rendering/CounterNode.cpp:
        * rendering/CounterNode.h:
        (WebCore::CounterNode::~CounterNode):
        (WebCore::CounterNode::isReset):
        * rendering/CounterResetNode.cpp:
        * rendering/CounterResetNode.h:
        * rendering/DataRef.h:
        (WebCore::DataRef::DataRef):
        * rendering/DeprecatedRenderSelect.h:
        * rendering/DeprecatedSlider.cpp:
        * rendering/DeprecatedSlider.h:
        * rendering/EllipsisBox.cpp:
        * rendering/EllipsisBox.h:
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/FixedTableLayout.cpp:
        * rendering/FixedTableLayout.h:
        * rendering/GapRects.h:
        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::setConstructed):
        (WebCore::InlineBox::clearTruncation):
        (WebCore::InlineBox::markDirty):
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::setConstructed):
        (WebCore::InlineFlowBox::setEdges):
        (WebCore::InlineFlowBox::setVerticalOverflowPositions):
        (WebCore::InlineFlowBox::setVerticalSelectionPositions):
        * rendering/InlineRunBox.h:
        (WebCore::InlineRunBox::paintBackgroundAndBorder):
        (WebCore::InlineRunBox::paintDecorations):
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::InlineTextBox):
        (WebCore::InlineTextBox::end):
        (WebCore::InlineTextBox::textObject):
        * rendering/Length.h:
        (WebCore::Length::Length):
        * rendering/ListMarkerBox.cpp:
        * rendering/ListMarkerBox.h:
        * rendering/RenderPartObject.h:
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * rendering/SVGInlineFlowBox.cpp:
        * rendering/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::SVGInlineFlowBox):
        * rendering/SVGRootInlineBox.cpp:
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        * rendering/TableLayout.h:
        (WebCore::TableLayout::TableLayout):
        (WebCore::TableLayout::~TableLayout):
        * rendering/bidi.h:
        (WebCore::BidiStatus::BidiStatus):
        (WebCore::BidiRun::BidiRun):
        * rendering/break_lines.h:

2006-10-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <http://bugs.webkit.org/show_bug.cgi?id=11329>
        Gmail Editor: Can't remove styling applied to selection after clicking "Remove Formatting" toolbar icon.
        
        * editing/Editor.cpp:
        (WebCore::Editor::removeFormattingAndStyle): Moved from JSEditor.
        Wrapped the plain text fragment in a style span with the document 
        default style so that it will appear unstyled regardless of where
        it is inserted.  Could have also inserted the plain text fragment 
        and then applied the document default style to it, but there is not 
        yet any redundant style prevention in ApplyStyleCommand, so this
        is cleaner.
        * editing/Editor.h:
        * editing/JSEditor.cpp:

2006-10-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders.
        Fixes <rdar://problem/4800518> -- needed to update existing
        canvas path elements when transforms are performed on the
        context.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):

2006-10-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin.

        Fix Qt/Linux build.

        * platform/network/qt/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::slotData):
        (WebCore::ResourceLoaderManager::slotMimetype):
        (WebCore::ResourceLoaderManager::remove):
        (WebCore::ResourceLoaderManager::add):
        * platform/network/qt/ResourceLoaderQt.cpp:
        (WebCore::ResourceLoader::receivedResponse):
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::openURL):
        * platform/qt/LoaderFunctionsQt.cpp:
        (WebCore::ServeSynchronousRequest):

2006-10-26  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix: <rdar://problem/3951815> add "type-to-select" feature for list
        boxes (<select> elements)
        Fix: http://bugs.webkit.org/show_bug.cgi?id=9764 New popup menus
        should have type-ahead selection without popping up menu

        * WebCore.xcodeproj/project.pbxproj: Version wars.
        * html/HTMLSelectElement.h: Add new instance variables for type-ahead
        find.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement): Initialize new
        instance variables.
        (WebCore::HTMLSelectElement::defaultEventHandler): Perform type-ahead
        find on printable character presses.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Remove
        redundant check that the listIndex has changed (setSelectedIndex does
        this for us), and fix indentation.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Change an if
        to an else-if.
        (WebCore::stripLeadingWhiteSpace): Helper function for typeAheadFind()
        to strip leading whitespace (including non-breaking spaces) from a
        string.
        (WebCore::HTMLSelectElement::typeAheadFind): New method to perform
        type-ahead find.
        * platform/PopupMenu.h: Added new updateFromElement() method to be
        called from RenderMenuList::updateFromElement().
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::updateFromElement): While we are using
        NSPopUpButtonCell for our popups, this method can stay empty.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement): Scroll to reveal the first
        selected element.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateFromElement): Tell the popup to update
        if it's visible.

2006-10-26  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11360
          editing/pasteboard/copy-paste-bidi intermittently fails due to disappearance of anonymous RenderBlock

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles):
        Use two vectors instead of a hash map: more efficient, deterministic. There was no
        reason to use a hash table.

2006-10-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - .5% speed improvement by avoiding excess CFURLRef allocation

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::getCFURL): New method. For Mac only (for now), cache the CFURL
        here for later reuse.
        * loader/CachedResource.h:
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus): Use the cached CFURL, don't make a whole new one.

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

        Reviewed by Anders.

        - removed 55 methods from WebCoreFrameBridge
        - changed callers to use Frame directly instead
        - put FrameLoaderTypes.h types into the WebCore namespace
        - first steps to get FrameLoader.h ready for cross-platform duty

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::loadRequest):
        (WebCore::FrameMac::startRedirectionTimer):
        (WebCore::FrameMac::stopRedirectionTimer):
        (WebCore::FrameMac::passSubframeEventToSubframe):
        (WebCore::FrameMac::handledOnloadEvents):
        (WebCore::FrameMac::isLoadTypeReload):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge executionContextForView:]):
        (updateRenderingForBindings):
        (-[WebCoreFrameBridge canTargetLoadInFrame:]):
        (-[WebCoreFrameBridge forceLayoutAdjustingViewSize:]):
        (-[WebCoreFrameBridge forceLayoutWithMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):
        (-[WebCoreFrameBridge installInFrame:]):
        (-[WebCoreFrameBridge numPendingOrLoadingRequests]):
        (-[WebCoreFrameBridge replaceSelectionWithNode:selectReplacement:smartReplace:matchStyle:]):
        (-[WebCoreFrameBridge baseWritingDirectionForSelectionStart]):
        (-[WebCoreFrameBridge dragOperationForDraggingInfo:]):
        (stringByCollapsingNonPrintingCharacters):
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:]):
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:postData:]):
        (-[WebCoreFrameBridge syncLoadResourceWithMethod:URL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        * loader/FrameLoaderTypes.h:
        * loader/mac/FrameLoader.h:
        * loader/mac/FrameLoader.mm:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::setupForReplace):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::activeDocumentLoader):
        (WebCore::FrameLoader::state):
        (WebCore::FrameLoader::setState):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::markLoadComplete):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::handleFallbackContent):
        (WebCore::FrameLoader::isLoadingMainFrame):
        (WebCore::FrameLoader::continueAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        (WebCore::FrameLoader::continueAfterWillSubmitForm):
        (WebCore::FrameLoader::continueLoadRequestAfterNavigationPolicy):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::continueLoadRequestAfterNewWindowPolicy):
        (-[WebCoreFrameLoaderAsDelegate continueAfterNewWindowPolicy:]):
        (-[WebCoreFrameLoaderAsDelegate continueAfterNavigationPolicy:]):
        (-[WebCoreFrameLoaderAsDelegate continueAfterWillSubmitForm:]):
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):
        * loader/mac/WebDocumentLoader.mm:
        (WebCore::DocumentLoader::isLoadingInAPISense):
        * loader/mac/WebMainResourceLoader.h:
        * loader/mac/WebMainResourceLoader.mm:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (-[WebCoreMainResourceLoaderAsPolicyDelegate continueAfterContentPolicy:]):
        * loader/mac/WebSubresourceLoader.mm:
        (-[WebCoreSubresourceHandle initWithLoader:]):
        * platform/mac/ListBoxMac.mm:
        (-[WebCoreTableView keyDown:]):
        (-[WebCoreTableView keyUp:]):
        * platform/mac/WebCoreTextField.mm:
        (-[WebCoreTextFieldController textView:shouldHandleEvent:]):

2006-10-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.

        Printing fixes

        * page/Frame.cpp:
        (WebCore::Frame::adjustPageHeight):
        * page/Frame.h:
        (WebCore::Frame::setupRootForPrinting):
        (WebCore::Frame::computePageRects):

2006-10-25  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4799088>
        REGRESSION: Translation widget fails to convert data and reports a "Data unavailable" error.

        * loader/mac/WebSubresourceLoader.h:
        * loader/mac/WebSubresourceLoader.mm:
        (-[WebCoreSubresourceHandle initWithLoader:]):
        Set the HTTP method before the HTTP body.

2006-10-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam.

        Renamed WebFrameLoader to FrameLoader, to match class name.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * loader/mac/FrameLoader.mm: Added.
        * loader/mac/IconLoaderMac.mm:
        * loader/mac/WebDocumentLoader.mm:
        * loader/mac/WebFrameLoader.h: Removed.
        * loader/mac/WebFrameLoader.mm: Removed.
        * loader/mac/WebLoader.mm:
        * loader/mac/WebMainResourceLoader.mm:
        * loader/mac/WebNetscapePlugInStreamLoader.mm:
        * loader/mac/WebSubresourceLoader.mm:

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

        - fix full builds

        * WebCore.xcodeproj/project.pbxproj: Mark bridge/mac/WebCoreResourceLoader.h as private.

2006-10-25  David Smith  <catfish.man@gmail.com>

        Reviewed by Mitz.

        Fixed REGRESSION (r17280): Repro crash when clicking a link with target="_blank"
        http://bugs.webkit.org/show_bug.cgi?id=11411

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canTargetLoadInFrame:]): Check that the target has a frame before using it.

2006-10-25  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Mitz.

        - moved some files that are essentially part of the ResourceLoader implementation to platform/network/mac

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreResourceLoader.h: Moved to platform/network/mac.
        * bridge/mac/WebCoreResourceLoaderImp.h: Moved to platform/network/mac.
        * bridge/mac/WebCoreResourceLoaderImp.mm: Moved to platform/network/mac.

2006-10-25  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Mark.

        - remove no longer existing symbol that was breaking linking

        * WebCore.exp:

2006-10-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.
        
        - fixed "REGRESSION: Activity window doesn't always list all files until refresh"
        http://bugs.webkit.org/show_bug.cgi?id=11212

        I couldn't figure out how to write a test case.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::clear): Avoid crashing if already detached.
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::clear): Change prototype to make this a proper
        overload for Frame::clear once again(!).

2006-10-24  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - converted WebFrameLoaderClient to C++
        - renamed frame->frameLoader() function to frame->loader()
        - renamed [bridge impl] to [bridge _frame]
        - removed some bridge methods

        * WebCore.exp: Added more exports.
        * WebCore.xcodeproj/project.pbxproj: Made FrameTree.h private instead of project-internal
        so it can be used in WebKit.

        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::createFrame):
        (WebCore::FrameMac::didFirstLayout):
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject rendererForView:]):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge _shouldAllowAccessFrom:]):
        (-[WebCoreFrameBridge canTargetLoadInFrame:]):
        (-[WebCoreFrameBridge setOpener:]):
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        (-[WebCoreFrameBridge setTitle:]):
        (-[WebCoreFrameBridge originalRequestURL]):
        (-[WebCoreFrameBridge isLoadTypeReload]):
        (-[WebCoreFrameBridge frameDetached]):
        (-[WebCoreFrameBridge tokenizerProcessedData]):
        (-[WebCoreFrameBridge receivedData:textEncodingName:]):
        (-[WebCoreFrameBridge objectLoadedFromCacheWithURL:response:data:]):
        (-[WebCoreFrameBridge reportClientRedirectToURL:delay:fireDate:lockHistory:isJavaScriptFormAction:]):
        (-[WebCoreFrameBridge reportClientRedirectCancelled:]):
        (-[WebCoreFrameBridge syncLoadResourceWithMethod:URL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        (-[WebCoreFrameBridge incomingReferrer]):
        (-[WebCoreFrameBridge isReloading]):
        (-[WebCoreFrameBridge handledOnloadEvents]):
        (-[WebCoreFrameBridge mainResourceURLResponse]):
        (-[WebCoreFrameBridge loadEmptyDocumentSynchronously]):
        (-[WebCoreFrameBridge _frame]):
        (-[WebCoreFrameBridge executionContextForView:]):
        * bridge/mac/WebCorePageBridge.mm:
        (-[WebCorePageBridge setMainFrame:]):
        * dom/Position.cpp:
        (WebCore::Position::upstream):
        * loader/mac/IconLoaderMac.mm:
        (IconLoader::notifyIconChanged):
        * loader/mac/WebDocumentLoader.mm:
        (WebCore::DocumentLoader::frameLoader):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        * loader/mac/WebFormState.mm:
        (WebCore::FormState::FormState):
        * loader/mac/WebFrameLoader.h:
        * loader/mac/WebFrameLoader.mm:
        (WebCore::FrameLoader::~FrameLoader):
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::finalSetupForReplace):
        (WebCore::FrameLoader::safeLoad):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::stopLoadingSubframes):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::cancelPendingArchiveLoad):
        (WebCore::FrameLoader::defersCallbacksChanged):
        (WebCore::FrameLoader::setDefersCallbacks):
        (WebCore::FrameLoader::setDocumentLoader):
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::identifierForInitialRequest):
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFinishLoad):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::privateBrowsingEnabled):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::clientRedirectCancelledOrFinished):
        (WebCore::FrameLoader::clientRedirected):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::closeOldDataSources):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::download):
        (WebCore::FrameLoader::finishedLoading):
        (WebCore::FrameLoader::notifyIconChanged):
        (WebCore::FrameLoader::cancelledError):
        (WebCore::FrameLoader::fileDoesNotExistError):
        (WebCore::FrameLoader::willUseArchive):
        (WebCore::FrameLoader::isArchiveLoadPending):
        (WebCore::FrameLoader::handleUnimplementablePolicy):
        (WebCore::FrameLoader::cannotShowMIMEType):
        (WebCore::FrameLoader::interruptionForPolicyChangeError):
        (WebCore::FrameLoader::canShowMIMEType):
        (WebCore::FrameLoader::representationExistsForURLScheme):
        (WebCore::FrameLoader::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::committedLoad):
        (WebCore::FrameLoader::revertToProvisional):
        (WebCore::FrameLoader::setMainDocumentError):
        (WebCore::FrameLoader::mainReceivedCompleteError):
        (WebCore::FrameLoader::subframeIsLoading):
        (WebCore::FrameLoader::willChangeTitle):
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::checkNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNewWindowPolicy):
        (WebCore::FrameLoader::checkNavigationPolicy):
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadRequestAfterNavigationPolicy):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::frameLoadCompleted):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::continueLoadRequestAfterNewWindowPolicy):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::detachChildren):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::actionInformation):
        (WebCore::FrameLoader::checkLoadComplete):
        (WebCore::FrameLoader::setClient):
        (WebCore::FrameLoader::client):
        (WebCore::FrameLoaderClient::~FrameLoaderClient):
        * loader/mac/WebFrameLoaderClient.h:
        * loader/mac/WebLoader.mm:
        (WebCore::WebResourceLoader::frameLoader):
        * loader/mac/WebSubresourceLoader.mm:
        (-[WebCoreSubresourceHandle initWithLoader:]):
        * page/Frame.cpp:
        (WebCore::Frame::loader):
        * page/Frame.h:
        * platform/mac/SliderMac.mm:
        (Slider::focusPolicy):

2006-10-24  Darin Adler  <darin@apple.com>

        Rubber stamped by Anders.

        - get rid of the assertion firing while running the layout tests

        This does not fix the real problem, which is that we need to map offsets within
        possibly-text-transformed text in the render tree to DOM tree offsets and vice
        versa -- but it gets the tests running again.

        * dom/Position.cpp: (WebCore::Position::upstream): Commented out the assertion.

2006-10-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - more ResourceLoader cleanup
            - moved HTTPHeaderMap out of ResourceRequest class, so ResourceResponse will be able to use it too
            - took out attempts to suppress setting of "HEAD" and "GET" methods, since underlying bugs are now fixed
        
        * loader/LoaderFunctions.h:
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::ServeSynchronousRequest):
        * loader/mac/WebSubresourceLoader.mm:
        (-[WebCoreSubresourceHandle initWithLoader:]):
        * platform/network/HTTPHeaderMap.h: Added.
        * platform/network/ResourceLoader.cpp:
        (WebCore::ResourceLoader::requestHeaders):
        * platform/network/ResourceLoader.h:
        * platform/network/ResourceRequest.h:
        * platform/network/cf/ResourceLoaderCFNet.cpp:
        (WebCore::addHeadersFromHashMap):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/xmlhttprequest.h:

2006-10-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <http://bugs.webkit.org/show_bug.cgi?id=10993>
        GMail Editor: Caret doesn't always position itself after list marker
        
        List creation uses moveParagraphs to push content into list items.  
        moveParagraphs uses a TextIterator to restore selections after moves.
        Some characters emitted by the TextIterator had bad ranges associated
        with them.  rangeFromLocationAndLength would skip past the range it
        should have used when asked for ranges of length 0.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): No longer need to initialize a
        removed member variable.
        (WebCore::TextIterator::advance): An extra newline is emitted when leaving
        some blocks.  Use the same range for this newline as for the first newline.
        We should remove this code and just emit two '\n's.
        (WebCore::TextIterator::handleTextNode): Setup m_range.
        (WebCore::TextIterator::handleTextBox): Ditto.
        (WebCore::TextIterator::handleReplacedElement): Ditto.
        (WebCore::TextIterator::handleNonTextNode): Ditto.
        (WebCore::TextIterator::exitNode): Use an m_range from the last VisiblePosition
        in the block we're leaving to that VP after that one.
        (WebCore::TextIterator::emitCharacter): This function now takes in the start
        and the end of the range associated with the emited character, and sets up m_range.
        (WebCore::TextIterator::range): Return m_range.  If it is null (we are atEnd), 
        return the end of the range used to create the iterator, as a convenience to
        callers that use call range() on an iterator that is atEnd.
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        Same as the changes made to TextIterator's constructor.
        (WebCore::SimplifiedBackwardsTextIterator::advance): Use a null m_range instead of
        a null m_positionNode to signal that we're finished.
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::handleReplacedElement): Similar to changes
        made to TextIterator.
        (WebCore::SimplifiedBackwardsTextIterator::emitCharacter): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::emitNewline): Simplified.
        (WebCore::SimplifiedBackwardsTextIterator::range): Similar to the changes made to
        TextIterator::range.
        (WebCore::CharacterIterator::range): This function assumed that an iterator's
        range() was safe to modify.
        (WebCore::TextIterator::rangeFromLocationAndLength):
        If the range we're looking for starts in the current chunk, this function assumed
        that if the chunk started in a text node, it would end in the same text node.  This
        is no longer the case.
        If the range we're looking for starts in the middle of the current chunk, I assume
        that the chunk is inside a text node, because those are the only chunks with length
        greater than one at the moment.
        If the range we're looking for is a zero length range that starts/ends at the end of the
        current chunk, we used to return the start of the next chunk, but that's wrong and
        is what caused this bug.
        * editing/TextIterator.h:
        (WebCore::TextIterator::atEnd): The iterator is atEnd when m_range is null.
        (WebCore::SimplifiedBackwardsTextIterator::atEnd):
        * editing/visible_units.cpp:
        (WebCore::previousBoundary): Cleaned up by using a convenience function.
        (WebCore::nextBoundary): Ditto.

2006-10-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        * platform/network/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::start):
        Don't retain the header dictionary.

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=11404
        REGRESSION: Reproducible assertion failure in Shared<WebCore::StringImpl>::ref() 
        running svg/custom/svg/custom/gradient-attr-update.svg
        
        SVGRenderStyle wasn't ref-ing the shared objects it held onto. Oops.

        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.h:

2006-10-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Mitz.

        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        Set the http method to "GET" in the constructor that takes a String.

2006-10-24  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Move kcanvas/Render* and kcanvas/SVG* to rendering/Render*
        and rendering/SVG* respectively.  Fix Xcode project and
        CMakeLists.txt to account for the moves.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/RenderForeignObject.cpp: Removed.
        * kcanvas/RenderForeignObject.h: Removed.
        * kcanvas/RenderPath.cpp: Removed.
        * kcanvas/RenderPath.h: Removed.
        * kcanvas/RenderSVGContainer.cpp: Removed.
        * kcanvas/RenderSVGContainer.h: Removed.
        * kcanvas/RenderSVGImage.cpp: Removed.
        * kcanvas/RenderSVGImage.h: Removed.
        * kcanvas/RenderSVGInline.cpp: Removed.
        * kcanvas/RenderSVGInline.h: Removed.
        * kcanvas/RenderSVGInlineText.cpp: Removed.
        * kcanvas/RenderSVGInlineText.h: Removed.
        * kcanvas/RenderSVGTSpan.cpp: Removed.
        * kcanvas/RenderSVGTSpan.h: Removed.
        * kcanvas/RenderSVGText.cpp: Removed.
        * kcanvas/RenderSVGText.h: Removed.
        * kcanvas/SVGInlineFlowBox.cpp: Removed.
        * kcanvas/SVGInlineFlowBox.h: Removed.
        * kcanvas/SVGRootInlineBox.cpp: Removed.
        * kcanvas/SVGRootInlineBox.h: Removed.

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Rolling back in, now fixed:
        
        Nixed a few more redundant loading functions in Frame. Did my best to update
        the non-Mac builds.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::urlSelected): Kept always 'true' argument for userGesture
        always 'true', because changing it broke the world, and testing seems to
        indicate that the one caller that might have passed 'false' didn't need to.
        * page/Frame.cpp:
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::frameLoader):
        (WebCore::Frame::redirectionTimerFired):
        * page/Frame.h:
        * platform/gdk/FrameGdk.cpp:
        * platform/gdk/FrameGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameGdk::issueCopyCommand):
        * platform/qt/FrameQt.cpp:
        * platform/qt/FrameQt.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::FrameWin::shouldInterruptJavaScript):
        (WebCore::FrameWin::issueCopyCommand):

2006-10-24  Anders Carlsson  <acarlsson@apple.com>

        Fix the build (Update for changes to ResourceLoader)
        
        * platform/network/cf/ResourceLoaderCFNet.cpp:
        (WebCore::addHeadersFromHashMap):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::cancel):

2006-10-24  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Mitz.

        Change #includes using <kcanvas/*.h> to use "*.h" instead
        to prepare for moving the kcanvas files.

        * kcanvas/RenderSVGContainer.h:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFETileElement.cpp:
        * ksvg2/svg/SVGStyledLocatableElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:

2006-10-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - More movement towards the final network API.
        
        Changed ResourceLoader::create to take a ResurceRequest and start
        the load. Removed methods relating to setting request
        headers. Removed methods relating to metaData. Added some more
        convenience methods to ResourceRequest.

        * dom/XMLTokenizer.cpp:
        (WebCore::openFunc):
        * loader/LoaderFunctions.h:
        * loader/icon/IconLoader.cpp:
        (IconLoader::startLoading):
        (IconLoader::didFinishLoading):
        * loader/icon/IconLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::ServeSynchronousRequest):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdkClientDefault::openURL):
        (WebCore::FrameGdkClientDefault::submitForm):
        * platform/network/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::create):
        (WebCore::ResourceLoader::responseHTTPHeadersAsString):
        (WebCore::ResourceLoader::url):
        (WebCore::ResourceLoader::postData):
        (WebCore::ResourceLoader::method):
        (WebCore::ResourceLoader::client):
        * platform/network/ResourceLoader.h:
        * platform/network/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::httpAccept):
        (WebCore::ResourceRequest::setHTTPAccept):
        (WebCore::ResourceRequest::addHTTPHeaderFields):
        * platform/network/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::receivedResponse):
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::openURL):
        (WebCore::FrameQtClientDefault::submitForm):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ResourceLoader::retrieveResponseEncoding):
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/xmlhttprequest.h:

2006-10-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * loader/FormData.cpp:
        (WebCore::FormData::FormData):
        * loader/FormData.h:
        (WebCore::FormData::FormData):
        Add new constructor that takes a void* and a size.

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Rolling out my last change because it broke the world.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::openURL):
        (WebCore::FrameMac::openURLRequest):
        (WebCore::FrameMac::urlSelected):
        * page/Frame.cpp:
        (WebCore::Frame::openURL):
        (WebCore::Frame::frameLoader):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::redirectionTimerFired):
        * page/Frame.h:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::openURL):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::openURL):
        (WebCore::FrameQt::openURLRequest):
        * platform/qt/FrameQt.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::FrameWin::openURL):
        (WebCore::FrameWin::openURLRequest):

2006-10-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Adam.

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

        Kill KRenderingFillPainter/KRenderingStrokePainter. Those are not needed
        anymore, since kcanvas/ksvg2 are tightly integrated. No LayoutTests fixed
        or broken.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasTreeDebug.cpp:
        (WebCore::operator<<):
        (WebCore::writeStyle):
        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::fillContains):
        * kcanvas/device/KRenderingFillPainter.cpp:
        * kcanvas/device/KRenderingFillPainter.h:
        * kcanvas/device/KRenderingStrokePainter.cpp:
        * kcanvas/device/KRenderingStrokePainter.h:
        * kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp:
        (WebCore::KRenderingPaintServerLinearGradientQt::setup):
        (WebCore::KRenderingPaintServerRadialGradientQt::setup):
        * kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp:
        * kcanvas/device/qt/KRenderingPaintServerQt.cpp:
        (WebCore::KRenderingPaintServerQt::setPenProperties):
        * kcanvas/device/qt/KRenderingPaintServerQt.h:
        * kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp:
        (WebCore::KRenderingPaintServerSolidQt::setup):
        * kcanvas/device/qt/RenderPathQt.cpp:
        (WebCore::getPathStroke):
        (WebCore::RenderPath::strokeBBox):
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (WebCore::RenderPath::strokeBBox):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (WebCore::KRenderingPaintServerQuartzHelper::fillPath):
        (WebCore::KRenderingPaintServerQuartzHelper::clipToFillPath):
        * kcanvas/device/quartz/QuartzSupport.h:
        (WebCore::CGLineCapFromKC):
        (WebCore::CGLineJoinFromKC):
        * kcanvas/device/quartz/QuartzSupport.mm:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::strokeBoundingBox):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::):
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::dashArrayFromRenderingStyle):
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/svg/SVGFEImageElement.cpp:

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.

        Nixed a few more redundant loading functions in Frame. Did my best to update
        the non-Mac builds.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::urlSelected): Changed always 'true' argument for userGesture
        to actually check for a user gesture. New callers rely on this behavior,
        and it seems like the previous behavior must have been a bug.
        * page/Frame.cpp:
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::frameLoader):
        (WebCore::Frame::redirectionTimerFired):
        * page/Frame.h:
        * platform/gdk/FrameGdk.cpp:
        * platform/gdk/FrameGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameGdk::issueCopyCommand):
        * platform/qt/FrameQt.cpp:
        * platform/qt/FrameQt.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::FrameWin::shouldInterruptJavaScript):
        (WebCore::FrameWin::issueCopyCommand):

2006-10-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix Qt/Linux build.

        - Remove BrowserExtensionQt, move it's methods to Page/FrameQt.
        - Fix CMakeLists.txt to include platform/network.

        * CMakeLists.txt:
        * platform/qt/BrowserExtensionQt.cpp: Removed.
        * platform/qt/BrowserExtensionQt.h: Removed.
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::createNewWindow):
        (WebCore::FrameQt::goBackOrForward):
        (WebCore::FrameQt::historyURL):
        (WebCore::FrameQt::getHistoryLength):
        * platform/qt/FrameQt.h:
        * platform/qt/PageQt.cpp:
        (WebCore::Page::canRunModal):
        (WebCore::Page::canRunModalNow):
        (WebCore::Page::runModal):

2006-10-24  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Tim H.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11314
        Fix build when XSLT_SUPPORT is not defined

        Fix unconditional use of XSLT support.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::end):

2006-10-24  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Darin.

        * CMakeLists.txt: Added project name to kde4_automoc macro, as
          required by the latest KDE4 cmake module.

2006-10-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Tim H.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11394
          HTMLViewSourceDocuments are leaking

        * html/HTMLViewSourceDocument.h: Changed RefPtr to plain pointer to avoid
        ref cycle.

2006-10-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Removed one of Frame's redundant urlSelected methods.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::urlSelected):
        since it's unused.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler): Changed DeprecatedString
        to String because the former is deprecated and its performance is irrelevant
        here. Added call to completeURL because Frame no longer does it for us.
        Having the call here also improves clarity about the element's behavior.
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): ditto. Also removed bizarre
        irrelevent NULL checks on ownerDocument() because I couldn't help myself.
        * page/Frame.cpp:
        (WebCore::Frame::changeLocation):
        (WebCore::Frame::urlSelected):
        * page/Frame.h:
        * platform/network/ResourceRequest.h: Removed explicit keyword on constructor
        because we want to be able to use these constructors instead of helper functions
        mimicking their behavior sprinkled across different classes.
        (WebCore::ResourceRequest::ResourceRequest):

2006-10-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Moved FrameLoader from WebCoreFrameBridge to Frame.  Frame.h/cpp have generic accessors to the FrameLoader itself
        and creation/deletion is currently managed in FrameMac.mm

        Besides explicitly commented-upon methods, most of the touched code simply changes to get the FrameLoader from the 
        frame instead of the bridge.

        The method [WebCoreFrameBridge frameLoader] remains but only for WebKit's use - No new WebCore code should make 
        use of it as its days are numbered!

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::FrameMac): Create the FrameLoader
        (WebCore::FrameMac::~FrameMac): Nuke it
        (WebCore::FrameMac::loadRequest):

        * bridge/mac/WebCoreFrameBridge.h: No longer holds an m_frameLoader
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge initMainFrameWithPage:withEditorClient:]): No longer creates the FrameLoader
        (-[WebCoreFrameBridge initSubframeWithOwnerElement:withEditorClient:]): Ditto
        (-[WebCoreFrameBridge clearFrame]): No longer tears down the FrameLoader
        (-[WebCoreFrameBridge setFrameLoaderClient:]):
        (-[WebCoreFrameBridge frameLoader]):
        (-[WebCoreFrameBridge setTitle:]):
        (-[WebCoreFrameBridge didFirstLayout]):
        (-[WebCoreFrameBridge notifyIconChanged:]):
        (-[WebCoreFrameBridge originalRequestURL]):
        (-[WebCoreFrameBridge isLoadTypeReload]):
        (-[WebCoreFrameBridge frameDetached]):
        (-[WebCoreFrameBridge tokenizerProcessedData]):
        (-[WebCoreFrameBridge receivedData:textEncodingName:]):
        (-[WebCoreFrameBridge objectLoadedFromCacheWithURL:response:data:]):
        (-[WebCoreFrameBridge reportClientRedirectToURL:delay:fireDate:lockHistory:isJavaScriptFormAction:]):
        (-[WebCoreFrameBridge reportClientRedirectCancelled:]):
        (-[WebCoreFrameBridge syncLoadResourceWithMethod:URL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        (-[WebCoreFrameBridge incomingReferrer]):
        (-[WebCoreFrameBridge isReloading]):
        (-[WebCoreFrameBridge handledOnloadEvents]):
        (-[WebCoreFrameBridge mainResourceURLResponse]):
        (-[WebCoreFrameBridge loadEmptyDocumentSynchronously]):

        * loader/mac/WebDocumentLoader.mm:
        (WebCore::DocumentLoader::frameLoader):

        * loader/mac/WebFrameLoader.mm:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::stopLoadingSubframes):
        (WebCore::FrameLoader::defersCallbacksChanged):
        (WebCore::FrameLoader::setState):
        (WebCore::FrameLoader::closeOldDataSources):
        (WebCore::FrameLoader::subframeIsLoading):
        (WebCore::FrameLoader::continueLoadRequestAfterNewWindowPolicy):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::detachChildren):
        (WebCore::FrameLoader::checkLoadComplete):

        * loader/mac/WebLoader.mm:
        (WebCore::WebResourceLoader::frameLoader):

        * loader/mac/WebSubresourceLoader.mm:
        (-[WebCoreSubresourceHandle initWithLoader:]):

        * page/Frame.cpp:
        (WebCore::Frame::frameLoader):
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):

2006-10-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed two crashes in layout tests I just introduced

        * loader/mac/WebFrameLoader.mm:
        (WebCore::FrameLoader::load): Add null check.
        (WebCore::FrameLoader::setState): Ditto.

2006-10-23  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - converted WebDocumentLoader to C++

        * WebCore.exp:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setTitle:]):
        (-[WebCoreFrameBridge originalRequestURL]):
        (-[WebCoreFrameBridge receivedData:textEncodingName:]):
        (-[WebCoreFrameBridge syncLoadResourceWithMethod:URL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        (-[WebCoreFrameBridge incomingReferrer]):
        (-[WebCoreFrameBridge isReloading]):
        (-[WebCoreFrameBridge mainResourceURLResponse]):
        * loader/mac/WebDocumentLoader.h:
        * loader/mac/WebDocumentLoader.mm:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::frameLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::setMainResourceData):
        (WebCore::DocumentLoader::mainResourceData):
        (WebCore::DocumentLoader::originalRequest):
        (WebCore::DocumentLoader::originalRequestCopy):
        (WebCore::DocumentLoader::request):
        (WebCore::DocumentLoader::initialRequest):
        (WebCore::DocumentLoader::actualRequest):
        (WebCore::DocumentLoader::URL):
        (WebCore::DocumentLoader::unreachableURL):
        (WebCore::DocumentLoader::replaceRequestURLForAnchorScroll):
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::setResponse):
        (WebCore::DocumentLoader::isStopping):
        (WebCore::DocumentLoader::bridge):
        (WebCore::DocumentLoader::setMainDocumentError):
        (WebCore::DocumentLoader::mainDocumentError):
        (WebCore::DocumentLoader::clearErrors):
        (WebCore::DocumentLoader::mainReceivedError):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::setupForReplace):
        (WebCore::DocumentLoader::commitIfReady):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setCommitted):
        (WebCore::DocumentLoader::isCommitted):
        (WebCore::DocumentLoader::setLoading):
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::commitLoad):
        (WebCore::DocumentLoader::doesProgressiveLoad):
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::updateLoading):
        (WebCore::DocumentLoader::response):
        (WebCore::DocumentLoader::setFrame):
        (WebCore::DocumentLoader::attachToFrame):
        (WebCore::DocumentLoader::detachFromFrame):
        (WebCore::DocumentLoader::prepareForLoadStart):
        (WebCore::DocumentLoader::loadingStartedTime):
        (WebCore::DocumentLoader::setIsClientRedirect):
        (WebCore::DocumentLoader::isClientRedirect):
        (WebCore::DocumentLoader::setPrimaryLoadComplete):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::addResponse):
        (WebCore::DocumentLoader::stopRecordingResponses):
        (WebCore::DocumentLoader::title):
        (WebCore::DocumentLoader::setLastCheckedRequest):
        (WebCore::DocumentLoader::lastCheckedRequest):
        (WebCore::DocumentLoader::triggeringAction):
        (WebCore::DocumentLoader::setTriggeringAction):
        (WebCore::DocumentLoader::responses):
        (WebCore::DocumentLoader::setOverrideEncoding):
        (WebCore::DocumentLoader::overrideEncoding):
        (WebCore::DocumentLoader::setTitle):
        (WebCore::DocumentLoader::URLForHistory):
        * loader/mac/WebFrameLoader.h:
        * loader/mac/WebFrameLoader.mm:
        (WebCore::FrameLoader::setupForReplaceByMIMEType):
        (WebCore::FrameLoader::finalSetupForReplace):
        (WebCore::FrameLoader::safeLoad):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::activeDocumentLoader):
        (WebCore::FrameLoader::addPlugInStreamLoader):
        (WebCore::FrameLoader::removePlugInStreamLoader):
        (WebCore::FrameLoader::addSubresourceLoader):
        (WebCore::FrameLoader::removeSubresourceLoader):
        (WebCore::FrameLoader::setDocumentLoader):
        (WebCore::FrameLoader::documentLoader):
        (WebCore::FrameLoader::setPolicyDocumentLoader):
        (WebCore::FrameLoader::provisionalDocumentLoader):
        (WebCore::FrameLoader::setProvisionalDocumentLoader):
        (WebCore::FrameLoader::setState):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::originalRequest):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::initialRequest):
        (WebCore::FrameLoader::receivedData):
        (WebCore::FrameLoader::setRequest):
        (WebCore::FrameLoader::isStopping):
        (WebCore::FrameLoader::setResponse):
        (WebCore::FrameLoader::mainReceivedError):
        (WebCore::FrameLoader::finishedLoading):
        (WebCore::FrameLoader::notifyIconChanged):
        (WebCore::FrameLoader::URL):
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::committedLoad):
        (WebCore::FrameLoader::revertToProvisional):
        (WebCore::FrameLoader::setMainDocumentError):
        (WebCore::FrameLoader::mainReceivedCompleteError):
        (WebCore::FrameLoader::subframeIsLoading):
        (WebCore::FrameLoader::willChangeTitle):
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::checkNavigationPolicy):
        (WebCore::FrameLoader::continueLoadRequestAfterNavigationPolicy):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::detachFromParent):
        * loader/mac/WebFrameLoaderClient.h:

2006-10-23  Brady Eidson  <beidson@apple.com>

        Lovingly reviewed by Maciej

        Moved loadURL and postURL logic out of WebCoreFrameBridge to FrameMac::loadRequest
        This is a big step towards moving FrameLoader out of the Bridge into Frame/Mac itself

        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow): Use FrameMac::loadRequest

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::loadRequest): loadURL and postURL logic moved from WebCoreFrameBridge to here

        * bridge/mac/WebCoreFrameBridge.h: Nuked loadURL and postURL
        * bridge/mac/WebCoreFrameBridge.mm: Ditto
        * loader/mac/WebFrameLoader.mm:
        (-[WebFrameLoader safeLoadURL:]): Use FrameMac::loadRequest

2006-10-23  Geoffrey Garen  <ggaren@apple.com>

        RS by Maciej.

        Inside Frame, moved the plethora of load() and stopLoading() functions next 
        to each other to facilitate merging and crying.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::loadRequest):
        (WebCore::FrameMac::submitForm):
        (WebCore::FrameMac::openURL):
        (WebCore::FrameMac::openURLRequest):
        (WebCore::FrameMac::urlSelected):
        (WebCore::FrameMac::openURLFromPageCache):
        (WebCore::FrameMac::createFrame):
        * page/Frame.cpp:
        (WebCore::Frame::openURL):
        (WebCore::Frame::changeLocation):
        (WebCore::Frame::urlSelected):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::loadSubframe):
        (WebCore::Frame::submitFormAgain):
        (WebCore::Frame::submitForm):
        (WebCore::Frame::stop):
        (WebCore::Frame::closeURL):
        (WebCore::Frame::cancelRedirection):
        (WebCore::Frame::iconURL):
        (WebCore::Frame::didOpenURL):
        (WebCore::Frame::didExplicitOpen):
        * page/Frame.h:

2006-10-23  Geoffrey Garen  <ggaren@apple.com>

        RS by Maciej.

        Moved our plethora of load() and stopLoading() functions next to each other
        to facilitate merging and laughter.

        * loader/mac/WebFrameLoader.h:
        * loader/mac/WebFrameLoader.mm:
        (WebCore::cancelAll):
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::setupForReplace):
        (WebCore::FrameLoader::setupForReplaceByMIMEType):
        (WebCore::FrameLoader::finalSetupForReplace):
        (WebCore::FrameLoader::safeLoad):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::startLoadingMainResource):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::stopLoadingPlugIns):
        (WebCore::FrameLoader::stopLoadingSubresources):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::stopLoadingSubframes):
        (WebCore::FrameLoader::cancelMainResourceLoad):
        (WebCore::FrameLoader::cancelPendingArchiveLoad):
        (WebCore::FrameLoader::removeSubresourceLoader):
        (WebCore::FrameLoader::mainResourceData):
        (WebCore::FrameLoader::releaseMainResourceLoader):

2006-10-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - converted WebFrameLoader to C++

        * WebCore.exp: Added many new entry points for WebKit.
        * WebCore.xcodeproj/project.pbxproj: Made more files private (SPI).

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge initMainFrameWithPage:withEditorClient:]):
        (-[WebCoreFrameBridge initSubframeWithOwnerElement:withEditorClient:]):
        (-[WebCoreFrameBridge dealloc]):
        (-[WebCoreFrameBridge close]):
        (-[WebCoreFrameBridge clearFrame]):
        (-[WebCoreFrameBridge setFrameLoaderClient:]):
        (-[WebCoreFrameBridge frameLoader]):
        (-[WebCoreFrameBridge setTitle:]):
        (-[WebCoreFrameBridge didFirstLayout]):
        (-[WebCoreFrameBridge notifyIconChanged:]):
        (-[WebCoreFrameBridge originalRequestURL]):
        (-[WebCoreFrameBridge isLoadTypeReload]):
        (-[WebCoreFrameBridge frameDetached]):
        (-[WebCoreFrameBridge tokenizerProcessedData]):
        (-[WebCoreFrameBridge receivedData:textEncodingName:]):
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:]):
        (-[WebCoreFrameBridge objectLoadedFromCacheWithURL:response:data:]):
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:postData:]):
        (-[WebCoreFrameBridge reportClientRedirectToURL:delay:fireDate:lockHistory:isJavaScriptFormAction:]):
        (-[WebCoreFrameBridge reportClientRedirectCancelled:]):
        (-[WebCoreFrameBridge loadURL:referrer:reload:userGesture:target:triggeringEvent:form:formValues:]):
        (-[WebCoreFrameBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        (-[WebCoreFrameBridge syncLoadResourceWithMethod:URL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        (-[WebCoreFrameBridge incomingReferrer]):
        (-[WebCoreFrameBridge isReloading]):
        (-[WebCoreFrameBridge handledOnloadEvents]):
        (-[WebCoreFrameBridge mainResourceURLResponse]):
        (-[WebCoreFrameBridge loadEmptyDocumentSynchronously]):
        * loader/mac/WebDocumentLoader.h:
        * loader/mac/WebDocumentLoader.mm:
        (-[WebDocumentLoader frameLoader]):
        (-[WebDocumentLoader dealloc]):
        (-[WebDocumentLoader mainResourceData]):
        (-[WebDocumentLoader setRequest:]):
        (-[WebDocumentLoader bridge]):
        (-[WebDocumentLoader setMainDocumentError:]):
        (-[WebDocumentLoader mainReceivedError:complete:]):
        (-[WebDocumentLoader stopLoading]):
        (-[WebDocumentLoader setupForReplace]):
        (-[WebDocumentLoader commitIfReady]):
        (-[WebDocumentLoader finishedLoading]):
        (-[WebDocumentLoader commitLoadWithData:]):
        (-[WebDocumentLoader doesProgressiveLoadWithMIMEType:]):
        (-[WebDocumentLoader setupForReplaceByMIMEType:]):
        (-[WebDocumentLoader updateLoading]):
        (-[WebDocumentLoader setFrame:]):
        (-[WebDocumentLoader attachToFrame]):
        (-[WebDocumentLoader detachFromFrame]):
        (-[WebDocumentLoader prepareForLoadStart]):
        (-[WebDocumentLoader setPrimaryLoadComplete:]):
        (-[WebDocumentLoader isLoadingInAPISense]):
        (-[WebDocumentLoader setTitle:]):
        * loader/mac/WebFrameLoader.h:
        (WebCore::FrameLoader::frame):
        * loader/mac/WebFrameLoader.mm:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::~FrameLoader):
        (WebCore::FrameLoader::activeDocumentLoader):
        (WebCore::FrameLoader::addPlugInStreamLoader):
        (WebCore::FrameLoader::removePlugInStreamLoader):
        (WebCore::FrameLoader::defersCallbacksChanged):
        (WebCore::FrameLoader::defersCallbacks):
        (WebCore::setAllDefersCallbacks):
        (WebCore::FrameLoader::setDefersCallbacks):
        (WebCore::cancelAll):
        (WebCore::FrameLoader::stopLoadingPlugIns):
        (WebCore::FrameLoader::isLoadingMainResource):
        (WebCore::FrameLoader::isLoadingSubresources):
        (WebCore::FrameLoader::isLoadingPlugIns):
        (WebCore::FrameLoader::isLoading):
        (WebCore::FrameLoader::stopLoadingSubresources):
        (WebCore::FrameLoader::addSubresourceLoader):
        (WebCore::FrameLoader::removeSubresourceLoader):
        (WebCore::FrameLoader::mainResourceData):
        (WebCore::FrameLoader::releaseMainResourceLoader):
        (WebCore::FrameLoader::cancelMainResourceLoad):
        (WebCore::FrameLoader::startLoadingMainResource):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::setDocumentLoader):
        (WebCore::FrameLoader::documentLoader):
        (WebCore::FrameLoader::setPolicyDocumentLoader):
        (WebCore::FrameLoader::provisionalDocumentLoader):
        (WebCore::FrameLoader::setProvisionalDocumentLoader):
        (WebCore::FrameLoader::state):
        (WebCore::FrameLoader::timeOfLastCompletedLoad):
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::setState):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::markLoadComplete):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::stopLoadingSubframes):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::setupForReplace):
        (WebCore::FrameLoader::identifierForInitialRequest):
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFinishLoad):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::privateBrowsingEnabled):
        (WebCore::FrameLoader::originalRequest):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::clientRedirectCancelledOrFinished):
        (WebCore::FrameLoader::clientRedirected):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::closeOldDataSources):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::initialRequest):
        (WebCore::FrameLoader::receivedData):
        (WebCore::FrameLoader::setRequest):
        (WebCore::FrameLoader::download):
        (WebCore::FrameLoader::bridge):
        (WebCore::FrameLoader::handleFallbackContent):
        (WebCore::FrameLoader::isStopping):
        (WebCore::FrameLoader::setupForReplaceByMIMEType):
        (WebCore::FrameLoader::setResponse):
        (WebCore::FrameLoader::mainReceivedError):
        (WebCore::FrameLoader::finishedLoading):
        (WebCore::FrameLoader::notifyIconChanged):
        (WebCore::FrameLoader::URL):
        (WebCore::FrameLoader::cancelledError):
        (WebCore::FrameLoader::fileDoesNotExistError):
        (WebCore::FrameLoader::willUseArchive):
        (WebCore::FrameLoader::isArchiveLoadPending):
        (WebCore::FrameLoader::cancelPendingArchiveLoad):
        (WebCore::FrameLoader::handleUnimplementablePolicy):
        (WebCore::FrameLoader::cannotShowMIMEType):
        (WebCore::FrameLoader::interruptionForPolicyChangeError):
        (WebCore::FrameLoader::isHostedByObjectElement):
        (WebCore::FrameLoader::isLoadingMainFrame):
        (WebCore::FrameLoader::canShowMIMEType):
        (WebCore::FrameLoader::representationExistsForURLScheme):
        (WebCore::FrameLoader::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoader::checkNavigationPolicy):
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::cancelContentPolicyCheck):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::committedLoad):
        (WebCore::FrameLoader::isReplacing):
        (WebCore::FrameLoader::setReplacing):
        (WebCore::FrameLoader::revertToProvisional):
        (WebCore::FrameLoader::setMainDocumentError):
        (WebCore::FrameLoader::mainReceivedCompleteError):
        (WebCore::FrameLoader::finalSetupForReplace):
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::subframeIsLoading):
        (WebCore::FrameLoader::willChangeTitle):
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::loadType):
        (WebCore::FrameLoader::invalidatePendingPolicyDecision):
        (WebCore::FrameLoader::checkNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        (WebCore::FrameLoader::continueAfterWillSubmitForm):
        (WebCore::FrameLoader::continueLoadRequestAfterNavigationPolicy):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::frameLoadCompleted):
        (WebCore::FrameLoader::firstLayoutDone):
        (WebCore::FrameLoader::isQuickRedirectComing):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::continueLoadRequestAfterNewWindowPolicy):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::detachChildren):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::safeLoad):
        (WebCore::FrameLoader::actionInformation):
        (WebCore::FrameLoader::checkLoadComplete):
        (WebCore::FrameLoader::setFrameLoaderClient):
        (WebCore::FrameLoader::client):
        (WebCore::FrameLoader::asDelegate):
        (-[WebCoreFrameLoaderAsDelegate initWithLoader:]):
        (-[WebCoreFrameLoaderAsDelegate detachFromLoader]):
        (-[WebCoreFrameLoaderAsDelegate continueFragmentScrollAfterNavigationPolicy:formState:]):
        (-[WebCoreFrameLoaderAsDelegate continueAfterNewWindowPolicy:]):
        (-[WebCoreFrameLoaderAsDelegate continueAfterNavigationPolicy:]):
        (-[WebCoreFrameLoaderAsDelegate continueAfterWillSubmitForm:]):
        (-[WebCoreFrameLoaderAsDelegate continueLoadRequestAfterNavigationPolicy:formState:]):
        (-[WebCoreFrameLoaderAsDelegate continueLoadRequestAfterNewWindowPolicy:frameName:formState:]):
        * loader/mac/WebLoader.h:
        (WebCore::WebResourceLoader::identifier):
        (WebCore::WebResourceLoader::reachedTerminalState):
        (WebCore::WebResourceLoader::cancelled):
        * loader/mac/WebLoader.mm:
        (WebCore::WebResourceLoader::WebResourceLoader):
        (WebCore::WebResourceLoader::releaseResources):
        (WebCore::WebResourceLoader::load):
        (WebCore::WebResourceLoader::frameLoader):
        (WebCore::WebResourceLoader::willSendRequest):
        (WebCore::WebResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::WebResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::WebResourceLoader::didReceiveResponse):
        (WebCore::WebResourceLoader::didReceiveData):
        (WebCore::WebResourceLoader::didFinishLoading):
        (WebCore::WebResourceLoader::didFinishLoadingOnePart):
        (WebCore::WebResourceLoader::didFail):
        (WebCore::WebResourceLoader::willCacheResponse):
        (WebCore::WebResourceLoader::didCancel):
        (WebCore::WebResourceLoader::cancel):
        (WebCore::WebResourceLoader::cancelledError):
        (WebCore::WebResourceLoader::delegate):
        * loader/mac/WebMainResourceLoader.h:
        * loader/mac/WebMainResourceLoader.mm:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::create):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::interruptionForPolicyChangeError):
        (WebCore::MainResourceLoader::isPostOrRedirectAfterPost):
        (WebCore::MainResourceLoader::addData):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::policyDelegate):
        * loader/mac/WebNetscapePlugInStreamLoader.h:
        * loader/mac/WebNetscapePlugInStreamLoader.mm:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        (WebCore::NetscapePlugInStreamLoader::create):
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        (WebCore::NetscapePlugInStreamLoader::didFail):
        (WebCore::NetscapePlugInStreamLoader::didCancel):
        * loader/mac/WebSubresourceLoader.h:
        * loader/mac/WebSubresourceLoader.mm:
        (-[WebCoreSubresourceHandle initWithLoader:]):

2006-10-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Bradee.

        Shrunk BrowserExtension in preparation for its imminent death, moving page-
        level operations to Page and frame-level operations to Frame.
        
        Removed bizarre Mac(this) syntax inside virtual FrameMac member functions, 
        because 'this' is guaranteed by the compiler to be a FrameMac*.
        
        * bindings/js/kjs_window.cpp: Added NULL checks for m_frame in places
        where it can be NULL.
        * bindings/js/kjs_window.cpp:
        (KJS::canShowModalDialog):
        (KJS::canShowModalDialogNow):
        (KJS::showModalDialog):
        (KJS::History::getValueProperty):
        (KJS::HistoryFunc::callAsFunction):
        * bridge/BrowserExtension.h:
        (WebCore::BrowserExtension::~BrowserExtension):
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::frameDetached):
        (WebCore::FrameMac::unfocusWindow):
        (WebCore::FrameMac::bridgeForWidget):
        (WebCore::FrameMac::documentViewForNode):
        (WebCore::FrameMac::passSubframeEventToSubframe):
        (WebCore::Frame::setNeedsReapplyStyles):
        (WebCore::FrameMac::customHighlightLineRect):
        (WebCore::FrameMac::paintCustomHighlight):
        (WebCore::FrameMac::getHistoryLength):
        (WebCore::FrameMac::goBackOrForward):
        (WebCore::FrameMac::historyURL):
        * bridge/mac/PageMac.mm:
        (WebCore::Page::canRunModal):
        (WebCore::Page::canRunModalNow):
        (WebCore::Page::runModal):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCorePageBridge.h:
        * bridge/win/BrowserExtensionWin.h:
        * page/Frame.cpp:
        (WebCore::Frame::scheduleHistoryNavigation):
        (WebCore::Frame::redirectionTimerFired):
        * page/Frame.h:
        * page/Page.h:

2006-10-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs

        <http://bugs.webkit.org/show_bug.cgi?id=11334>
        Writely Editor: Placing caret in a list "highlights" both Numbered List and Bulleted List toolbar icons

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::selectionUnorderedListState): Added.
        (WebCore::Editor::selectionOrderedListState): Added.
        * editing/Editor.h:
        * editing/JSEditor.cpp:
        * page/Frame.cpp:
        * page/Frame.h:

2006-10-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim H

        * WebCore.xcodeproj/project.pbxproj:
        Include WebCorePrefix.h in Xcode project for convenience and for consistency with WebKit

2006-10-23  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11291
        PNG as cursor image format instead of TIFF

        Original patch by Lars Naesbye Christensen (lars@naesbye.dk)

        - Convert cursor images from TIFF to PNG.

        * Resources/eastResizeCursor.png: Added.
        * Resources/eastResizeCursor.tiff: Removed.
        * Resources/eastWestResizeCursor.png: Added.
        * Resources/eastWestResizeCursor.tiff: Removed.
        * Resources/helpCursor.png: Added.
        * Resources/helpCursor.tiff: Removed.
        * Resources/linkCursor.png: Added.
        * Resources/linkCursor.tiff: Removed.
        * Resources/moveCursor.png: Added.
        * Resources/moveCursor.tiff: Removed.
        * Resources/northEastResizeCursor.png: Added.
        * Resources/northEastResizeCursor.tiff: Removed.
        * Resources/northEastSouthWestResizeCursor.png: Added.
        * Resources/northEastSouthWestResizeCursor.tiff: Removed.
        * Resources/northResizeCursor.png: Added.
        * Resources/northResizeCursor.tiff: Removed.
        * Resources/northSouthResizeCursor.png: Added.
        * Resources/northSouthResizeCursor.tiff: Removed.
        * Resources/northWestResizeCursor.png: Added.
        * Resources/northWestResizeCursor.tiff: Removed.
        * Resources/northWestSouthEastResizeCursor.png: Added.
        * Resources/northWestSouthEastResizeCursor.tiff: Removed.
        * Resources/southEastResizeCursor.png: Added.
        * Resources/southEastResizeCursor.tiff: Removed.
        * Resources/southResizeCursor.png: Added.
        * Resources/southResizeCursor.tiff: Removed.
        * Resources/southWestResizeCursor.png: Added.
        * Resources/southWestResizeCursor.tiff: Removed.
        * Resources/waitCursor.png: Added.
        * Resources/waitCursor.tiff: Removed.
        * Resources/westResizeCursor.png: Added.
        * Resources/westResizeCursor.tiff: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/CursorMac.mm:
        (WebCore::leakNamedCursor):

2006-10-23  Maciej Stachowiak  <mjs@apple.com>

        - fixed build from last change.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::loadRequest):
        (WebCore::FrameMac::openURL):

2006-10-23  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Move border-radius rule for <select>s into RenderThemeMac, as this is
        really a platform-specific look.

        * css/html4.css:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle):

2006-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady.

        - moved things around so loadURL:... is only called from one place

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::frameDetached):
        (WebCore::FrameMac::loadRequest):
        (WebCore::FrameMac::submitForm):
        (WebCore::FrameMac::openURL):
        (WebCore::FrameMac::openURLRequest):
        (WebCore::FrameMac::urlSelected):

2006-10-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <http://bugs.webkit.org/show_bug.cgi?id=11333>
        Writely Editor: After inserting a HR element, pressing return key creates a copy of this HR element in the document
        
        Added special cases in InsertLineBreakCommand for inserting before
        and after tables and horizontal rules.  Also, perform InsertLineBreak
        instead of InsertParagraphSeparator at these positions.

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):  Use the canonical form
        of the caret position when we check for the new special cases because 
        we know that we canonicalize VisiblePositions to those positions.
        Added code to handle inserting before/after tables and horizontal rules.  
        Fixed a bug when inserting at the end of a block (it checked for a collapse
        of the inserted br by looking for the absence of a br, but the line break 
        might have been a '\n' in white-space:pre text).  Removed unused LOGs.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Perform an 
        InsertLineBreakCommand when before/after a table or a horizontal rule
        so that we don't have to maintain two pieces of special case code.
        Migrated to enclosingBlock.
        * editing/htmlediting.cpp: Added a FIXME.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Added a workaround for 8622.
        
2006-10-23  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Make popups a little more flexible.

        * platform/PopupMenu.h:

2006-10-23  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Cleanup CodeGeneratorJS.pm

        * bindings/scripts/CodeGeneratorJS.pm:

2006-10-23  Adam Roben  <aroben@apple.com>

        Rubberstamped by Brady.

        * loader/icon/IconLoader.h: Changed angle-brackets to quotes for
        #include of ResourceLoader.h, since it's a WebCore header.

2006-10-23  Darin Adler  <darin@apple.com>

        - fixed mistake that was preventing any loading from happening

        * platform/network/ResourceLoaderClient.h: (WebCore::ResourceLoaderClient::didReceiveData):
        Changed parameter back to int. Perhaps we want to move to "long long" consistently, but
        I'll leave that up to Maciej.

2006-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - start converting ResourceLoaderClient to new API

        Did the bits I could do without introducing new types:
        
        - renamed receivedData to didReceiveData
        - renamed version of receivedAllData that doesn't pass any data to didFinishLoading

        * bridge/mac/WebCoreResourceLoaderImp.mm:
        (-[WebCoreResourceLoaderImp addData:]):
        (-[WebCoreResourceLoaderImp finishJobAndHandle:]):
        * loader/icon/IconLoader.cpp:
        (IconLoader::didReceiveData):
        (IconLoader::didFinishLoading):
        * loader/icon/IconLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::didReceiveData):
        * loader/loader.h:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdkClientDefault::didReceiveData):
        * platform/gdk/FrameGdk.h:
        * platform/network/ResourceLoaderClient.h:
        (WebCore::ResourceLoaderClient::didReceiveData):
        (WebCore::ResourceLoaderClient::didFinishLoading):
        (WebCore::ResourceLoaderClient::receivedResponse):
        * platform/network/cf/ResourceLoaderCFNet.cpp:
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::ResourceLoader::cancel):
        * platform/network/gdk/ResourceLoaderManager.cpp:
        (WebCore::writeCallback):
        (WebCore::ResourceLoaderManager::downloadTimerCallback):
        (WebCore::ResourceLoaderManager::remove):
        * platform/network/qt/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::slotData):
        (WebCore::ResourceLoaderManager::remove):
        * platform/network/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::onRequestComplete):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::didReceiveData):
        * platform/qt/FrameQtClient.h:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/xmlhttprequest.h:

2006-10-23  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Anders.

        - marked files executable
        
        * ksvg2/scripts/csscssmakeprops:
        * ksvg2/scripts/csscssmakevalues:

2006-10-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - moved ResourceLoader and related files to platform/network
        in preparation for building out this API.

        I tried to update all the build systems but I'm not sure they are
        all fixed properly

        * page/ResourceRequest.h: Moved to platform/network.
        * platform/ResourceLoader.cpp: Moved to platform/network.
        * platform/ResourceLoader.h: Moved to platform/network.
        * platform/ResourceLoaderClient.h: Moved to platform/network.
        * platform/ResourceLoaderInternal.h: Moved to platform/network.
        * platform/cf/ResourceLoaderCFNet.cpp: Moved to platform/network/cf.
        * platform/gdk/ResourceLoaderCurl.cpp: Moved to platform/network/gdk.
        * platform/gdk/ResourceLoaderManager.cpp: Moved to platform/network/gdk.
        * platform/gdk/ResourceLoaderManager.h: Moved to platform/network/gdk.
        * platform/mac/ResourceLoaderMac.mm: Moved to platform/network/mac.
        * platform/qt/ResourceLoaderManager.cpp: Moved to platform/network/qt.
        * platform/qt/ResourceLoaderManager.h: Moved to platform/network/qt.
        * platform/qt/ResourceLoaderQt.cpp: Moved to platform/network/qt.
        * platform/win/ResourceLoaderWin.cpp: Moved to platform/network/win.
        * platform/win/ResourceLoaderWin.h: Moved to platform/network/win.
        * webcore-base.bkl: Updated for new paths.
        * CMakeLists.txt: ditto
        * Projects/gdk/webcore-gdk.bkl: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * WebCoreSources.bkl: ditto

2006-10-22  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        - Add DOMHTMLFormElementPrivate.h to the project.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMPrivate.h:

2006-10-22  Darin Adler  <darin@apple.com>

        - another try at fixing Qt

        * CMakeLists.txt: Added DeleteButton.cpp and DeleteButtonController.cpp.

        - and fix a couple warnings while I'm at it

        * platform/image-decoders/ImageDecoder.h: (WebCore::RGBA32Buffer::setRGBA):
        Don't do unsigned *= float.

        * rendering/break_lines.cpp: (WebCore::nextBreakablePosition): Move unused variable
        inside #if so it's consistent.

2006-10-21  Darin Adler  <darin@apple.com>

        - fix the Qt build

        * platform/qt/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldShowDeleteInterface):
        * platform/qt/EditorClientQt.h:
        * platform/qt/FrameQt.cpp:

2006-10-21  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - convert WebLoader and its 3 subclasses to C++ (this time with a leak fixed)

        Renamed WebLoader to WebCore::WebResourceLoader (should be ResourceLoader, but
        there's currently another class with that name).
        Renamed WebMainResourceLoader to WebCore::MainResourceLoader.
        Renamed WebSubresourceLoader to WebCore::SubresourceLoader.
        Renamed WebNetscapePlugInStreamLoader to WebCore::NetscapePlugInStreamLoader.

        Converted the classes to C++ and added Objective-C delegates to forward from
        API that still requires Objective-C.

        Did not yet rename the source files.

        * WebCore.exp: Removed WebLoader, WebNetscapePlugInStreamLoader, and WebSubresourceLoader
        classes. Added 5 functions from the WebResourceLoader and NetscapePlugInStreamLoader
        classes.

        * WebCore.xcodeproj/project.pbxproj: Made RetainPtr.h a private header instead of project.

        * platform/cf/RetainPtr.h: Put into the WebCore namespace rather than the WTF namespace.

        * loader/mac/WebLoader.h:
        * loader/mac/WebLoader.mm:
        * loader/mac/WebMainResourceLoader.h:
        * loader/mac/WebMainResourceLoader.mm:
        * loader/mac/WebNetscapePlugInStreamLoader.h:
        * loader/mac/WebNetscapePlugInStreamLoader.mm:
        * loader/mac/WebSubresourceLoader.h:
        * loader/mac/WebSubresourceLoader.mm:
        Translate to C++.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:]):
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:postData:]):
        * loader/mac/WebFrameLoader.h:
        * loader/mac/WebFrameLoader.mm:
        (isCaseInsensitiveEqual):
        (isBackForwardLoadType):
        (-[WebFrameLoader dealloc]):
        (-[WebFrameLoader addPlugInStreamLoader:]):
        (-[WebFrameLoader removePlugInStreamLoader:]):
        (-[WebFrameLoader setDefersCallbacks:]):
        (-[WebFrameLoader stopLoadingPlugIns]):
        (-[WebFrameLoader isLoadingMainResource]):
        (-[WebFrameLoader isLoadingSubresources]):
        (-[WebFrameLoader isLoadingPlugIns]):
        (-[WebFrameLoader stopLoadingSubresources]):
        (-[WebFrameLoader addSubresourceLoader:]):
        (-[WebFrameLoader removeSubresourceLoader:]):
        (-[WebFrameLoader mainResourceData]):
        (-[WebFrameLoader releaseMainResourceLoader]):
        (-[WebFrameLoader cancelMainResourceLoad]):
        (-[WebFrameLoader startLoadingMainResourceWithRequest:identifier:]):
        (-[WebFrameLoader stopLoadingWithError:]):
        (-[WebFrameLoader willUseArchiveForRequest:originalURL:loader:]):
        (-[WebFrameLoader archiveLoadPendingForLoader:]):
        (-[WebFrameLoader cancelPendingArchiveLoadForLoader:]):
        * loader/mac/WebFrameLoaderClient.h:
        Call the new C++ API.

2006-10-21  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Popup tweaks.

        * platform/PopupMenu.h:

2006-10-21  Darin Adler  <darin@apple.com>

        * editing/DeleteButtonController.cpp: (WebCore::enclosingDeletableTable):
        Oops, edited this before landing it and introduced a null-deref! This fixes it.

2006-10-21  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11379
          assertion failure seen in editing tests (in new DeleteButtonController)

        I cleaned up the relationship between the Frame, Editor, EditorClient, and
        DeleteButtonController a bit while also making the simple change to fix the
        assertion failure.

        * bridge/mac/FrameMac.h: Change EditorClient parameter to a PassRefPtr since we take ownership.
        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::FrameMac):

        * page/Frame.h: Change EditorClient parameter to a PassRefPtr since we take ownership.
        * page/Frame.cpp:
        (WebCore::Frame::Frame): Ditto.
        (WebCore::Frame::appliedEditing): Removed unneeded parameter to the respondToChangedContents
        function, and moved it to Editor rather than right on the DeleteButtonController.
        (WebCore::Frame::unappliedEditing): Ditto.
        (WebCore::Frame::reappliedEditing): Ditto.
        * page/FramePrivate.h: (WebCore::FramePrivate::FramePrivate): More of the same.

        * editing/DeleteButtonController.h:
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::DeleteButtonController): Replaced Editor* with a Frame*.
        The general pattern is that we always use the Frame* as the frame identifier. See FrameTree,
        for example.
        (WebCore::enclosingDeletableTable): Added. Helper function used by the respondToChangedSelection
        function. Includes an additional check for whether the container is contentEditable, which
        was missing from the old version. This prevents the assertion failure. Also added a check that
        the table itself is editable.
        (WebCore::DeleteButtonController::respondToChangedSelection): Rewrote to use the helper.
        (WebCore::DeleteButtonController::respondToChangedContents): Removed the unnecessary
        selection parameter. No need to pass in the state of the frame since we can get it if we need it.
        (WebCore::DeleteButtonController::show): Updated to use frame pointer rather than editor pointer.

        * editing/Editor.cpp: Fixed formatting. Even the temporary placeholder functions should be
        formatted on multiple lines as usual.
        (WebCore::Editor::respondToChangedSelection): Added. Forwards to the delete button controller.
        (WebCore::Editor::respondToChangedContents): Ditto.
        (WebCore::Editor::Editor): Changed EditorClient parameter to a PassRefPtr since we take ownership.

        * editing/Editor.h: Changed the DeleteButtonController to use an OwnPtr instead of being
        defined inline to decouple so that we don't have to include DeleteButtonController.h. That way
        changes to DeleteButtonController.h cause very little to recompile.

        * editing/SelectionController.cpp: (WebCore::SelectionController::setSelection):
        Updated to call the editor instead of the delete button controller for the selection change.

2006-10-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::ServeSynchronousRequest):
        * platform/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::start):
        Don't leak the header dictionary.

2006-10-21  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - http://bugs.webkit.org/show_bug.cgi?id=11376
          build scripts should invoke make with "-j" option for multiple processors

        * WebCore.xcodeproj/project.pbxproj: Pass -j `sysctl -n hw.ncpu` to make.

2006-10-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4478625> HTML Editing: Basic table editing and culling

        Initial implementaltion of table deletion user interface:
        * Interface shows up on the nearest table containing the entire selection.
        * Shows a Dashboard style close button in the top left corner.
        * Shows a 60% opaque black outline around the table.
        * Adds a new EditorClient function shouldShowDeleteInterface.

        Also adds a new constructor CachedImage and setter functions on
        HTMLImageElement and HTMLImageLoader allowing an Image object to be set
        and image element in the page. This change also paves the way to allow an
        NSImage setter on DOMHTMLImageElement. 

        * Resources/deleteButton.tiff: Added.
        * Resources/deleteButtonPressed.tiff: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/EditorClient.h:
        * editing/DeleteButton.cpp: Added.
        (WebCore::DeleteButton::DeleteButton):
        (WebCore::DeleteButton::defaultEventHandler): notify the controller to delete on click
        * editing/DeleteButton.h: Added.
        * editing/DeleteButtonController.cpp: Added.
        (WebCore::DeleteButtonController::DeleteButtonController):
        (WebCore::DeleteButtonController::respondToChangedSelection): move the interface to the new element, or hide
        (WebCore::DeleteButtonController::respondToChangedContents): call updateOutlineStyle
        (WebCore::DeleteButtonController::updateOutlineStyle): resize the outline if the table changed size
        (WebCore::DeleteButtonController::show): shows the interface on a new element
        (WebCore::DeleteButtonController::hide): hides the existing interface
        (WebCore::DeleteButtonController::deleteTarget): deletes the targeted element
        * editing/DeleteButtonController.h: Added.
        (WebCore::DeleteButtonController::target): getter for the current target
        * editing/Editor.cpp:
        (WebCore::Editor::shouldShowDeleteInterface): call the new shouldShowDeleteInterface client function
        (WebCore::Editor::Editor): remove the manual ref now that we use RefPtr for m_client
        (WebCore::Editor::~Editor): remove the manual deref now that we use RefPtr for m_client
        * editing/Editor.h:
        (WebCore::Editor::frame): new getter
        (WebCore::Editor::deleteButtonController): ditto
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): notify the DeleteButtonController about the new selection
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::setCachedImage): new setter that replaces the CachedImage
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::setImage): ditto
        * html/HTMLImageLoader.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage): new constructor that takes an Image
        * loader/CachedImage.h: ditto
        * page/Frame.cpp:
        (WebCore::Frame::selectionController): cleanup coding style
        (WebCore::Frame::editor): ditto
        (WebCore::Frame::command): ditto
        (WebCore::Frame::appliedEditing): tell the delete button outline to update
        (WebCore::Frame::unappliedEditing): ditto
        (WebCore::Frame::reappliedEditing): ditto
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): workaround until bug 11363 is fixed

2006-10-21  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Cleanup bindings generation a little through re-factoring 
        and general style cleanup.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:

2006-10-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mitz.

        Fix crashes on Qt/Linux. Offer a default EditorClient and pass it down to Frame ctor.

        * CMakeLists.txt:
        * platform/qt/EditorClientQt.cpp: Added.
        (WebCore::EditorClientQt::shouldDeleteRange):
        * platform/qt/EditorClientQt.h: Added.
        (WebCore::EditorClientQt::~EditorClientQt):
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        * platform/qt/FrameQt.h:

2006-10-21  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11372
        Auto-generate a few more Objective-C DOM methods.

        - Auto-generate getMatchedCSSRules and getComputedStyle methods.

        * bindings/objc/DOMCSS.h:
        * bindings/objc/DOMCSS.mm:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/Document.idl:
        * page/DOMWindow.idl:

2006-10-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by aliu, landed by aliu.

        Fix Qt/Linux build.

        * CMakeLists.txt:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        * platform/qt/SoundQt.cpp: Added.
        (WebCore::systemBeep):

2006-10-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mitz, landed by ap.

        Fix obscure crashes in RenderTableSection on Rob's musicdb file.
        The problem was a missing layout() call on the frame view.
        Thanks go to Mitz Pettel for the initial hint!

        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::paintEvent):

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders.

        Send User-Agent on requests.
        Send custom request headers properly.

        * platform/cf/ResourceLoaderCFNet.cpp:
        (WebCore::addHeadersFromHashMap): Switch over to HashMap iteration from string parsing
        (WebCore::ResourceLoader::start): Send proper User-Agent, change call to add headers

2006-10-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Hyatt.

        Fix some bad formatting.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):

2006-10-20  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4795716> REGRESSION: User names and passwords aren't being saved (.Mac, etc.) -- WebKit formState passing empty strings

        * loader/mac/WebFormState.mm: (WebCore::FormState::FormState): Fix typo -- need to pass "key"
        as the key, not the dictionary itself.

2006-10-20  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        This is the initial foundation for the EditingController class and
        everything else it needs to work.  The idea is that the Frame has an
        EditingController object that it calls to handle editing commands, the
        most simple examples being copy/paste.  This controller will handle
        these editing commands in WebCore, and only hand off to WebKit to call
        editing delegates (to the let the app intercept editing actions if it
        wants to).  Thus we need a platform-specific client to which the
        EditingController hands off the delegate calls, 
        WebCoreEditingControllerClient.  On the WebCore side this is an 
        abstract base class, and on the WebKit(Mac) side this is an ObjC++
        subclass, WebEditingControllerClient.  How does the EditingController
        get a handle to its platform-specific client?  In WebKit, the creator
        of a platform-specific Frame creates the client (which is ref-counted)
        and passes it down the chain of constructors until it gets back to the
        EditingController, which then refs it in its constructor and derefs in
        its destructor.
        
        No Layout tests needed.
        
        * WebCore.xcodeproj/project.pbxproj:
        Added files and made DomRangeInternal.h and EditingClient.h private headers, necessary for WebKit to compile

        * bridge/EditorClient.h: Added.
        (WebCore::EditorClient::~EditorClient):

        * bridge/mac/FrameMac.h:
        Added an EditingClient to the constructor, to pass down to Frame constructor

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::FrameMac):
        Passed client down to Frame constructor
        
        * bridge/mac/WebCoreFrameBridge.h:
        Added an EditingClient to the constructor, to pass down to FrameMac constructor
        
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge initMainFrameWithPage:withEditorClient:]):
        (-[WebCoreFrameBridge initSubframeWithOwnerElement:withEditorClient:]):
        Passed client down to FrameMac constructor
        
        * editing/Editor.cpp: Added.
        Mostly stuf implementations of the following functions, except for a couple.  These are all needed by cut, copy, paste, delete.
        (WebCore::generalPasteboard):
        (WebCore::Editor::canCopy):
        (WebCore::Editor::canCut):
        (WebCore::Editor::canDelete):
        (WebCore::Editor::canDeleteRange):
        (WebCore::Editor::canPaste):
        (WebCore::Editor::canSmartCopyOrDelete):
        (WebCore::Editor::deleteSelection):
        (WebCore::Editor::deleteSelectionWithSmartDelete):
        (WebCore::Editor::isSelectionRichlyEditable):
        (WebCore::Editor::pasteAsPlainTextWithPasteboard):
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::selectedRange):
        (WebCore::Editor::shouldDeleteRange):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::tryDHTMLPaste):
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::Editor):
        (WebCore::Editor::~Editor):
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::paste):
        (WebCore::Editor::performDelete):
        
        * editing/Editor.h: Added.
        
        * page/Frame.h:
        Added an EditingClient to the constructor, to pass down to Editor constructor

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        Passed down to Editor constructor
        (WebCore::Frame::editor):
        Accessor for Editor stored in FramePrivate
        
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        Added an Editor object to the FramePrivate data
        
        * platform/Sound.h: Added.
        Made a platform-independent accessor to a beep function
        
        * platform/mac/SoundMac.mm: Added.
        (WebCore::systemBeep):
        calls mac system beep
        
2006-10-20  David Hyatt  <hyatt@apple.com>

        Make sure to support the "encoding" property on form elements for
        legacy compatibility.

        Reviewed by darin/john

        No test cases added.  Not sure how to do a form submission of
        various encodings as a layout test.

        * html/HTMLFormElement.h:
        (WebCore::HTMLFormElement::encoding):
        (WebCore::HTMLFormElement::setEncoding):
        * html/HTMLFormElement.idl:

2006-10-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and by Anders.

        Fix warnings in JS generation by killing the whole isRefPtr logic,
        and just using WTF::getPtr as Sam Weinig suggested. Also kill some
        places using get() where getPtr() is cleaner - not for m_impl.get().

        * CMakeLists.txt: Tiny cleanup + add deps for CodeGenerator(JS).pm on all IDLs.
        * bindings/scripts/CodeGeneratorJS.pm:

2006-10-20  Darin Adler  <darin@apple.com>

        - rolled out my loader change; caused world leak and possibly a plug-in crash

2006-10-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim H

        * loader/mac/LoaderFunctionsMac.mm:
        Autorelease the header NSDictionary.
        
2006-10-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::timerFired):
        Check if the timeout id is still in the table before trying to access it. If it isn't in the table
        it has been deleted inside of the execute method.

2006-10-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin and Geoff.

        Remove debugging output.
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2006-10-20  David Harrison  <harrison@apple.com>

        Reviewed by John.

        <rdar://problem/4792755> REGRESSON: Drag selecting is erratic

        No test because it would require autoscrolling, which is not available to layout tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        Use hitTest() to find the correct node.
        
        (WebCore::RenderLayer::hitTest):
        Trivial source formatting.

2006-10-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Fix regression introduced during the ResourceLoader transition (Maciej's rewrite).

        * platform/qt/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::add):

2006-10-20  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - convert WebLoader and its 3 subclasses to C++

        Renamed WebLoader to WebCore::WebResourceLoader (should be ResourceLoader, but
        there's currently another class with that name).
        Renamed WebMainResourceLoader to WebCore::MainResourceLoader.
        Renamed WebSubresourceLoader to WebCore::SubresourceLoader.
        Renamed WebNetscapePlugInStreamLoader to WebCore::NetscapePlugInStreamLoader.

        Converted the classes to C++ and added Objective-C delegates to forward from
        API that still requires Objective-C.

        Did not yet rename the source files.

        * WebCore.exp: Removed WebLoader, WebNetscapePlugInStreamLoader, and WebSubresourceLoader
        classes. Added 5 functions from the WebResourceLoader and NetscapePlugInStreamLoader
        classes.

        * WebCore.xcodeproj/project.pbxproj: Made RetainPtr.h a private header instead of project.

        * platform/cf/RetainPtr.h: Put into the WebCore namespace rather than the WTF namespace.

        * loader/mac/WebLoader.h:
        * loader/mac/WebLoader.mm:
        * loader/mac/WebMainResourceLoader.h:
        * loader/mac/WebMainResourceLoader.mm:
        * loader/mac/WebNetscapePlugInStreamLoader.h:
        * loader/mac/WebNetscapePlugInStreamLoader.mm:
        * loader/mac/WebSubresourceLoader.h:
        * loader/mac/WebSubresourceLoader.mm:
        Translate to C++.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:]):
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:postData:]):
        * loader/mac/WebFrameLoader.h:
        * loader/mac/WebFrameLoader.mm:
        (isCaseInsensitiveEqual):
        (isBackForwardLoadType):
        (-[WebFrameLoader dealloc]):
        (-[WebFrameLoader addPlugInStreamLoader:]):
        (-[WebFrameLoader removePlugInStreamLoader:]):
        (-[WebFrameLoader setDefersCallbacks:]):
        (-[WebFrameLoader stopLoadingPlugIns]):
        (-[WebFrameLoader isLoadingMainResource]):
        (-[WebFrameLoader isLoadingSubresources]):
        (-[WebFrameLoader isLoadingPlugIns]):
        (-[WebFrameLoader stopLoadingSubresources]):
        (-[WebFrameLoader addSubresourceLoader:]):
        (-[WebFrameLoader removeSubresourceLoader:]):
        (-[WebFrameLoader mainResourceData]):
        (-[WebFrameLoader releaseMainResourceLoader]):
        (-[WebFrameLoader cancelMainResourceLoad]):
        (-[WebFrameLoader startLoadingMainResourceWithRequest:identifier:]):
        (-[WebFrameLoader stopLoadingWithError:]):
        (-[WebFrameLoader willUseArchiveForRequest:originalURL:loader:]):
        (-[WebFrameLoader archiveLoadPendingForLoader:]):
        (-[WebFrameLoader cancelPendingArchiveLoadForLoader:]):
        * loader/mac/WebFrameLoaderClient.h:
        Call the new C++ API.

2006-10-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Offer a way for WebKitPart to be able to detect when
        the webpage has been completly loaded (including subresources).

        Also fix Qt/Linux build by removing PopupMenu.cpp from CMakeLists.txt
        and removing some functions from PopupMenuQt.cpp, and alter FrameQt.cpp.

        * CMakeLists.txt:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::submitForm):
        (WebCore::FrameQt::client):
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::setFrame):
        (WebCore::FrameQtClientDefault::openURL):
        (WebCore::FrameQtClientDefault::submitForm):
        (WebCore::FrameQtClientDefault::checkLoaded):
        (WebCore::FrameQtClientDefault::traverseNextFrameStayWithin):
        (WebCore::FrameQtClientDefault::numPendingOrLoadingRequests):
        (WebCore::FrameQtClientDefault::receivedAllData):
        * platform/qt/FrameQtClient.h:
        * platform/qt/LoaderFunctionsQt.cpp:
        (WebCore::CheckCacheObjectStatus):
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::ResourceLoaderManager):
        (WebCore::ResourceLoaderManager::slotResult):
        (WebCore::ResourceLoaderManager::add):
        * platform/qt/ResourceLoaderManager.h:
        * platform/qt/ResourceLoaderQt.cpp:
        (WebCore::ResourceLoader::start):

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Geoff.

        Fix compiler warnings

        * platform/ResourceLoaderClient.h:

2006-10-20  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Mitz.

        Win32 build fix and cleanup.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::submitForm):
        * page/ResourceRequest.h:
        (WebCore::ResourceRequest::addHTTPHeaderField):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Slider::~Slider):
        (WebCore::Slider::setMinValue):
        (WebCore::searchableIndexIntroduction):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (WebCore::FrameWin::getObjectInstanceForWidget):
        (WebCore::FrameWin::getEmbedInstanceForWidget):
        (WebCore::FrameWin::runJavaScriptPrompt):
        (WebCore::FrameWin::restoreDocumentState):
        (WebCore::FrameWin::partClearedInBegin):
        (WebCore::FrameWin::createEmptyDocument):
        (WebCore::FrameWin::overrideMediaType):
        (WebCore::FrameWin::markedTextRange):
        (WebCore::FrameWin::passSubframeEventToSubframe):
        (WebCore::FrameWin::lastEventIsMouseUp):
        (WebCore::FrameWin::addMessageToConsole):
        (WebCore::FrameWin::shouldChangeSelection):
        (WebCore::FrameWin::respondToChangedSelection):
        (WebCore::FrameWin::createFrame):
        (WebCore::FrameWin::saveDocumentState):
        (WebCore::FrameWin::clearUndoRedoOperations):
        (WebCore::FrameWin::incomingReferrer):
        (WebCore::FrameWin::markMisspellingsInAdjacentWords):
        (WebCore::FrameWin::respondToChangedContents):
        (WebCore::FrameWin::handledOnloadEvents):
        (WebCore::FrameWin::createPlugin):
        (WebCore::FrameWin::objectContentType):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::historyContains):
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::defaultLanguage):
        (WebCore::findWordBoundary):
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveResponseEncoding):
        (WebCore::ResourceLoader::startHTTPRequest):
        (WebCore::TextField::TextField):
        (WebCore::focusRingColor):
        (WebCore::setFocusRingColorChangeFunction):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::hide):

2006-10-20  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11303
        Path::transform() should be implemented on Qt build

        Use QPainterPath API to implement Path::transform.
        This fixes svg/custom/clip-path-with-transform.svg on
        the qt build.

        * platform/qt/PathQt.cpp:
        (WebCore::Path::transform):

2006-10-20  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11217
        Cleanup svg coding style

        Cleanup coding style in svg clipping and painting classes.

        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::parseMappedAttribute):
        (WebCore::SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        (WebCore::SVGMarkerElement::canvasResource):
        * ksvg2/svg/SVGMarkerElement.h:
        (WebCore::SVGMarkerElement::rendererIsNeeded):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::drawMaskerContent):
        (WebCore::SVGMaskElement::canvasResource):
        * ksvg2/svg/SVGMaskElement.h:
        (WebCore::SVGMaskElement::rendererIsNeeded):
        * ksvg2/svg/SVGPaint.cpp:
        (WebCore::SVGPaint::setPaint):
        (WebCore::SVGPaint::cssText):
        * ksvg2/svg/SVGPaint.h:

2006-10-20  David Hyatt  <hyatt@apple.com>

        Make sure to do the code that checks the repeatInterval before the timer has been
        deleted. (Duh.)

        Reviewed by andersca

        * bindings/js/kjs_window.cpp:
        (KJS::DOMWindowTimer::setNestingLevel):
        (KJS::Window::timerFired):
        (KJS::DOMWindowTimer::fired):
        * platform/Timer.h:

2006-10-20  David Hyatt  <hyatt@apple.com>

        Honor tiny timer intervals for JS timeouts as they are nested until a cutoff point is reached.
        At that point clamp to 10ms to prevent excessive CPU usage.

        Reviewed by anders

        * bindings/js/kjs_window.cpp:
        (KJS::DOMWindowTimer::DOMWindowTimer):
        (KJS::DOMWindowTimer::nestingLevel):
        (KJS::Window::installTimeout):
        (KJS::Window::pauseTimeouts):
        (KJS::Window::resumeTimeouts):
        (KJS::DOMWindowTimer::fired):
        * platform/Timer.h:
        (WebCore::TimerBase::startRepeating):
        (WebCore::TimerBase::startOneShot):
        (WebCore::TimerBase::repeatInterval):
        (WebCore::TimerBase::augmentRepeatInterval):
        (WebCore::TimerBase::inHeap):
        (WebCore::Timer::Timer):
        (WebCore::Timer::fired):

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Build fix

        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

2006-10-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Use GetKeyState rather than GetAsyncKeyState since we're
        calling in these cases in direct response to an event, and want the
        key state associated with that event.
        
        Pass triggering event to url selection method.
        
        * bridge/mac/FrameMac.h: Add triggeringEvent parameter
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::urlSelected): Add triggeringEvent parameter
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected): Add triggeringEvent parameter
        * bridge/win/FrameWin.h: Add triggeringEvent parameter
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler): Pass triggering event to URL selection method
        * page/Frame.cpp:
        (WebCore::Frame::changeLocation): Add 0 as triggeringEvent
        (WebCore::Frame::urlSelected): Pass through triggeringEvent
        * page/Frame.h: Add triggeringEvent parameter to urlSelected methods
        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): Use GetKeyState instead of GetAsyncKeyState
        * platform/win/MouseEventWin.cpp: Use GetKeyState instead of GetAsyncKeyState
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2006-10-19  David Hyatt  <hyatt@apple.com>

        Correct typos from changing "flush" to "prune" using automated search/replace.

        Change the cache heuristic for flushing to allow a higher watermark before initiating an
        aggressive prune.  This ensures that small cache sizes are no worse in terms of performance
        than the old buggy cache.

        Make sizes unsigned instead of ints in the cache's APIs and member variables.

        * loader/Cache.cpp:
        (WebCore::Cache::prune):
        (WebCore::Cache::setMaximumSize):
        * loader/Cache.h:
        (WebCore::Cache::maximumSize):

2006-10-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Daddy Hyatt.

        Use a real hash map for the headers.

        * loader/LoaderFunctions.h:
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::ServeSynchronousRequest):
        * platform/ResourceLoader.cpp:
        (WebCore::ResourceLoader::setRequestHeaders):
        (WebCore::ResourceLoader::requestHeaders):
        * platform/ResourceLoader.h:
        * platform/ResourceLoaderInternal.h:
        * platform/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::start):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getRequestHeader):
        * xml/xmlhttprequest.h:

2006-10-19  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Pippity-poppity popup tweaks.

        * WebCore.xcodeproj/project.pbxproj: Removed PopupMenu.cpp from project.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): Only fire onChange if
        requested and the new index is actually different than the old one.
        * platform/IntPoint.h: Added another casting operator.
        * platform/PopupMenu.cpp: Removed. The code in here, while
        platform-independent, was only useful for the NSPopUpButtonCell
        implementation of popup menus, so I've moved it to PopupMenuMac.mm.
        * platform/PopupMenu.h: Moved the definition of PopupMenu::create into
        the header since it's fairly simple. Made some more methods private now
        that we don't have subclasses and virtual methods anymore.
        (WebCore::PopupMenu::create):
        (WebCore::PopupMenu::menuList):
        (WebCore::PopupMenu::itemHeight):
        (WebCore::PopupMenu::windowRect):
        (WebCore::PopupMenu::listIndexAtPoint):
        (WebCore::PopupMenu::focusedIndex):
        (WebCore::PopupMenu::setWasClicked):
        (WebCore::PopupMenu::wasClicked):
        (WebCore::PopupMenu::setScrollOffset):
        (WebCore::PopupMenu::scrollOffset):
        (WebCore::PopupMenu::wheelDelta):
        * platform/mac/PopupMenuMac.mm: Added the code from PopupMenu.cpp.
        (WebCore::PopupMenu::populate): Call our own clear() method to clear
        the menu.
        * platform/win/IntPointWin.cpp: New casting operator.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator POINTS):

2006-10-19  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Cleaning up Document::nextFocusNode and Document::previousFocusNode.

        * dom/Document.cpp:
        (WebCore::Document::nextFocusNode):
        (WebCore::Document::previousFocusNode):

2006-10-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - implement new ResourceRequest API and fix up code as appropriate
        
        * bindings/js/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::WindowFunc::callAsFunction):
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::submitForm):
        (WebCore::FrameMac::openURLRequest):
        (WebCore::FrameMac::urlSelected):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge openURL:reload:contentType:refresh:lastModified:pageCache:]):
        * dom/DOMImplementation.cpp:
        (WebCore::addString):
        (WebCore::isSVG10Feature):
        (WebCore::isSVG11Feature):
        * dom/Document.h:
        * editing/CommandByName.cpp:
        * editing/JSEditor.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::changeLocation):
        (WebCore::Frame::urlSelected):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::submitForm):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/ResourceRequest.h:
        (WebCore::):
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::cachePolicy):
        (WebCore::ResourceRequest::setCachePolicy):
        (WebCore::ResourceRequest::timeoutInterval):
        (WebCore::ResourceRequest::setTimeoutInterval):
        (WebCore::ResourceRequest::mainDocumentURL):
        (WebCore::ResourceRequest::setMainDocumentURL):
        (WebCore::ResourceRequest::httpMethod):
        (WebCore::ResourceRequest::setHTTPMethod):
        (WebCore::ResourceRequest::httpHeaderField):
        (WebCore::ResourceRequest::setHTTPHeaderField):
        (WebCore::ResourceRequest::httpContentType):
        (WebCore::ResourceRequest::setHTTPContentType):
        (WebCore::ResourceRequest::httpReferrer):
        (WebCore::ResourceRequest::setHTTPReferrer):
        (WebCore::ResourceRequest::httpUserAgent):
        (WebCore::ResourceRequest::setHTTPUserAgent):
        (WebCore::ResourceRequest::httpBody):
        (WebCore::ResourceRequest::setHTTPBody):
        (WebCore::ResourceRequest::addHTTPHeaderField):
        * platform/FontCache.cpp:
        (WebCore::computeHash):
        * platform/StringHash.h:
        (WTF::):
        * platform/StringImpl.cpp:
        (WebCore::equalIgnoringCase):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):

2006-10-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4447885>
        API: WebView should have a method something like incrementLeftMarginBy: or indentBy:
        
        Fixed indent/outdent to only increment the left margin, to match other browsers.
        Used blockquote class="webkit-indent-blockquote" to do this.  Mail can now
        implement indent/outdent by customizing the appearance of these blockquotes,
        instead of using a new API.
        
        * css/html4.css: Added margin: 0 0 0 40px for webkit-indent-blockquotes.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::indentBlockquoteString): Added.
        (WebCore::createIndentBlockquoteElement): Added.
        (WebCore::isIndentBlockquote): Added.
        (WebCore::isListOrBlockquote): Added.
        (WebCore::IndentOutdentCommand::IndentOutdentCommand):
        (WebCore::IndentOutdentCommand::prepareBlockquoteLevelForInsertion): Fixed
        a bug in the code that added an extra br if the placeholder collapsed upon insertion.
        Used the new indentBlockquote checks and enclosing element getters.  
        (WebCore::IndentOutdentCommand::indentRegion): Ditto.
        (WebCore::IndentOutdentCommand::outdentParagraph): Ditto.  Cleaned up the
        logic to pull the selection out of a list a bit.
        * editing/htmlediting.cpp:
        (WebCore::enclosingNodeOfType): Added this generic enclosing element getter.
        * editing/htmlediting.h:

2006-10-19  Timothy Hatcher  <timothy@apple.com>

        Rolling out the this change since it caused a bad regression:
        <rdar://problem/4788524> REGRESSION: Incomplete repaint of text area when deleting (11277)

2006-10-12  Adele Peterson  <adele@apple.com>
          
        Reviewed by Dave Harrison.
          
        - Fixed <rdar://problem/4650813> REGRESSION: typing in a textarea in Safari is extremely slow (sample shows focus ring drawing)
          
        * rendering/RenderObject.cpp: (WebCore::RenderObject::markContainingBlocksForLayout):
        Make subtree layouts work for textareas as well as text fields.

2006-10-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Fix Qt/Linux build.

        * CMakeLists.txt:
        * loader/Cache.h:
        * platform/qt/BrowserExtensionQt.cpp:
        * platform/qt/BrowserExtensionQt.h:
        * platform/qt/CursorQt.cpp:
        (WebCore::pointerCursor):
        * platform/qt/LoaderFunctionsQt.cpp:
        (WebCore::NumberOfPendingOrLoadingRequests):
        (WebCore::CheckCacheObjectStatus):
        * platform/qt/ResourceLoaderQt.cpp:
        (WebCore::ResourceLoader::retrieveResponseEncoding):
        (WebCore::ResourceLoader::receivedResponse):

2006-10-19  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by ap.

        Win32 build fix.

        * bridge/win/FrameWin.cpp:
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ResourceLoader::retrieveResponseEncoding):

2006-10-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11141
        REGRESSION(r16681-r16691): CSS '@import' doesn't respect HTML Base element

        Undo one misguided change made in bug 11011 - stop setting inline stylesheet's href
        to document URL. This matches WinIE and partially matches Firefox - although the latter
        reports the href as if it were inherited, it still doesn't use it when resolving URIs in
        @import rules.

        Test: http/tests/uri/css-href.php

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::childrenChanged):
        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::childrenChanged):

2006-10-19  Anders Carlsson  <acarlsson@apple.com>

        * loader/Cache.cpp:
        Get rid of #include "loader.h", Cache.h already includes this and it breaks on operating systems
        with case-sensitive file systems.

2006-10-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej, Brady.

        Remove "charset" from the ResourceLoader metadata map and use 
        a getter function instead. Also, rename charset to encoding in a couple of places.
        
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::setEncoding):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedResource.h:
        (WebCore::CachedResource::setEncoding):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::setEncoding):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::setEncoding):
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::setEncoding):
        * loader/CachedXSLStyleSheet.h:
        * loader/loader.cpp:
        (WebCore::Loader::receivedResponse):
        * platform/ResourceLoader.cpp:
        (WebCore::ResourceLoader::responseEncoding):
        (WebCore::ResourceLoader::queryMetaData):
        * platform/ResourceLoader.h:
        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::retrieveResponseEncoding):
        (WebCore::ResourceLoader::receivedResponse):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::receivedData):

2006-10-19  David Hyatt  <hyatt@apple.com>

        Rewrite of the WebCore memory cache.  The following changes have been made (along with many more):

        (1) Referenced objects are now also cached.

        (2) Pruning of the cache will occur once the cache is both full and in addition
        more than half full with unreferenced objects.

        (3) The prune is much more aggressive now, since referenced objects are counted when
        pruning.  The cache will therefore often prune out every unreferenced object if lots of
        windows/tabs are open.

        (4) Consolidated the request methods for various types of resources to go through a single
        requestResource bottleneck function.

        (5) deref on CachedResource is no longer virtual, since the implementation in every subclass was
        identical.

        (6) Changed "object" to "resource" everywhere.

        (7) The Cache is now an actual object, obtained via cache().

        (8) Fixed bugs with the autoload images preference so that it would really work properly when disabled
        and enabled.

        (9) Tweaked ImageDocuments to set up the status properly for the CachedResource that they use.

        (10) Fixed the LRU-SP algorithm so that the LRU aspect really kicks in (by leaving the live objects
        in the LRU lists).  Also fixed a bug with the "-SP" part of the algorithm where the access count was
        being incorrectly weighted too much due to a math error.

        (11) Fixed a bug where the old cache could grow without bound because it didn't know anything about
        the size of referenced resources.

        Reviewed by Maciej, bradee-oh

        * bridge/mac/WebCoreCache.mm:
        (+[WebCoreCache statistics]):
        (+[WebCoreCache empty]):
        (+[WebCoreCache setDisabled:]):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge initMainFrameWithPage:]):
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::image):
        * dom/XMLTokenizer.cpp:
        (WebCore::openFunc):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::updateFromElement):
        * loader/Cache.cpp:
        (WebCore::cache):
        (WebCore::Cache::Cache):
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        (WebCore::Cache::resourceForURL):
        (WebCore::Cache::prune):
        (WebCore::Cache::setMaximumSize):
        (WebCore::Cache::remove):
        (WebCore::Cache::addDocLoader):
        (WebCore::Cache::removeDocLoader):
        (WebCore::fastLog2):
        (WebCore::Cache::lruListFor):
        (WebCore::Cache::removeFromLRUList):
        (WebCore::Cache::insertInLRUList):
        (WebCore::Cache::resourceAccessed):
        (WebCore::Cache::adjustSize):
        (WebCore::Cache::getStatistics):
        (WebCore::Cache::setDisabled):
        * loader/Cache.h:
        (WebCore::LRUList::LRUList):
        (WebCore::Cache::loader):
        (WebCore::Cache::maximumSize):
        (WebCore::Cache::disabled):
        (WebCore::Cache::addToLiveObjectSize):
        (WebCore::Cache::removeFromLiveObjectSize):
        (WebCore::Cache::TypeStatistic::TypeStatistic):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::~CachedImage):
        (WebCore::brokenImage):
        (WebCore::nullImage):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::data):
        * loader/CachedImage.h:
        (WebCore::CachedImage::stillNeedsLoad):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        (WebCore::CachedResource::finish):
        (WebCore::CachedResource::setExpireDate):
        (WebCore::CachedResource::isExpired):
        (WebCore::CachedResource::setRequest):
        (WebCore::CachedResource::ref):
        (WebCore::CachedResource::deref):
        (WebCore::CachedResource::setSize):
        * loader/CachedResource.h:
        (WebCore::CachedResource::):
        (WebCore::CachedResource::setCharset):
        (WebCore::CachedResource::url):
        (WebCore::CachedResource::type):
        (WebCore::CachedResource::referenced):
        (WebCore::CachedResource::count):
        (WebCore::CachedResource::status):
        (WebCore::CachedResource::size):
        (WebCore::CachedResource::isLoaded):
        (WebCore::CachedResource::setLoading):
        (WebCore::CachedResource::isImage):
        (WebCore::CachedResource::accessCount):
        (WebCore::CachedResource::increaseAccessCount):
        (WebCore::CachedResource::setInCache):
        (WebCore::CachedResource::inCache):
        (WebCore::CachedResource::cachePolicy):
        (WebCore::CachedResource::response):
        (WebCore::CachedResource::allData):
        (WebCore::CachedResource::canDelete):
        (WebCore::CachedResource::schedule):
        (WebCore::CachedResource::accept):
        (WebCore::CachedResource::setAccept):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
        (WebCore::DocLoader::~DocLoader):
        (WebCore::DocLoader::checkForReload):
        (WebCore::DocLoader::requestImage):
        (WebCore::DocLoader::requestCSSStyleSheet):
        (WebCore::DocLoader::requestScript):
        (WebCore::DocLoader::requestXSLStyleSheet):
        (WebCore::DocLoader::requestXBLDocument):
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::setAutoLoadImages):
        (WebCore::DocLoader::removeCachedResource):
        * loader/DocLoader.h:
        (WebCore::DocLoader::cachedResource):
        (WebCore::DocLoader::allCachedResources):
        (WebCore::DocLoader::autoLoadImages):
        (WebCore::DocLoader::cachePolicy):
        (WebCore::DocLoader::expireDate):
        (WebCore::DocLoader::frame):
        (WebCore::DocLoader::doc):
        (WebCore::DocLoader::loadInProgress):
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish):
        * loader/loader.cpp:
        (WebCore::Loader::receivedAllData):
        (WebCore::Loader::cancelRequests):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::NumberOfPendingOrLoadingRequests):
        (WebCore::CheckCacheObjectStatus):
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::UserStyleSheetLoader):
        (WebCore::Frame::Frame):
        (WebCore::Frame::stopLoading):
        (WebCore::Frame::setAutoLoadImages):
        (WebCore::Frame::autoLoadImages):
        (WebCore::Frame::begin):
        (WebCore::Frame::checkCompleted):
        (WebCore::Frame::reparseConfiguration):
        * page/Frame.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2006-10-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - remove vestiges of KXMLCore name (former name of WTF).

        * config.h:

2006-10-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=11222

        Some global JS objects lacked references to their property hashtables,
        so for-in enumeration didn't work. I added the references, and then removed
        a few bogus properties from the tables. The bogus ones got in there through
        bit rot.
        
        We should come up with some solution to these hand-written bindings bugs.
        Maybe we could use a script to autogenerate them or something.

        * bindings/js/kjs_window.cpp:
        (KJS::):
        (KJS::History::getValueProperty):

2006-10-18  Adam Roben  <aroben@apple.com>

        Reviewed by Brady.

        Change Shift-Tab to generate keyIdentifier U+000009 (Tab) instead of
        U+000019 (Backtab). This matches our windowsKeyCode for this key
        combination.

        * platform/mac/KeyEventMac.mm:
        (WebCore::keyIdentifierForKeyEvent):

2006-10-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam, Brady.

        Loader tweaks.

        * platform/cf/ResourceLoaderCFNet.cpp:
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::didReceiveChallenge):
        (WebCore::runLoaderThread):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::cancel):

2006-10-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4752138> Manipulating popup in HTML page crashed Xcode

        - Store the Mac popup button cell as a RetainPtr to prevent GC collection.
        - Convert more ObjC local statics and member variables to use RetainPtr.
        - Convert more CFRetain/CFRelease to HardRetain/HardRelease.

        * bindings/objc/DOM.mm:
        (ObjCNodeFilterCondition::ObjCNodeFilterCondition): use HardRetain and not CFRetain
        (ObjCNodeFilterCondition::~ObjCNodeFilterCondition): use HardRelease and not CFRelease
        * bridge/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::~AXObjectCache): use HardRelease and not CFRelease
        (WebCore::AXObjectCache::get): use HardRetain and not CFRetain
        (WebCore::AXObjectCache::remove): use HardRelease and not CFRelease
        * bridge/mac/WebCoreFrameBridge.mm:
        (+[WebCoreFrameBridge supportedImageResourceMIMETypes]): use RetainPtr
        (+[WebCoreFrameBridge supportedImageMIMETypes]): ditto
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (+[WebCoreIconDatabaseBridge sharedInstance]): use RetainPtr
        * platform/PopupMenu.h: renamed popup to m_popup and switched to RetainPtr<NSPopUpButtonCell>
        * platform/cf/RetainPtr.h:
        (WTF::::operator): implement a missing operator= template function
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::PopupMenu): remove nil initialization
        (WebCore::PopupMenu::~PopupMenu): use .get(), remove release message and rename to m_popup
        (WebCore::PopupMenu::clear): use .get() when sending a message and rename to m_popup
        (WebCore::PopupMenu::populate): ditto 
        (WebCore::PopupMenu::show): ditto
        (WebCore::PopupMenu::hide): ditto
        (WebCore::PopupMenu::addSeparator): ditto
        (WebCore::PopupMenu::addGroupLabel): ditto
        (WebCore::PopupMenu::addOption): ditto

2006-10-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adele.

        Fixed <rdar://problem/3673233> JavaScript timers do not fire if controls
        are tracking or menus are down (run loop modes)

        I spent a few hours trying to write an automated test, but DRT doesn't
        seem to support it. Manual tests attached to related bugs.
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::passMouseDownEventToWidget):
        * platform/mac/SharedTimerMac.cpp:
        (WebCore::setSharedTimerFireTime):

2006-10-18  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Maciej.

        More Win32 buildfix.

        * bridge/win/FrameWin.h:

2006-10-18  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Mitz

        Win32 build fix.

        * bridge/win/BrowserExtensionWin.cpp:
        (WebCore::BrowserExtensionWin::BrowserExtensionWin):
        (WebCore::BrowserExtensionWin::createNewWindow):
        * bridge/win/BrowserExtensionWin.h:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::createNewWindow):
        * bridge/win/FrameWin.h:
        * platform/win/CursorWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        (Image::getHBITMAP):

2006-10-18  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4784823>
        GMail Editor: Hang occurs when removing list styling on text in a rich text message

        List removal moves the contents of every list item out of the list it's 
        in. When the code tried to move the contents of an empty list item (an li 
        with no child nodes, not even a placeholder br), moveParagraph didn't prune 
        the li, like it would if the li had a placeholder inside it.  So the list 
        removal code went into an infinite loop, continually attempting to de-list 
        an empty list item.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): If the selection
        to move was empty and in an empty block that doesn't require a 
        placeholder to prop itself open (like a bordered div or an li), 
        remove it during the move.

2006-10-18  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=11343
          REGRESSION (r16975): fast/events/objc-event-api is failing

          When I moved the autoscroll code from FrameMac to Frame, I mistakingly changed the order of
          a call to invalidateClick.  This change moves it back to the sequence that existed before.  This allows
          the click count to get properly reset during a selection.

        * page/Frame.cpp: (WebCore::Frame::handleMouseMoveEvent):

2006-10-17  Geoffrey Garen  <ggaren@apple.com>
        
        Reviewed by Anders.
        
        Factored common scaling code into a helper function.

        * platform/mac/ScreenMac.mm:
        (WebCore::scale):
        (WebCore::scaleScreenRectToPageCoordinates):
        (WebCore::scalePageRectToScreenCoordinates):

2006-10-17  Steve Falkenburg  <sfalken@apple.com>

        Build fixes

        * bridge/win/BrowserExtensionWin.cpp:
        (WebCore::BrowserExtensionWin::createNewWindow):
        * bridge/win/BrowserExtensionWin.h:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::createNewWindow):
        * bridge/win/FrameWin.h:
        * platform/gdk/BrowserExtensionGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (BrowserExtensionGdk::createNewWindow):
        * platform/qt/BrowserExtensionQt.cpp:
        (WebCore::BrowserExtensionQt::createNewWindow):
        * platform/qt/BrowserExtensionQt.h:

2006-10-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        Renamed WindowArgs to WindowFeatures, and moved it into its own header.
        ("Features" is the term of art in IE documentation. "Args" is pirate
        talk.)

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::showModalDialog):
        (KJS::setWindowFeature):
        (KJS::parseWindowFeatures):
        (KJS::constrainToVisible):
        (KJS::WindowFunc::callAsFunction):
        * bridge/BrowserExtension.h:
        * bridge/WindowFeatures.h: Added.
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):

2006-10-17  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11268
        Implement the Objective-C DOM bindings for SVGNumber, SVGRect, and SVGPoint

        - Adds implementation for DOMSVGNumber, DOMSVGRect, and DOMSVGPoint.

        - Moves the contents of ksvg/bindings/js/ to bindings/js/.

        - Moves SVGZoomEvent.idl from ksvg/svg/ to ksvg/events/.

        - Adds isSVGColor() and isSVGPaint() methods to StyleBase, matching 
          the other CSSValue classing, and allowing the bindings to allocate
          appropriately.

        - Removes #ifdefs around the getBBox() method in SVGLocatable.idl allowing
          generation for Objective-C.

        - Assorted style cleanups.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMCSS.mm:
        (+[DOMCSSValue _CSSValueWith:WebCore::]):
        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _eventWith:WebCore::]):
        * bindings/objc/DOMSVG.h:
        * bindings/objc/DOMSVGNumber.mm:
        (-[DOMSVGNumber dealloc]):
        (-[DOMSVGNumber finalize]):
        (-[DOMSVGNumber value]):
        (-[DOMSVGNumber setValue:]):
        (-[DOMSVGNumber _SVGNumber]):
        (-[DOMSVGNumber _initWithFloat:]):
        (+[DOMSVGNumber _SVGNumberWith:]):
        * bindings/objc/DOMSVGPoint.mm:
        (-[DOMSVGPoint dealloc]):
        (-[DOMSVGPoint finalize]):
        (-[DOMSVGPoint x]):
        (-[DOMSVGPoint setX:]):
        (-[DOMSVGPoint y]):
        (-[DOMSVGPoint setY:]):
        (-[DOMSVGPoint WebCore::]):
        (-[DOMSVGPoint _initWithFloatPoint:WebCore::]):
        (+[DOMSVGPoint _SVGPointWith:WebCore::]):
        * bindings/objc/DOMSVGRect.mm:
        (-[DOMSVGRect dealloc]):
        (-[DOMSVGRect finalize]):
        (-[DOMSVGRect x]):
        (-[DOMSVGRect setX:]):
        (-[DOMSVGRect y]):
        (-[DOMSVGRect setY:]):
        (-[DOMSVGRect width]):
        (-[DOMSVGRect setWidth:]):
        (-[DOMSVGRect height]):
        (-[DOMSVGRect setHeight:]):
        (-[DOMSVGRect WebCore::]):
        (-[DOMSVGRect _initWithFloatRect:WebCore::]):
        (+[DOMSVGRect _SVGRectWith:WebCore::]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/StyleBase.h:
        (WebCore::StyleBase::isSVGColor):
        (WebCore::StyleBase::isSVGPaint):
        * ksvg2/bindings/js/JSSVGElementWrapperFactory.cpp: Removed.
        * ksvg2/bindings/js/JSSVGElementWrapperFactory.h: Removed.
        * ksvg2/bindings/js/JSSVGNumber.cpp: Removed.
        * ksvg2/bindings/js/JSSVGNumber.h: Removed.
        * ksvg2/bindings/js/JSSVGPoint.cpp: Removed.
        * ksvg2/bindings/js/JSSVGPoint.h: Removed.
        * ksvg2/bindings/js/JSSVGRect.cpp: Removed.
        * ksvg2/bindings/js/JSSVGRect.h: Removed.
        * ksvg2/svg/SVGColor.h:
        (WebCore::SVGColor::isSVGColor):
        * ksvg2/svg/SVGFECompositeElement.idl:
        * ksvg2/svg/SVGFEFloodElement.idl:
        * ksvg2/svg/SVGLocatable.idl:
        * ksvg2/svg/SVGMarkerElement.idl:
        * ksvg2/svg/SVGPaint.h:
        (WebCore::SVGPaint::isSVGPaint):
        * ksvg2/svg/SVGRectElement.idl:
        * ksvg2/svg/SVGZoomEvent.idl: Removed.

2006-10-17  David Hyatt  <hyatt@apple.com>

        Prepare for the elimination of the RenderLayer for <html> elements.  The layer is still present,
        but this patch makes everything work without a root layer being around.

        Reviewed by beth

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::frameVisibleRect):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::intersectsDamageRect):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setInnerNode):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):

2006-10-17  David Hyatt  <hyatt@apple.com>

        Back out my previous patch to the WebCore memory cache.

        * loader/Cache.cpp:
        (WebCore::Cache::flush):
        (WebCore::Cache::setSize):
        (WebCore::Cache::getLRUListFor):
        (WebCore::Cache::removeFromLRUList):
        (WebCore::Cache::insertInLRUList):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::deref):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::deref):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setRequest):
        (WebCore::CachedResource::deref):
        * loader/CachedResource.h:
        (WebCore::CachedResource::allowInLRUList):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::deref):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::deref):
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::deref):
        * loader/CachedXSLStyleSheet.h:

2006-10-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders.

        Make north and east resize cursors use correct image

        * platform/win/CursorWin.cpp:
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):

2006-10-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady

        Various cursor fixes

        * page/FrameView.cpp:
        (WebCore::FrameView::handleMouseMoveEvent):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::pointerCursor):
        * platform/win/CursorWin.cpp:
        (WebCore::supportsAlphaCursors):
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::pointerCursor):

2006-10-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4776665>
        REGRESSION: In Mail, caret is visible when the message body isn't focused

        * page/Frame.cpp:
        (WebCore::Frame::paintCaret): If a caret blink timer is ever on in error
        (like when the frame that contains the caret isn't focused) then we don't 
        want to paint the caret.  We should eventually move to using a single bool
        for caret painting.

2006-10-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4774354>
        REGRESSION: In Gmail, caret reappears when dragging a selection over some text in the message body

        Functions call recomputCaretRect to see if the caret rect has changed, 
        and, if it has, they invalidate (repaint) it.  recomputeCaretRect was 
        returning false if the caret turned into a range selection or was blown 
        away.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::recomputeCaretRect): Don't early return if
        !isCaret().  Obtain the FrameView* using the m_frame pointer, because m_sel 
        may now be null.

2006-10-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady.

        BrowserExtension cleanup.
        
        - Removed unnecessary #include of BrowserExtension in Frame.h, added
        #includes to compensate in other files.
        
        - Removed unused versions of createNewWindow.
        
        * bindings/js/kjs_window.cpp:
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/WebCoreFrameBridge.mm:
        * html/HTMLFormElement.cpp:
        * loader/mac/LoaderFunctionsMac.mm:
        * page/Frame.h:
        * page/FramePrivate.h:

2006-10-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam.
        
        - Fixed "FIXME: Violates Liskov Substitution principle."
        
        IFRAME was never a true subclass of FRAME, since they disagreed on a
        number of behaviors, which, confusingly, IFRAME just overrode and contradicted. 

        The fix here is to factor out things common to IFRAME and FRAME into a
        common base class, HTMLFrameElementBase.
        
        I also changed some " *" to "* " and added #includes in files that implicitly
        assumed that HTMLIFrameElement.h #included HTMLFrameElement.h.

2006-10-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by sullivan
        
        <rdar://problem/4776765>
        REGRESSION: Caret's ghost left behind after inserting a paragraph separator (11237)

        We set m_needsLayout to false and call caretRect() in the hopes that it will give us 
        the old caret rect.  It in fact corrects the caret rect for an offset that it 
        believes is due to scrolling but which is actually due to a change in selection
        without an accompanying layout.  So it returns the new caret rect regardless of
        what m_needsLayout is set to.
        
        * editing/SelectionController.cpp:
        (WebCore::repaintRectForCaret): Moved the code from caretRepaintRect that
        adds a one pixel slop to this new function.
        (WebCore::SelectionController::caretRepaintRect): Moved this code to
        repaintRectForCaret.
        (WebCore::SelectionController::recomputeCaretRect): Compare the old
        caret rect to the new one that's computed with a fresh layout.  If
        they are different, invalidate both repaint rects.

2006-10-17  David Harrison  <harrison@apple.com>

        Reviewed by Adele.

        <rdar://problem/4770453> VO not honoring secure edit fields in web pages

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject isPasswordField]):
        New. Checks for input with inputType() of PASSWORD.
        
        (-[WebCoreAXObject subrole]):
        Returns NSAccessibilitySecureTextFieldSubrole if [self isPasswordField].
        
        (-[WebCoreAXObject roleDescription]):
        Pass [self subrole] instead of nil when calling NSAccessibilityRoleDescription.
        
        (-[WebCoreAXObject value]):
        Return nil if [self isPasswordField].
        
        (-[WebCoreAXObject accessibilityAttributeNames]):
        Return generic attributes if [self isPasswordField].

        (-[WebCoreAXObject accessibilityParameterizedAttributeNames]):
        Return empty array if [self isPasswordField].

2006-10-17  David Hyatt  <hyatt@apple.com>

        Fix "flash to white' problem on yahoo.com as it finishes loading.  Refine the FOUC suppression
        code so that it will only run if the body still has no renderer.

        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):

2006-10-17  David Hyatt  <hyatt@apple.com>

        Fix a bug where the WebCore memory cache could grow without bound during extended browsing
        sessions.

        Reviewed by mjs

        * loader/Cache.cpp:
        (WebCore::Cache::flush):
        (WebCore::Cache::setSize):
        (WebCore::Cache::getLRUListFor):
        (WebCore::Cache::removeFromLRUList):
        (WebCore::Cache::insertInLRUList):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setRequest):
        (WebCore::CachedResource::deref):
        * loader/CachedResource.h:
        (WebCore::CachedResource::allowInLRUList):
        * loader/CachedScript.cpp:
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        * loader/CachedXSLStyleSheet.h:

2006-10-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/3655385>
        Editing: -indent: method unimplemented

        Added Frame and bridge methods.

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge indent]):
        (-[WebCoreFrameBridge outdent]):
        * page/Frame.cpp:
        (WebCore::Frame::indent): 
        (WebCore::Frame::outdent):
        * page/Frame.h:

2006-10-16  Adam Roben  <aroben@apple.com>

        Reviewed by John.

        More menulist cleanup/tweaking.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): Renamed 'index'
        parameter to 'optionIndex' for clarity.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Skip over
        items that are not enabled <option> elements when using arrow keys, and
        make sure we pass an option index to setSelectedIndex.
        * platform/PopupMenu.h:
        (WebCore::PopupMenu::setWasClicked): Specify default argument.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setTextFromOption): Strip whitespace from
        option text before setting the control text so that options within
        <optgroup>s don't appear indented in the actual control.

2006-10-16  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Adam.

        Win32 build fix.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/BrowserExtensionWin.cpp:
        (WebCore::BrowserExtensionWin::createNewWindow):
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::submitForm):
        (WebCore::FrameWin::createNewWindow):
        * bridge/win/FrameWin.h:
        * loader/loader.cpp:
        (WebCore::Loader::receivedResponse):
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::openURLRequest):
        (WebCore::ServeSynchronousRequest):
        (WebCore::CheckIfReloading):
        (WebCore::IsResponseURLEqualToURL):
        (WebCore::ResponseMIMEType):
        (WebCore::ResponseIsMultipart):
        (WebCore::CacheObjectExpiresTime):
        (CachedResource::setResponse):
        (CachedResource::setAllData):
        * rendering/RenderThemeWin.cpp:
        (WebCore::doneDrawing):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):

2006-10-16  David Hyatt  <hyatt@apple.com>

        Fix for bug 9347, positioned elements have the wrong containing block.  This is a change from CSS2 to
        CSS2.1.  In the absence of any other enclosing positioned elements, the containing block for a positioned
        element is the initial containing block (our RenderView).

        Reviewed by mjs

        Test cases added to fast/block/positioning for quirks and strict modes.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        (WebCore::RenderBox::calcAbsoluteVertical):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        (WebCore::RenderObject::container):

2006-10-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Anders.

        Misc Gdk/Linux build fixes.

        * platform/gdk/BrowserExtensionGdk.h:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::submitForm):
        (WebCore::FrameGdk::urlSelected):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/RenderPopupMenuGdk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::addSeparator):
        (WebCore::PopupMenu::addGroupLabel):
        (WebCore::PopupMenu::addOption):
        * platform/gdk/RenderPopupMenuGdk.h:
        * platform/gdk/RenderThemeGdk.cpp:
        * platform/gdk/RenderThemeGdk.h:
        (WebCore::RenderThemeGdk::RenderThemeGdk):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (BrowserExtensionGdk::createNewWindow):
        (BrowserExtensionGdk::BrowserExtensionGdk):
        (BrowserExtensionGdk::setTypedIconURL):
        (BrowserExtensionGdk::setIconURL):
        (BrowserExtensionGdk::getHistoryLength):
        (WebCore::CheckIfReloading):
        (WebCore::CacheObjectExpiresTime):
        (WebCore::ResponseURL):
        (WebCore::IsResponseURLEqualToURL):
        (WebCore::ResponseIsMultipart):
        (WebCore::ResponseMIMEType):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::setAllData):
        (FileChooser::disconnectUploadControl):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:

2006-10-15  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11294
        Add getModifierState method to KeyboardEvent

        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        * bindings/objc/PublicDOMInterfaces.h:
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::getModifierState):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:

2006-10-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Changed PlatformResponse handling for Qt. Don't just store
        a QString object containing the data but a new PlatformResponseQt struct
        containing data and url, and store it as pointer. This is compatible
        to the OS X handling and removes the Qt plaform specific hacks from
        CachedCSSStyleSheet, CachedResource & loader.

        Add new file LoaderFunctionsQt, similar to LoaderFunctionsMac, and move
        all methods from TemporaryLinkStubs related to loading in there, and implement
        some like ServeSynchronousRequest (yay for xslt handling!).

        * CMakeLists.txt:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/CachedResource.h:
        (WebCore::CachedResource::CachedResource):
        * loader/loader.cpp:
        (WebCore::Loader::receivedResponse):
        * platform/ResourceLoaderClient.h:
        * platform/ResourceLoaderInternal.h:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::~FrameQt):
        (WebCore::FrameQt::createEmptyDocument):
        * platform/qt/FrameQt.h:
        (WebCore::QtFrame):
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::setFrame):
        (WebCore::FrameQtClientDefault::openURL):
        (WebCore::FrameQtClientDefault::loadFinished):
        (WebCore::FrameQtClientDefault::receivedAllData):
        * platform/qt/FrameQtClient.h:
        * platform/qt/LoaderFunctionsQt.cpp: Added.
        (WebCore::ServeSynchronousRequest):
        (WebCore::NumberOfPendingOrLoadingRequests):
        (WebCore::CheckIfReloading):
        (WebCore::CheckCacheObjectStatus):
        (WebCore::IsResponseURLEqualToURL):
        (WebCore::ResponseURL):
        (WebCore::ResponseMIMEType):
        (WebCore::ResponseIsMultipart):
        (WebCore::CacheObjectExpiresTime):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::setAllData):
        * platform/qt/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::remove):
        * platform/qt/ResourceLoaderQt.cpp:
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::receivedResponse):
        * platform/qt/TemporaryLinkStubs.cpp:

2006-10-14  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11217
        Cleanup svg coding style

        Cleanup coding style in svg basic datastructure classes.

        * ksvg2/svg/SVGAngle.cpp:
        (WebCore::SVGAngle::valueAsString):
        (WebCore::SVGAngle::context):
        (WebCore::SVGAngle::setContext):
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGColor.cpp:
        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::ownerSVGElement):
        (WebCore::SVGElement::viewportElement):
        (WebCore::SVGElement::parseMappedAttribute):
        (WebCore::SVGElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGElement.h:
        (WebCore::svg_dynamic_cast):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::parseMappedAttribute):
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::setValueAsString):
        (WebCore::SVGLength::dpi):
        (WebCore::SVGLength::updateValue):
        (WebCore::SVGLength::updateValueInSpecifiedUnits):
        (WebCore::SVGLength::context):
        (WebCore::SVGLength::setContext):
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGLengthList.cpp:
        * ksvg2/svg/SVGLengthList.h:
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::nearestViewportElement):
        (WebCore::SVGLocatable::farthestViewportElement):
        (WebCore::SVGLocatable::getBBox):
        (WebCore::SVGLocatable::getCTM):
        (WebCore::SVGLocatable::getScreenCTM):
        * ksvg2/svg/SVGNumberList.cpp:
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio):
        (WebCore::SVGPreserveAspectRatio::getCTM):
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGStringList.cpp:
        (WebCore::SVGStringList::reset):
        * ksvg2/svg/SVGStringList.h:
        * ksvg2/svg/SVGStylable.cpp:
        * ksvg2/svg/SVGStylable.h:
        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::requiredFeatures):
        (WebCore::SVGTests::requiredExtensions):
        (WebCore::SVGTests::systemLanguage):
        (WebCore::SVGTests::isValid):
        (WebCore::SVGTests::parseMappedAttribute):
        * ksvg2/svg/SVGTests.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute):
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::parseMappedAttribute):
        * ksvg2/svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::parseMappedAttribute):
        * ksvg2/svg/SVGZoomAndPan.h:

2006-10-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Implement some functions in FrameQt / ScrollViewQt.

        Added comments what needs to be done in quite some places,
        marked some functions as no-ops.

        * CMakeLists.txt:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::runJavaScriptConfirm):
        (WebCore::FrameQt::locationbarVisible):
        (WebCore::FrameQt::createFrame):
        (WebCore::FrameQt::passSubframeEventToSubframe):
        (WebCore::FrameQt::menubarVisible):
        (WebCore::FrameQt::personalbarVisible):
        (WebCore::FrameQt::statusbarVisible):
        (WebCore::FrameQt::toolbarVisible):
        (WebCore::FrameQt::markedTextRange):
        (WebCore::FrameQt::lastEventIsMouseUp):
        (WebCore::FrameQt::openURLRequest):
        (WebCore::FrameQt::scheduleClose):
        (WebCore::FrameQt::unfocusWindow):
        (WebCore::FrameQt::focusWindow):
        (WebCore::FrameQt::overrideMediaType):
        (WebCore::FrameQt::runJavaScriptPrompt):
        (WebCore::FrameQt::bindingRootObject):
        (WebCore::FrameQt::addPluginRootObject):
        (WebCore::FrameQt::registerCommandForUndo):
        (WebCore::FrameQt::registerCommandForRedo):
        (WebCore::FrameQt::clearUndoRedoOperations):
        (WebCore::FrameQt::respondToChangedSelection):
        (WebCore::FrameQt::respondToChangedContents):
        (WebCore::FrameQt::shouldChangeSelection):
        (WebCore::FrameQt::canGoBackOrForward):
        (WebCore::FrameQt::canPaste):
        (WebCore::FrameQt::canRedo):
        (WebCore::FrameQt::canUndo):
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::runJavaScriptAlert):
        (WebCore::FrameQtClientDefault::runJavaScriptConfirm):
        (WebCore::FrameQtClientDefault::runJavaScriptPrompt):
        (WebCore::FrameQtClientDefault::menubarVisible):
        (WebCore::FrameQtClientDefault::toolbarVisible):
        (WebCore::FrameQtClientDefault::statusbarVisible):
        (WebCore::FrameQtClientDefault::personalbarVisible):
        (WebCore::FrameQtClientDefault::locationbarVisible):
        * platform/qt/FrameQtClient.h:
        * platform/qt/ImageSourceQt.cpp:
        * platform/qt/RenderThemeQt.cpp:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::scrollPointRecursively):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::setAllData):

2006-10-14  David Harrison  <harrison@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4775213> REGRESSION: Can't from tab from last link on the page to URL address field
        <rdar://problem/4783926> REGRESSION: Typing tab key enters no text

        The problem is that EventTargetNode::defaultEventHandler() calls event->setDefaultHandled() regardless
        of whether frame->view()->advanceFocus() actually changed the focus.

        Trivial fix is to preventDefault() only if advanceFocus() returns true.

        * No test is possible because DumpRenderTree sets the WebView preference to
        tab to links, and that preference cannot be changed dynamically after
        the webview is initialized. Also, the "tab from last link" is not testable
        because DumpRenderTree uses the WebView for the whole window, so tabs can't
        shift focus out of the WebView regardless.

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

2006-10-14  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mitz.

        Fix Qt/Linux build & some little fixes:

        - Adapt to Maciej's FrameLoadRequest changes.
        - Fix response handling - don't try to compare with '0' - for us it's a non-ptr QString object.
        - Actually call setAllData from loader/loader.cpp (David Carson forgot that in his last commit)
        - Fix CacheObjectExpiresTime/ResponseIsMultipart signature.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/CachedResource.h:
        (WebCore::CachedResource::CachedResource):
        * loader/loader.cpp:
        (WebCore::Loader::receivedAllData):
        (WebCore::Loader::receivedResponse):
        * platform/qt/BrowserExtensionQt.cpp:
        (WebCore::BrowserExtensionQt::createNewWindow):
        * platform/qt/BrowserExtensionQt.h:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::submitForm):
        (WebCore::FrameQt::urlSelected):
        (WebCore::FrameQt::openURLRequest):
        * platform/qt/FrameQt.h:
        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setURLForRect):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::CacheObjectExpiresTime):
        (WebCore::ResponseIsMultipart):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::setAllData):

2006-10-14  David Carson  <dacarson@gmail.com>

        Reviewed by Maciej.

        Fix: http://bugs.webkit.org/show_bug.cgi?id=11257
        Removed Mac platform dependance, changed WebCore functions to
        use PlatformResponse/PlatformData rather than NSURLResponse/
        NSData. 

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::response):
        (WebCore::CachedResource::allData):
        * loader/LoaderFunctions.h:
        * loader/loader.cpp:
        (WebCore::Loader::receivedResponse):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::ResponseMIMEType):
        (WebCore::ResponseIsMultipart):
        (WebCore::CacheObjectExpiresTime):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::setAllData):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::CacheObjectExpiresTime):
        (WebCore::ResponseIsMultipart):
        (WebCore::ResponseMIMEType):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::setAllData):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CacheObjectExpiresTime):
        (WebCore::ResponseIsMultipart):
        (WebCore::ResponseMIMEType):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::setAllData):

2006-10-14  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Fix GDK build by defining FrameGdkClient() constructor as non-virtual.
        Pure virtual classes require non-pure destructor, who knew.

        Make CURL networking dependent on USE(CURL) instead of PLATFORM(GDK),
        so that other platforms can also use CURL, if they wish.

        Silence compiler warning about unused variable in SharedTimerLinux.cpp

        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/gdk/FrameGdk.h:
        (WebCore::FrameGdkClient::~FrameGdkClient):
        * platform/gdk/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::downloadTimerCallback):
        * platform/gdk/SharedTimerLinux.cpp:
        (WebCore::stopSharedTimer):

2006-10-13  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Build fix from my last check-in. Make hasOutlineAnnotation() non-
        inline so that we don't have to include Document.h in 
        RenderObject.h
        Doing so causes a build failure in WebKit, and it probably isn't a 
        good idea anyway.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::hasOutlineAnnotation):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasOutline):

2006-10-13  Beth Dakin  <bdakin@apple.com>

        Patch written mostly by Ken Kraisler, but also by me.

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=10216 and <rdar://
        problem/3391162> PDF created by printing should have live 
        hyperlinks

        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::focusRingBoundingRect):
        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setURLForRect):
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setURLForRect): Implement method to add 
        URL link to PDF document.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint): Ask hasOutline() instead of 
        querying the outline width
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject): Same as above.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines): Call the new paintOutline()
        (WebCore::RenderFlow::paintOutline): Take care of focus ring and 
        pdf url rects, and outline painting.
        * rendering/RenderFlow.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addPDFURLRect): Declaration to apply a PDF 
        link to a rectanglular region.
        (WebCore::RenderObject::paintOutline): Take care of pdf rects as 
        well as focus ring painting.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasOutlineAnnotation): Returns true is the 
        element is a link and we are printing.
        (WebCore::RenderObject::hasOutline): Returns true is the style has 
        an outline and hasOutlineAnnotation() is true.
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::hasOutline): Returns true if outlineWidth is 
        greater than 0 and outlineStyle is greater than BHIDDEN.

2006-10-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by ggaren and harrison
        
        <rdar://problem/4744008>
        9A270: Mail crashes when I try to paste large items from Safari

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles):
        Even though we put nodes in the hash map in pre-order, they don't necessary
        come out of the iterator that way.  If a node is a redundant style span
        and one of its pruned ancestors comes off the hash map after it, and that
        ancestor is a redundant style span or font tag, we will try to remove it
        even though it has already been removed and we'll crash.
        The test case added with the fix depends on our hash map implementation
        because it requires that a particular redundant style span come out of 
        the iterator before its parent. So, it may eventually not provide 
        coverage for the fix.

2006-10-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - split FrameLoadRequest off from ResourceRequest - it's a ResourceRequest plus frame name plus lockHistory bool

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::WindowFunc::callAsFunction):
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::submitForm):
        (WebCore::FrameMac::openURLRequest):
        (WebCore::FrameMac::urlSelected):
        * bridge/win/BrowserExtensionWin.h:
        * page/Frame.cpp:
        (WebCore::Frame::changeLocation):
        (WebCore::Frame::urlSelected):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::submitForm):
        * page/Frame.h:
        * page/FrameLoadRequest.h: Added.
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::lockHistory):
        (WebCore::FrameLoadRequest::setLockHistory):
        * page/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):

2006-10-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej

        * loader/mac/WebFrameLoader.mm:
        (-[WebFrameLoader loadDocumentLoader:]):
        Replace ASSERT(!policyDocumentLoader) with code that handles this case. This can
        happen when loading a page during a decidePolicyForNavigationAction callback.

2006-10-13  Dave Hyatt  <hyatt@apple.com>

        Transparency layer work.

        Reviewed by aroben

        * platform/GraphicsContext.h:
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        * platform/cg/GraphicsContextPlatformPrivate.h:
        (WebCore::GraphicsContextPlatformPrivate::beginTransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::endTransparencyLayer):

2006-10-13  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11217
        Cleanup svg coding style

        Cleanup coding style in svg paint server classes.

        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::parseMappedAttribute):
        (WebCore::SVGGradientElement::notifyAttributeChange):
        (WebCore::SVGGradientElement::canvasResource):
        (WebCore::SVGGradientElement::rebuildStops):
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        (WebCore::SVGLinearGradientElement::parseMappedAttribute):
        (WebCore::SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseMappedAttribute):
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::notifyClientsToRepaint):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        (WebCore::SVGPatternElement::canvasResource):
        (WebCore::SVGPatternElement::getCTM):
        * ksvg2/svg/SVGPatternElement.h:
        (WebCore::SVGPatternElement::rendererIsNeeded):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        (WebCore::SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGStopElement.h:

2006-10-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin, John.

        - Merged more frame and iframe code
        - Fixed a bug where iframes returned incorrect values for renderer-dependent 
        properties during javascript: loads because they didn't have renderers at 
        load time
        
        PLT insists this is a small performance win. Don't believe its lies.

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::frameGetter): Renamed frameWidth and frameHeight to
        width and height, for consistency with the rest of the DOM.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::queuePostAttachCallback): Added a post-attach callback
        queue that gets drained after the render tree is fully constructed. Currently,
        this is only used for frame loading.
        (WebCore::ContainerNode::attach):
        * dom/ContainerNode.h:
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::insertedIntoDocument): Removed frame loading from
        attach() because loading iframes during attach() causes a crash. 
        Moved frame loading logic into insertedIntoDocument(). That's a more 
        logical place for it because  document insertion is what 
        triggers frame loading. Made frame loading a post-attach callback, instead
        of an immediate action, to fix the incorrect values bug.
        (WebCore::HTMLFrameElement::attach): Added setWidget call that used to be
        in HTMLIFrameElement::attach. IFRAME requires this call. FRAME will soon 
        require this call, once I remove the call from WebKit.
        (WebCore::HTMLFrameElement::setLocation):
        (WebCore::HTMLFrameElement::width):
        (WebCore::HTMLFrameElement::height):
        * html/HTMLFrameElement.h: Made openURL non-virtual to avoid the unnecessary
        killing of puppies.
        * html/HTMLIFrameElement.cpp: Merged code into HTMLFrameElement
        (WebCore::HTMLIFrameElement::rendererIsNeeded):
        (WebCore::HTMLIFrameElement::createRenderer):
        (WebCore::HTMLIFrameElement::insertedIntoDocument):
        (WebCore::HTMLIFrameElement::removedFromDocument):
        (WebCore::HTMLIFrameElement::attach):
        * page/FrameView.h: Removed unused method.

2006-10-13  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        <rdar://problem/4746860> Mail crash in WebCore::CSSMutableStyleDeclaration::merge(WebCore::CSSMutableStyleDeclaration*, bool)

        Tests added or changed:
        * editing/style/style-boundary-005.html: Added. Matches steps from bug.
        * editing/execCommand/hilitecolor-expected.txt: Updated (no empty Apple style spans).
        * editing/style/remove-underline-across-paragraph-in-bold-expected.txt: Updated (no empty Apple style spans).
        * editing/style/remove-underline-in-bold-expected.txt: Updated (no empty Apple style spans).
        * editing/style/typing-style-003-expected.txt: Updated (no empty Apple style spans).

        * dom/Text.cpp:
        (WebCore::Text::splitText):
        Comment changes.
        
        * editing/ApplyStyleCommand.cpp:
        (WebCore::isUnstyledStyleSpan):
        Renamed from isEmptyStyleSpan.
        
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        Rename emptySpans local to unstyledSpans.
        
        (WebCore::dummySpanAncestorForNode):
        New. To locate Apple style span created when splitting a text node.
        
        (WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):
        Renamed from cleanUpEmptyStyleSpans. Algorithm changed to scan children
        of dummy span's parents, rather than traversing up from start and
        end locations. Old algorithm would miss empty spans in the bug case.
        
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        Use dummySpanAncestorForNode() and cleanupUnstyledAppleStyleSpans().
        
        (WebCore::ApplyStyleCommand::removeCSSStyle):
        Renamed isEmptyStyleSpan() to isUnstyledStyleSpan().
        
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        Comment changes.
        
        * editing/ApplyStyleCommand.h:
        Renamed cleanUpEmptyStyleSpans() to cleanupUnstyledAppleStyleSpans().
          
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles):
        Allow for Apple style span to be unstyled, because old email may have this in the DOM.
        Use !node->hasChildNodes() instead of !node->firstChild().
        
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply):
        Comment changes.
        
        * rendering/RenderTreeAsText.cpp:
        (WebCore::isEmptyOrUnstyledAppleStyleSpan):
        (WebCore::operator<<):
        Flag empty or unstyled AppleStyleSpa nbecause we never want to leave them in the DOM

2006-10-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fix Qt/Linux build after Adele's popup menu changes.

        * CMakeLists.txt:
        * platform/qt/FileChooserQt.cpp:
        (WebCore::FileChooser::disconnectUploadControl):
        * platform/qt/PopupMenuQt.cpp: Added.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::addSeparator):
        (WebCore::PopupMenu::addGroupLabel):
        (WebCore::PopupMenu::addOption):
        * platform/qt/RenderPopupMenuQt.cpp: Removed.
        * platform/qt/RenderPopupMenuQt.h: Removed.
        * platform/qt/RenderThemeQt.cpp:

2006-10-13  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Darin.

        fixed build failure 

        * WebCore.xcodeproj/project.pbxproj:
        * loader/mac/WebFrameLoader.mm:

2006-10-13  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - converted WebFormState from Objective-C to C++

        * WebCore.exp: Added a new symbol, changed one symbol from C to C++.

        * WebCore.xcodeproj/project.pbxproj: Made lots of headers "private" instead of "project".
        Added UChar.h and FrameLoaderTypes.h.

        * loader/FrameLoaderTypes.h: Added. Has enums from WebFrameLoader.h.

        * loader/mac/WebFormState.h: Converted class to C++.
        * loader/mac/WebFormState.mm: Ditto.

        * loader/mac/WebFrameLoader.h:
        * loader/mac/WebFrameLoader.mm:
        (-[WebFrameLoader loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        (-[WebFrameLoader continueFragmentScrollAfterNavigationPolicy:formState:]):
        (-[WebFrameLoader _loadRequest:triggeringAction:loadType:formState:]):
        (-[WebFrameLoader invalidatePendingPolicyDecisionCallingDefaultAction:]):
        (-[WebFrameLoader checkNewWindowPolicyForRequest:action:frameName:formState:andCall:withSelector:]):
        (-[WebFrameLoader continueAfterNewWindowPolicy:]):
        (-[WebFrameLoader checkNavigationPolicyForRequest:documentLoader:formState:andCall:withSelector:]):
        (-[WebFrameLoader continueAfterNavigationPolicy:]):
        (-[WebFrameLoader continueLoadRequestAfterNavigationPolicy:formState:]):
        (-[WebFrameLoader loadDocumentLoader:withLoadType:formState:]):
        (-[WebFrameLoader continueLoadRequestAfterNewWindowPolicy:frameName:formState:]):
        (-[WebFrameLoader postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        Changed Objective-C WebFormState uses to C++ WebCore::FormState.

2006-10-13  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - Fix for <rdar://problem/4768591> REGRESSION: List box selection color should just be a darker version of regular selection color

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::activeListBoxSelectionForegroundColor):
        (WebCore::RenderTheme::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::inactiveListBoxSelectionForegroundColor):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::activeListBoxSelectionBackgroundColor):

2006-10-13  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11217
        Cleanup svg coding style

        Cleanup coding style in svg structure classes.

        * ksvg2/svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement):
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGDescElement.cpp:
        (WebCore::SVGDescElement::SVGDescElement):
        * ksvg2/svg/SVGDescElement.h:
        * ksvg2/svg/SVGDocument.cpp:
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::correspondingElement):
        (WebCore::SVGElementInstance::correspondingUseElement):
        (WebCore::SVGElementInstance::parentNode):
        (WebCore::SVGElementInstance::childNodes):
        (WebCore::SVGElementInstance::previousSibling):
        (WebCore::SVGElementInstance::nextSibling):
        (WebCore::SVGElementInstance::firstChild):
        (WebCore::SVGElementInstance::lastChild):
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstanceList.cpp:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement):
        (WebCore::SVGGElement::parseMappedAttribute):
        (WebCore::SVGDummyElement::SVGDummyElement):
        * ksvg2/svg/SVGGElement.h:
        (WebCore::SVGGElement::rendererIsNeeded):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::createRenderer):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::pixelUnitToMillimeterX):
        (WebCore::SVGSVGElement::pixelUnitToMillimeterY):
        (WebCore::SVGSVGElement::currentScale):
        (WebCore::SVGSVGElement::setCurrentScale):
        (WebCore::SVGSVGElement::currentTranslate):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::SVGSVGElement::suspendRedraw):
        (WebCore::SVGSVGElement::unsuspendRedraw):
        (WebCore::SVGSVGElement::unsuspendRedrawAll):
        (WebCore::SVGSVGElement::forceRedraw):
        (WebCore::SVGSVGElement::getIntersectionList):
        (WebCore::SVGSVGElement::getEnclosureList):
        (WebCore::SVGSVGElement::checkIntersection):
        (WebCore::SVGSVGElement::checkEnclosure):
        (WebCore::SVGSVGElement::deselectAll):
        (WebCore::SVGSVGElement::createSVGLength):
        (WebCore::SVGSVGElement::createSVGAngle):
        (WebCore::SVGSVGElement::createSVGMatrix):
        (WebCore::SVGSVGElement::createSVGTransform):
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        (WebCore::SVGSVGElement::setCurrentTime):
        * ksvg2/svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::rendererIsNeeded):
        * ksvg2/svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::SVGSwitchElement):
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGSwitchElement.h:
        (WebCore::SVGSwitchElement::rendererIsNeeded):
        * ksvg2/svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        (WebCore::SVGSymbolElement::parseMappedAttribute):
        * ksvg2/svg/SVGSymbolElement.h:
        (WebCore::SVGSymbolElement::shouldAttachChild):
        * ksvg2/svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::SVGTitleElement):
        * ksvg2/svg/SVGTitleElement.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::parseMappedAttribute):
        (WebCore::SVGUseElement::closeRenderer):
        * ksvg2/svg/SVGUseElement.h:
        (WebCore::SVGUseElement::rendererIsNeeded):

2006-10-12  Adele Peterson  <adele@apple.com>

        Reviewed by Anders.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=11172
          REGRESSION (NativeListBox): OPTION text paints over the edge of the select element at http://jobs.apple.com/
        
         Test: fast/forms/listbox-width-change.html

        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::updateFromElement):
          When the options change, call setNeedsLayoutAndMinMaxRecalc.

2006-10-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - moved a bunch of WebFrameBridge code down to WebCoreFrameBridge, now that it no longer has any WebKit dependencies

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (stringByCollapsingNonPrintingCharacters):
        (-[WebCoreFrameBridge setTitle:]):
        (-[WebCoreFrameBridge didFirstLayout]):
        (-[WebCoreFrameBridge notifyIconChanged:]):
        (-[WebCoreFrameBridge originalRequestURL]):
        (-[WebCoreFrameBridge isLoadTypeReload]):
        (-[WebCoreFrameBridge frameDetached]):
        (-[WebCoreFrameBridge tokenizerProcessedData]):
        (-[WebCoreFrameBridge receivedData:textEncodingName:]):
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:]):
        (-[WebCoreFrameBridge objectLoadedFromCacheWithURL:response:data:]):
        (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:postData:]):
        (-[WebCoreFrameBridge reportClientRedirectToURL:delay:fireDate:lockHistory:isJavaScriptFormAction:]):
        (-[WebCoreFrameBridge reportClientRedirectCancelled:]):
        (-[WebCoreFrameBridge loadURL:referrer:reload:userGesture:target:triggeringEvent:form:formValues:]):
        (-[WebCoreFrameBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        (-[WebCoreFrameBridge syncLoadResourceWithMethod:URL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        (-[WebCoreFrameBridge incomingReferrer]):
        (-[WebCoreFrameBridge isReloading]):
        (-[WebCoreFrameBridge handledOnloadEvents]):
        (-[WebCoreFrameBridge mainResourceURLResponse]):
        (-[WebCoreFrameBridge loadEmptyDocumentSynchronously]):
        * loader/mac/LoaderNSURLExtras.h:
        * loader/mac/LoaderNSURLRequestExtras.h: Added.
        * loader/mac/LoaderNSURLRequestExtras.m: Added.
        (isConditionalRequest):
        (setHTTPReferrer):
        * loader/mac/WebFrameLoader.mm:
        * loader/mac/WebSubresourceLoader.mm:

2006-10-12  Adele Peterson  <adele@apple.com>

        RS by Geoff.

        Renamed menuListIsDetaching to disconnectMenuList, 
        uploadControlDetaching to disconnectUploadControl, and fileChooserDetachingSoon to disconnectFileChooser.  
        These names match similar methods in WebCore a little better.

        * platform/FileChooser.h:
        * platform/PopupMenu.h: (WebCore::PopupMenu::disconnectMenuList):
        * platform/mac/FileChooserMac.mm: (-[OpenPanelController disconnectFileChooser]):
        (WebCore::FileChooser::disconnectUploadControl):
        * platform/win/TemporaryLinkStubs.cpp: (FileChooser::disconnectUploadControl):
        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::~RenderFileUploadControl):
        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::~RenderMenuList):

2006-10-12  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        WebCore part of fix for <rdar://problem/4450613> need a means to attach user data to any menu that is popuped up in HTML

        Added private delegate method for clients that want access to a PopupMenu's NSMenu.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::willPopupMenu):
        * bridge/mac/WebCoreFrameBridge.h:

        * platform/mac/PopupMenuMac.mm: (WebCore::PopupMenu::show): Calls willPopupMenu with the NSMenu about to be popped up.

2006-10-12  Adele Peterson  <adele@apple.com>

        Reviewed by Alice.

        - Fix for <rdar://problem/4707372> 
          After timers fix, crash in -[NSMenu performActionForItemAtIndex:] after moving/detroying active popup menu

        * platform/PopupMenu.h: (WebCore::PopupMenu::menuListIsDetaching): Added. Zeros out the pointer to the menu list.
        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::~RenderMenuList): Calls menuListIsDetaching.
        * platform/mac/PopupMenuMac.mm: (WebCore::PopupMenu::show): Added a RefPtr to protect the PopupMenu while the NSMenu is up,
          in case the RenderMenuList goes away.  Also, checks the pointer to the menu list immediately afterwards.

2006-10-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Trying to fix "DRT hangs on certain testcases" like fast/dom/Document/document-reopen.html
        document.open(); document.write(..); and NO document.close(). On the Qt platform this
        leaves a HTMLDocument which is still in parsing mode (parsing() always returns true).
        DRT waits forever, but m_frame->isComplete() is never true due the parsing mode problem.

        Hmpf, this took me nine hours to debug today.
        Result: Couldn't find the real fix, going for a workaround for now.
        
        540 minutes, 1 line of code changed after all -> 0,0019 lines per minute.

        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::handledOnloadEvents): Call endIfNotLoading() manually.
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::receivedData): Use write() again instead of addData().

2006-10-12  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Move popup menu code out of rendering/ and into platform/.
        RenderPopupMenu becomes PopupMenu, the
        RenderPopupMenuMac/RenderPopupMenuWin subclasses and all the associated
        virtual methods go away, RenderTheme gets to stop worrying about popup
        menus, PopupMenu becomes ref-counted, and everyone becomes happy.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Move files within project.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * html/HTMLSelectElement.cpp: Remove unnecessary #include.
        * platform/PopupMenu.cpp: Moved from rendering/RenderPopupMenu.cpp.
        Also renamed showPopup()/hidePopup() to show()/hide() to disambiguate
        from RenderMenuList::showPopup/hidePopup.
        (WebCore::PopupMenu::create): New static creation method to hand back a
        PassRefPtr<PopupMenu>.
        (WebCore::PopupMenu::addItems): This platform-independent method should
        be called by PopupMenu::populate when the platform-specific
        implementation is ready to receive the menu items. Fixed an ASSERT
        while I was at it.
        * platform/PopupMenu.h: Moved from rendering/RenderPopupMenu.h. No more
        need for virtual methods.
        (WebCore::PopupMenu::wasClicked):
        (WebCore::PopupMenu::setWasClicked):
        (WebCore::PopupMenu::popupHandle):
        * platform/mac/PopupMenuMac.mm: Moved from
        rendering/RenderPopupMenuMac.mm. Much renaming ensues.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::addSeparator):
        (WebCore::PopupMenu::addGroupLabel): Since we don't have our own
        RenderStyle anymore, just pick up the style from our RenderMenuList.
        (WebCore::PopupMenu::addOption): Ditto.
        * platform/win/TemporaryLinkStubs.cpp: Rename-fest.
        (PopupMenu::PopupMenu):
        (PopupMenu::~PopupMenu):
        (PopupMenu::clear):
        (PopupMenu::populate):
        (PopupMenu::show):
        (PopupMenu::hide):
        (PopupMenu::addSeparator):
        (PopupMenu::addGroupLabel):
        (PopupMenu::addOption):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::~RenderMenuList):
        (WebCore::RenderMenuList::showPopup): Use nice new simple
        PopupMenu::create to make the popup.
        (WebCore::RenderMenuList::hidePopup):
        * rendering/RenderMenuList.h: Hold a RefPtr<PopupMenu> instead of a
        RenderPopupMenu*.
        (WebCore::RenderMenuList::popup):
        * rendering/RenderPopupMenu.cpp: Removed.
        * rendering/RenderPopupMenu.h: Removed.
        * rendering/RenderPopupMenuMac.h: Removed.
        * rendering/RenderPopupMenuMac.mm: Removed.
        * rendering/RenderPopupMenuWin.h: Removed.
        * rendering/RenderTheme.cpp: Get rid of createPopupMenu() method.
        * rendering/RenderTheme.h: Ditto.
        * rendering/RenderThemeMac.h: Ditto.
        * rendering/RenderThemeMac.mm: Ditto.
        * rendering/RenderThemeWin.cpp: Ditto.
        * rendering/RenderThemeWin.h: Ditto.

2006-10-12  Adele Peterson  <adele@apple.com>

        Reviewed by Dave Harrison.

        - Fixed <rdar://problem/4650813> REGRESSION: typing in a textarea in Safari is extremely slow (sample shows focus ring drawing)

        * rendering/RenderObject.cpp: (WebCore::RenderObject::markContainingBlocksForLayout):
        Make subtree layouts work for textareas as well as text fields.

2006-10-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by MacDome.

        Finally found a way to remove our begin() trickery in FrameQt.
        The (probably misnamed) Frame::setEncoding() function automatically
        calls Frame::receivedFirstData() which calls being on the working
        url, which has been passed to didOpenUrl(). Took me some hours
        to figure out that the missing charset logic, forced us to do hacks.

        * platform/ResourceLoader.h:
        * platform/ResourceLoaderInternal.h:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::tokenizerProcessedData):
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::FrameQtClientDefault):
        (WebCore::FrameQtClientDefault::openURL):
        (WebCore::FrameQtClientDefault::submitForm):
        (WebCore::FrameQtClientDefault::receivedData):
        (WebCore::FrameQtClientDefault::receivedAllData):
        * platform/qt/FrameQtClient.h:
        * platform/qt/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::slotData):
        (WebCore::ResourceLoaderManager::slotMimetype):
        (WebCore::ResourceLoaderManager::slotResult):
        (WebCore::ResourceLoaderManager::remove):
        * platform/qt/ResourceLoaderQt.cpp:
        (WebCore::ResourceLoader::retrieveCharset):
        (WebCore::ResourceLoader::extractCharsetFromHeaders):

2006-10-12  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Bandaid-ing a null-dereference crash until a real fix is made.

        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRect):

2006-10-12  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11217
        Cleanup svg coding style

        Cleanup coding style in svg text classes.

        * ksvg2/svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::SVGTRefElement):
        (WebCore::SVGTRefElement::updateReferencedText):
        (WebCore::SVGTRefElement::parseMappedAttribute):
        (WebCore::SVGTRefElement::childShouldCreateRenderer):
        (WebCore::SVGTRefElement::createRenderer):
        * ksvg2/svg/SVGTRefElement.h:
        (WebCore::SVGTRefElement::rendererIsNeeded):
        * ksvg2/svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::SVGTSpanElement):
        (WebCore::SVGTSpanElement::childShouldCreateRenderer):
        (WebCore::SVGTSpanElement::createRenderer):
        * ksvg2/svg/SVGTSpanElement.h:
        (WebCore::SVGTSpanElement::rendererIsNeeded):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        (WebCore::SVGTextElement::localMatrix):
        (WebCore::SVGTextElement::parseMappedAttribute):
        (WebCore::SVGTextElement::updateLocalTransform):
        (WebCore::SVGTextElement::nearestViewportElement):
        (WebCore::SVGTextElement::farthestViewportElement):
        (WebCore::SVGTextElement::getScreenCTM):
        (WebCore::SVGTextElement::getCTM):
        (WebCore::SVGTextElement::createRenderer):
        (WebCore::SVGTextElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGTextElement.h:
        (WebCore::SVGTextElement::getTransformToElement):
        (WebCore::SVGTextElement::rendererIsNeeded):
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        (WebCore::SVGTextPositioningElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextPositioningElement.h:

2006-10-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Specialization of alert() for DumpRenderTree - just log the output, don't show any message box.

        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::runJavaScriptAlert): Move runJavaScriptAlert functionality to FrameQtClientDefault.
        * platform/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClientDefault::runJavaScriptAlert):
        * platform/qt/FrameQtClient.h:

2006-10-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - move m_responseMIMEType out of ResourceRequest, where it doesn't belong

        * page/FramePrivate.h: Add m_responseMIMEType
        * page/ResourceRequest.h: Remove m_responseMIMEType
        * page/Frame.cpp:
        (WebCore::Frame::setResponseMIMEType): added
        (WebCore::Frame::responseMIMEType): added
        (WebCore::Frame::begin): get MIME type from the right place
        (WebCore::Frame::write): ditto
        * page/Frame.h:
        * bindings/js/kjs_window.cpp:
        (KJS::createNewWindow): updated to use new Frame methods
        (KJS::WindowFunc::callAsFunction): ditto
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge openURL:reload:contentType:refresh:lastModified:pageCache:]): ditto
        (-[WebCoreFrameBridge canProvideDocumentSource]): ditto
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure): ditto

2006-10-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        <rdar://problem/4774321> REGRESSION: "Can't find the server" error page contains unstyled text and missing image

        We really need some way to test loadHTMLString since it keeps breaking!
        
        * loader/mac/WebFrameLoader.mm:
        (-[WebFrameLoader commitProvisionalLoad:]): Set stuff up on the proper data source.

2006-10-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fix Qt/Linux build.

        * CMakeLists.txt:
        * platform/qt/FileChooserQt.cpp:
        (WebCore::FileChooser::create):

2006-10-12  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Update Gdk\Linux build for recent changes, based on Qt code

        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdkClientDefault::FrameGdkClientDefault):
        (WebCore::FrameGdkClientDefault::~FrameGdkClientDefault):
        (WebCore::FrameGdkClientDefault::setFrame):
        (WebCore::FrameGdkClientDefault::openURL):
        (WebCore::FrameGdkClientDefault::submitForm):
        (WebCore::FrameGdkClientDefault::receivedResponse):
        (WebCore::FrameGdkClientDefault::receivedData):
        (WebCore::FrameGdkClientDefault::receivedAllData):
        (WebCore::FrameGdk::FrameGdk):
        (WebCore::FrameGdk::openURL):
        (WebCore::FrameGdk::submitForm):
        (WebCore::FrameGdk::urlSelected):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameGdk::createJavaAppletWidget):
        (FileChooser::create):

2006-10-12  Dave Hyatt  <hyatt@apple.com>

        Patch to add more clipping retrieval functionality for widgets.
       
        Reviewed by mjs

        * page/Frame.h:
        Remove windowResizerRect.  This is in the wrong place.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::windowClipRectForLayer):
        Break out windowClipRect into helper functions that can be called separately (to make
        it easier for scrollbars in overflow sections and list boxes to get to an enclosing
        layer and get the right clip.
        
        * page/FrameView.h:
        Add the new windowClipRect helper methods.
        
        * platform/ScrollBar.h:
        Add a new interface to ScrollbarClient so that scrollbars can hand back proper
        clip rects for themselves depending on how they are used.
        
        * platform/ScrollView.h:
        Stub out methods for talking to a double buffer backing store on Win32.
        
        * platform/Widget.h:
        Add the ability to query for invalidation suppression.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::windowClipRect):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::childrenClipRect):
        (WebCore::RenderLayer::selfClipRect):
        * rendering/RenderLayer.h:
        Enhance layers so that they can return either their foreground or background
        document clip rects.  Make sure a layer scrollbar can return a proper clip.
        
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::windowClipRect):
        * rendering/RenderListBox.h:
        Make sure a list box scrollbar can return a proper clip.
        
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingLayer):
        * rendering/RenderObject.h:
        Make enclosingLayer const.
        
2006-10-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - some changes to prepare for converting more code to C++

        * bridge/mac/WebCoreFrameBridge.h: Added import of <Cocoa/Cocoa.h> so this header is
        self-sufficient.

        * bridge/mac/WebCoreViewFactory.h: Added forward declaration of the NSMenu class.
        Needed since the class is used in this header (for some work I have not landed yet).

        * loader/mac/LoaderNSURLExtras.h:
        * loader/mac/WebFormDataStream.h:
        Added extern "C" so this code can be used from C++.

        * loader/mac/LoaderNSURLExtras.m:
        * loader/mac/WebDataProtocol.mm:
        * loader/mac/WebDocumentLoader.mm:
        * loader/mac/WebFormDataStream.m:
        * loader/mac/WebLoader.mm:
        * loader/mac/WebMainResourceLoader.mm:
        * loader/mac/WebNetscapePlugInStreamLoader.mm:
        * loader/mac/WebPolicyDecider.mm:
        * loader/mac/WebSubresourceLoader.mm:
        Added missing includes of config.h.

2006-10-11  John Sullivan  <sullivan@apple.com>
        
        Darin wrote this code; we tested it; I give it the thumbs up.
        
        - fixed regression from svn revision 16982 that was generating the wrong Obj-C classes

        The hash table to look up an element class given a QualifiedName was
        not working at all.

        * dom/QualifiedName.h:
        (WebCore::QualifiedName::impl):
        Added. This new accessor method for impl is needed if we want to use
        a QualifiedName as a hash table key without doing the kind of specialization
        we do for String. Maybe later we can do the String thing.

        * bindings/objc/DOM.mm:
        (WebCore::addElementClass):
        Use QualifiedName.impl instead of the QualifiedName pointer itself.
        The QualifiedName pointer is *not* unique so almost nothing would be found
        in this hash table!
        (WebCore::elementClass):
        ditto
        
2006-10-11  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        Clean up FileChooser::create and Icon::newIconForFile.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::create):
        * platform/mac/IconMac.mm:
        (WebCore::Icon::newIconForFile):

2006-10-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11251
        Corrects canvas tag to not throw JS exception when drawing
        zero sized rects, arcs, etc

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::arcTo):
        (WebCore::CanvasRenderingContext2D::arc):
        (WebCore::CanvasRenderingContext2D::rect):
        (WebCore::CanvasRenderingContext2D::clearRect):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):

2006-10-11  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11221
        REGRESSION: iExploder crash due to style="cursor: url()"

        Take better care of empty cursor lists.

        Test: fast/css/invalid-cursor-property-crash.html

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):

2006-10-11  Adam Roben  <aroben@apple.com>

        Fixing Windows for real this time.

        * platform/win/TemporaryLinkStubs.cpp:
        (FileChooser::create):

2006-10-11  Adam Roben  <aroben@apple.com>

        Fix Windows build.

        * platform/win/TemporaryLinkStubs.cpp:
        (FileChooser::create):

2006-10-11  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Hyatt.
        
        http://bugs.webkit.org/show_bug.cgi?id=4377
        
        Respect css visibility semantics for layers too

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode):
        (WebCore::RenderContainer::appendChildNode):
        (WebCore::RenderContainer::insertChildNode):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::setHasVisibleContent):
        (WebCore::RenderLayer::dirtyVisibleContentStatus):
        (WebCore::RenderLayer::childVisibilityChanged):
        (WebCore::RenderLayer::dirtyVisibleDescendantStatus):
        (WebCore::RenderLayer::updateVisibilityStatus):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::updateZOrderLists):
        (WebCore::RenderLayer::collectLayers):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasVisibleContent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):

2006-10-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - added RetainPtr, smart pointer for refcounted ObjC objects and CFTypes

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cf/RetainPtr.h: Added.
        (WTF::):
        (WTF::RetainPtr::RetainPtr):
        (WTF::RetainPtr::~RetainPtr):
        (WTF::RetainPtr::get):
        (WTF::RetainPtr::operator*):
        (WTF::RetainPtr::operator->):
        (WTF::RetainPtr::operator!):
        (WTF::RetainPtr::operator UnspecifiedBoolType):
        (WTF::::operator):
        (WTF::::swap):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::static_pointer_cast):
        (WTF::const_pointer_cast):
        (WTF::getPtr):
        
        - use it in WidgetMac so it gets tested in at least one place
        
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::getView):
        (WebCore::Widget::setView):
        (WebCore::Widget::getOuterView):

2006-10-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej.

        Moved WebFrameLoader from WebFrameBridge into WebCoreFrameBridge

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge initMainFrameWithPage:]):
        (-[WebCoreFrameBridge initSubframeWithOwnerElement:]):
        (-[WebCoreFrameBridge dealloc]):
        (-[WebCoreFrameBridge close]):
        (-[WebCoreFrameBridge setFrameLoaderClient:]):
        (-[WebCoreFrameBridge frameLoader]):
        * loader/mac/WebFrameLoader.h:
        * loader/mac/WebFrameLoader.mm:
        (-[WebFrameLoader initWithFrameBridge:]):
        (-[WebFrameLoader setFrameLoaderClient:]):

2006-10-10  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Make FileChooser ref-counted.

        * platform/FileChooser.h:
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::create):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::RenderFileUploadControl):
        (WebCore::RenderFileUploadControl::~RenderFileUploadControl):
        * rendering/RenderFileUploadControl.h:

2006-10-10  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11248
        Even More auto-generated Objective-C DOM bindings changes

        - Auto-generate DOMSVGPathElement.

        - Auto-generate the internal interfaces even for classes that have
          custom internal implementations.  Change IDL property from ObjCNoInternal
          to ObjCCustomInternalImpl to indicate the change.

        - Add SVG classes to DOMNode and DOMEvent internal interfaces.

        - Add isSVGZoomEvent() method to Event class to match other Event subclasses
          and make DOM binding possible.

        - Assorted cleanups.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (WebCore::addElementClass):
        (WebCore::createElementClassMap):
        (WebCore::elementClass):
        (-[DOMNode description]):
        (+[DOMNode _nodeWith:WebCore::]):
        (-[DOMNode addEventListener:listener:useCapture:]):
        (-[DOMNode removeEventListener:listener:useCapture:]):
        (-[DOMElement _NPObject]):
        (WebCore::ObjCEventListener::handleEvent):
        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _eventWith:WebCore::]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor WebCore::]):
        * bindings/objc/DOMSVGPathSegInternal.h: Removed.
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSRule.idl:
        * css/CSSValue.idl:
        * css/StyleSheet.idl:
        * dom/Event.cpp:
        (WebCore::Event::isSVGZoomEvent):
        * dom/Event.h:
        * dom/Event.idl:
        * dom/Node.idl:
        * ksvg2/events/SVGZoomEvent.cpp:
        (WebCore::SVGZoomEvent::isSVGZoomEvent):
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/svg/SVGAnimatedAngle.idl:
        * ksvg2/svg/SVGCircleElement.idl:
        * ksvg2/svg/SVGClipPathElement.idl:
        * ksvg2/svg/SVGPathElement.idl:
        * ksvg2/svg/SVGPathSeg.idl:

2006-10-10  Oliver Hunt  <oliver@apple.com>

        rubber stamped by Anders.

        More buildbot bustage

        * kcanvas/SVGInlineFlowBox.cpp:
        (WebCore::placeBoxesVerticallyWithAbsBaseline):

2006-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders 

        Unbreak build bots

        * dom/Text.cpp:
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * kcanvas/SVGInlineFlowBox.cpp:
        (WebCore::placePositionedBoxesHorizontally):
        (WebCore::placeBoxesVerticallyWithAbsBaseline):

2006-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by hyatt.

        Fixes bugs #6423, #6559, #10380 and #10839 

        * WebCore.xcodeproj/project.pbxproj:
        * css/svg.css:
        * dom/Text.cpp:
        (WebCore::Text::createRenderer):
        * kcanvas/RenderSVGInline.cpp: Added.
        (WebCore::RenderSVGInline::RenderSVGInline):
        (WebCore::RenderSVGInline::createInlineBox):
        * kcanvas/RenderSVGInline.h: Added.
        (WebCore::RenderSVGInline::renderName):
        (WebCore::RenderSVGInline::requiresLayer):
        * kcanvas/RenderSVGInlineText.cpp: Added.
        (WebCore::RenderSVGInlineText::RenderSVGInlineText):
        (WebCore::RenderSVGInlineText::absoluteRects):
        (WebCore::RenderSVGInlineText::selectionRect):
        * kcanvas/RenderSVGInlineText.h: Added.
        (WebCore::RenderSVGInlineText::renderName):
        (WebCore::RenderSVGInlineText::requiresLayer):
        * kcanvas/RenderSVGTSpan.cpp: Added.
        (WebCore::RenderSVGTSpan::RenderSVGTSpan):
        (WebCore::RenderSVGTSpan::absoluteRects):
        * kcanvas/RenderSVGTSpan.h: Added.
        (WebCore::RenderSVGTSpan::renderName):
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::RenderSVGText):
        (WebCore::RenderSVGText::computeAbsoluteRepaintRect):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::createInlineBox):
        (WebCore::RenderSVGText::nodeAtPoint):
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::paint):
        (WebCore::RenderSVGText::relativeBBox):
        * kcanvas/RenderSVGText.h:
        (WebCore::RenderSVGText::renderName):
        * kcanvas/SVGInlineFlowBox.cpp: Added.
        (WebCore::SVGInlineFlowBox::paint):
        (WebCore::SVGInlineFlowBox::placeBoxesHorizontally):
        (WebCore::SVGInlineFlowBox::verticallyAlignBoxes):
        (WebCore::paintSVGInlineFlow):
        (WebCore::translateBox):
        (WebCore::placePositionedBoxesHorizontally):
        (WebCore::placeSVGFlowHorizontally):
        (WebCore::placeBoxesVerticallyWithAbsBaseline):
        (WebCore::placeSVGFlowVertically):
        * kcanvas/SVGInlineFlowBox.h: Added.
        (WebCore::SVGInlineFlowBox::SVGInlineFlowBox):
        * kcanvas/SVGRootInlineBox.cpp: Added.
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::placeBoxesHorizontally):
        (WebCore::SVGRootInlineBox::verticallyAlignBoxes):
        * kcanvas/SVGRootInlineBox.h: Added.
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        * ksvg2/svg/SVGTRefElement.cpp:
        (SVGTRefElement::createRenderer):
        * ksvg2/svg/SVGTSpanElement.cpp:
        (SVGTSpanElement::createRenderer):
        * rendering/InlineFlowBox.h:

2006-10-10  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Improve popup menu behavior.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement): Cache
        m_lastOnChangeIndex so we know when to fire onChange.
        (WebCore::HTMLSelectElement::setSelectedIndex): Added parameter to
        specify whether we should fire onChange.
        (WebCore::HTMLSelectElement::dispatchBlurEvent): Fire onChange on blur.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Fire
        onChange when using the Enter key to change the selection.
        * html/HTMLSelectElement.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateFromElement): Extract setText logic
        into its own method.
        (WebCore::RenderMenuList::setTextFromOption): New method.
        (WebCore::RenderMenuList::valueChanged): Let setSelectedIndex call
        onChange instead of calling it directly here.
        * rendering/RenderMenuList.h:

2006-10-10  Adele Peterson  <adele@apple.com>

        Reviewed by Beth. 


        - Fix for <rdar://problem/4707489> After timers fix, crash below RenderLayer::autoscroll after moving/destroying active <input type=text>
          and <rdar://problem/4707519> After timers fix, crash below RenderLayer::autoscroll after moving/destroying active textarea

        Moved autoscroll code to the Frame class

        * bridge/mac/FrameMac.h: Moved _mouseDownMayStartDrag and _mouseDownMayStartAutoscroll flags to the frame.
        * bridge/mac/FrameMac.mm: Use new getters and setters for drag and autoscroll flags.  Moved autoscroll code to Frame::handleMouseMoveEvent.
        (WebCore::FrameMac::FrameMac):
        (WebCore::FrameMac::handleMousePressEvent):
        (WebCore::FrameMac::eventMayStartDrag):
        (WebCore::FrameMac::handleMouseMoveEvent):
        (WebCore::FrameMac::mouseDown):

        * bridge/mac/WebCoreFrameBridge.h: Removed handleAutoscrollForMouseDragged, which called over the bridge for AppKit to do autoscroll for us.
        Now we scroll our views in WebCore.

        * page/Frame.cpp:
        (WebCore::Frame::handleMousePressEvent): Initialize the mouseDownMayStartAutoscroll flag.
        (WebCore::Frame::handleMouseMoveEvent): Now kicks off autoscroll if appropriate.  Moved from FrameMac.
        (WebCore::Frame::updateSelectionForMouseDragOverPosition): Factored code out from handleMouseMoveEvent so we can update the selection from autoscroll too.
        (WebCore::Frame::mouseDownMayStartAutoscroll): Added.
        (WebCore::Frame::setMouseDownMayStartAutoscroll): Added.
        (WebCore::Frame::mouseDownMayStartDrag): Added.
        (WebCore::Frame::setMouseDownMayStartDrag): Added.
        (WebCore::Frame::autoscrollRenderer): Added
        (WebCore::Frame::setAutoscrollRenderer): Added.
        (WebCore::Frame::handleAutoscroll): Updated to use autoscrollRenderer getter and setter.
        (WebCore::Frame::autoscrollTimerFired): ditto.
        (WebCore::Frame::stopAutoscrollTimer): ditto. 
        * page/Frame.h: Made autoscrollRenderer and stopAutoscrollTimer public, so the renderer being autoscrolled can kill the timer when it dies.

        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate): Added mouseDownMayStartDrag and mouseDownMayStartAutoscroll flags.  Moved from FrameMac.

        * page/FrameView.cpp: Store the current mouse position in window coordinates.  The callers can convert to their own coordinate space.
        (WebCore::FrameView::handleMousePressEvent):
        (WebCore::FrameView::handleMouseDoubleClickEvent):
        (WebCore::FrameView::handleMouseMoveEvent):
        (WebCore::FrameView::handleMouseReleaseEvent):

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll): Rewrote this to scroll recursively, and to scroll based on the mouse position (not the selection).  
         We also need to update the selection here, since autoscroll can occur without a mouseMove event, and the selection needs to get reset as we scroll.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::autoscroll): Convert the mouse coordinates to the right space.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldAutoscroll): Also return true if the renderer is a root (so we know to autoscroll views too)
        (WebCore::RenderObject::destroy): If this renderer is being autoscrolled, stop the frame's autoscroll timer.

2006-10-10  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej.

        - convert many of the loader source files to Objective-C++ to prepare
          to convert some of them to C++

        * WebCore.xcodeproj/project.pbxproj:
        * loader/mac/WebDataProtocol.m: Removed.
        * loader/mac/WebDocumentLoader.m: Removed.
        * loader/mac/WebFormState.m: Removed.
        * loader/mac/WebFrameLoader.m: Removed.
        * loader/mac/WebLoader.m: Removed.
        * loader/mac/WebMainResourceLoader.m: Removed.
        * loader/mac/WebNetscapePlugInStreamLoader.m: Removed.
        * loader/mac/WebPolicyDecider.m: Removed.
        * loader/mac/WebSubresourceLoader.m: Removed.
        * loader/mac/WebDataProtocol.mm: Added.
        * loader/mac/WebDocumentLoader.mm: Added.
        * loader/mac/WebFormState.mm: Added.
        * loader/mac/WebFrameLoader.mm: Added.
        * loader/mac/WebLoader.mm: Added.
        * loader/mac/WebMainResourceLoader.mm: Added.
        * loader/mac/WebNetscapePlugInStreamLoader.mm: Added.
        * loader/mac/WebPolicyDecider.mm: Added.
        * loader/mac/WebSubresourceLoader.mm: Added.

2006-10-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        - fixed REGRESSION (r16960): crash on navigating to site
        http://www.zoominfo.com/Search/CompanyDetail.aspx?CompanyID=62948057&cs=QGDwILZIE
        
        * loader/mac/WebFrameLoader.m:
        (-[WebFrameLoader continueLoadRequestAfterNewWindowPolicy:frameName:formState:]):
        Add back a mistakenly removed retain.

2006-10-10  Maciej Stachowiak  <mjs@apple.com>

        - fixed release build

        * WebCore.xcodeproj/project.pbxproj:

2006-10-10  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - moved a big honkin' pile of code over from WebKit; made minimal needed changes to compile

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/mac/LoaderNSURLExtras.m: Added.
        * loader/mac/WebDataProtocol.m: Added.
        * loader/mac/WebDocumentLoader.m: Added.
        * loader/mac/WebFormDataStream.m: Added.
        * loader/mac/WebFrameLoader.m: Added.
        * loader/mac/WebLoader.m: Added.
        (-[NSURLProtocol didReceiveResponse:]):
        (-[NSURLProtocol didReceiveData:lengthReceived:allAtOnce:]):
        * loader/mac/WebMainResourceLoader.m: Added.
        (-[WebMainResourceLoader didReceiveResponse:]):
        * loader/mac/WebPolicyDecider.m: Added.
        * loader/mac/WebSubresourceLoader.h: Added.
        * loader/mac/WebSubresourceLoader.m: Added.

2006-10-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver (sort of?)

        - WebCore part of moving down NSURL extras

        * WebCore.exp:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2006-10-09  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11217
        Cleanup svg coding style

        Cleanup coding style in svg animation classes.

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::SVGAnimateElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        (WebCore::SVGAnimateTransformElement::parseMappedAttribute):
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        (WebCore::SVGAnimateTransformElement::calculateRotationFromMatrix):
        (WebCore::SVGAnimateTransformElement::initialMatrix):
        (WebCore::SVGAnimateTransformElement::transformMatrix):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimatedPathData.cpp:
        * ksvg2/svg/SVGAnimatedPathData.h:
        * ksvg2/svg/SVGAnimatedPoints.cpp:
        * ksvg2/svg/SVGAnimatedPoints.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::targetElement):

2006-10-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - added isMainFrame and frameLoader to WebCoreFrameBridge for ease of future code motion

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge isMainFrame]):

2006-10-09  Adam Roben  <aroben@apple.com>

        Backing out accidental commit.

        * page/Frame.cpp:
        (WebCore::Frame::finishedParsing):

2006-10-09  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Add ASSERTs to RefPtr to make sure we don't ref within a destructor, as
        this could cause recursive calls to the destructor. RefPtr now also
        inherits from Noncopyable.

        * dom/NodeFilter.h:
        * dom/Traversal.h:
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::finishedParsing):
        * page/Frame.h:
        * page/Plugin.h:
        * platform/FontFallbackList.h:
        * platform/Icon.h:
        * platform/Shared.h:
        (WebCore::Shared::Shared):
        (WebCore::Shared::ref):
        (WebCore::Shared::deref):
        (WebCore::Shared::hasOneRef):
        (WebCore::Shared::refCount):
        * platform/StringImpl.h:

2006-10-09  Oliver Hunt <ohunt@apple.com>

        Reviewed by Anders.

        Correcting ifdef's

        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        (WebCore::CanvasGradient::~CanvasGradient):
        (WebCore::CanvasGradient::addColorStop):
        * html/CanvasGradient.h:
        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::CanvasPattern):
        (WebCore::CanvasPattern::~CanvasPattern):
        * html/CanvasPattern.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::applyStrokePattern):
        (WebCore::CanvasRenderingContext2D::applyFillPattern):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::createDrawingContext):
        * html/HTMLCanvasElement.h:

2006-10-09  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fix a possible recursive destructor call.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Add a FIXME about cleaning up the destructor.
        (WebCore::Frame::finishedParsing): Don't create a protector RefPtr if
        we're already being destroyed.

2006-10-09  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11234
        Assorted Objective-C bindings changes

        - Auto-generate DOMSVGPathSegArcAbs, DOMSVGPathSegArcRel, DOMSVGPathSegClosePath, 
          DOMSVGPathSegCurvetoCubicAbs, DOMSVGPathSegCurvetoCubicRel, 
          DOMSVGPathSegCurvetoCubicSmoothAbs, DOMSVGPathSegCurvetoCubicSmoothRel, 
          DOMSVGPathSegCurvetoQuadraticAbs, DOMSVGPathSegCurvetoQuadraticRel, 
          DOMSVGPathSegCurvetoQuadraticSmoothAbs, DOMSVGPathSegCurvetoQuadraticSmoothRel, 
          DOMSVGPathSegLinetoAbs, DOMSVGPathSegLinetoHorizontalAbs, 
          DOMSVGPathSegLinetoHorizontalRel, DOMSVGPathSegLinetoRel, 
          DOMSVGPathSegLinetoVerticalAbs, DOMSVGPathSegLinetoVerticalRel, 
          DOMSVGPathSegMovetoAbs, DOMSVGPathSegMovetoRel and DOMSVGSVGElement.

        - Auto-generate absoluteImageURL method for DOMHTMLInputElement and
          DOMHTMLObjectElement.

        - Auto-generate the internal methods for classes with ivars (notably 
          DOMNodeIterator and DOMTreeWalker)

        - Put more methods in the WebCore namespace and factor out the  
          displayString method into DOMInternal.h as done by Darin in his 
          patch for http://bugs.webkit.org/show_bug.cgi?id=11219.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode _initWithNode:WebCore::]):
        (+[DOMNode _nodeWith:WebCore::]):
        (-[DOMNode addEventListener:listener:useCapture:]):
        (-[DOMNode removeEventListener:listener:useCapture:]):
        (-[DOMNode dispatchEvent:]):
        (-[DOMElement _imageTIFFRepresentation]):
        (-[DOMNodeFilter _initWithNodeFilter:WebCore::]):
        (+[DOMNodeFilter _nodeFilterWith:WebCore::]):
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]):
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]):
        * bindings/objc/DOMCSS.mm:
        (-[DOMStyleSheet _initWithStyleSheet:WebCore::]):
        (+[DOMStyleSheet _styleSheetWith:WebCore::]):
        (-[DOMCSSRule _initWithCSSRule:WebCore::]):
        (+[DOMCSSRule _CSSRuleWith:WebCore::]):
        (-[DOMCSSValue _initWithCSSValue:WebCore::]):
        (+[DOMCSSValue _CSSValueWith:WebCore::]):
        * bindings/objc/DOMEvents.mm:
        (-[DOMEvent _initWithEvent:WebCore::]):
        (+[DOMEvent _eventWith:WebCore::]):
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _replaceCharactersInRange:withString:selectingFromIndex:]):
        * bindings/objc/DOMInternal.h:
        (-[DOMNodeFilter WebCore::]):
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _init]):
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        (WebCore::displayString):
        * bindings/objc/DOMObject.mm:
        (-[DOMObject dealloc]):
        (-[DOMObject finalize]):
        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor dealloc]):
        (-[DOMRGBColor finalize]):
        (-[DOMRGBColor color]):
        (-[DOMRGBColor _initWithRGB:WebCore::]):
        (+[DOMRGBColor _RGBColorWithRGB:WebCore::]):
        * bindings/objc/DOMSVG.h:
        * bindings/objc/DOMSVGPathSegInternal.h: Added.
        * bindings/objc/DOMSVGPathSegInternal.mm: Added.
        (-[DOMSVGPathSeg WebCore::]):
        (-[DOMSVGPathSeg _initWithSVGPathSeg:WebCore::]):
        (+[DOMSVGPathSeg _SVGPathSegWith:WebCore::]):
        * bindings/objc/DOMXPath.mm:
        (-[DOMNativeXPathNSResolver _initWithXPathNSResolver:WebCore::]):
        (+[DOMNativeXPathNSResolver _xpathNSResolverWith:WebCore::]):
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/NodeIterator.idl:
        * dom/TreeWalker.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLObjectElement.idl:
        * ksvg2/svg/SVGDocument.idl:
        * ksvg2/svg/SVGElement.idl:
        * ksvg2/svg/SVGPathSeg.idl:
        * ksvg2/svg/SVGPathSegArcAbs.idl:
        * ksvg2/svg/SVGPathSegArcRel.idl:
        * ksvg2/svg/SVGPathSegClosePath.idl:
        * ksvg2/svg/SVGPathSegCurvetoCubicAbs.idl:
        * ksvg2/svg/SVGPathSegCurvetoCubicRel.idl:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmoothAbs.idl:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmoothRel.idl:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticAbs.idl:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticRel.idl:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl:
        * ksvg2/svg/SVGPathSegLinetoAbs.idl:
        * ksvg2/svg/SVGPathSegLinetoHorizontalAbs.idl:
        * ksvg2/svg/SVGPathSegLinetoHorizontalRel.idl:
        * ksvg2/svg/SVGPathSegLinetoRel.idl:
        * ksvg2/svg/SVGPathSegLinetoVerticalAbs.idl:
        * ksvg2/svg/SVGPathSegLinetoVerticalRel.idl:
        * ksvg2/svg/SVGPathSegMovetoAbs.idl:
        * ksvg2/svg/SVGPathSegMovetoRel.idl:

2006-10-09  Peter Kasting  <pkasting@google.com>

        Unreviewed build fix.

        Fix windows build bustage.

        * platform/win/TemporaryLinkStubs.cpp:

2006-10-09  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Geoff.

        Fix memory leaks discovered via valgrind. Gdk build fixes.

        * Projects/gdk/webcore-gdk.bkl:
        * make-generated-sources.sh:
        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::draw):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::handleGdkEvent):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::horizontalScrollbarHeight):
        (WebCore::PlatformScrollbar::verticalScrollbarWidth):

2006-10-09  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Beth.

        Fix LayoutTests/fast/css/case-transform.html with Qt - the last crashing layout test.

        * platform/qt/GlyphMapQt.cpp: Handle UTF-16 characters properly
        (WebCore::GlyphMap::fillPage):

2006-10-09  Nikolas Zimmermann  <zimmermann@kde.org>

        Unreviewed build fix.

        Fix for Qt/Linux build, based on fixes to the Win32 build in r16928 and r16929.

        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::createJavaAppletWidget):
        * platform/qt/FrameQt.h:
        * platform/qt/TemporaryLinkStubs.cpp:

2006-10-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Tiny changes to help reorganize WebFrameLoader code in WebKit

        * bridge/mac/WebCoreIconDatabaseBridge.h: Added "createInstance"
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (+[WebCoreIconDatabaseBridge sharedInstance]): Added, uses createInstance from WebKit side

2006-10-09  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Remove redundant call to Frame::cancelAndClear from ~Frame, since it's
        already called frome ~FrameMac.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame):

2006-10-09  Anders Carlsson  <acarlsson@apple.com>

        * bridge/win/FrameWin.h:
        Add function declaration.
        
2006-10-09  Anders Carlsson  <acarlsson@apple.com>

        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::createJavaAppletWidget):
        Try fixing the Win32 build.

2006-10-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Move applet widget creation to Frame and get rid of JavaAppletWidget.
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/JavaAppletWidget.h: Removed.
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::createJavaAppletWidget):
        * bridge/mac/JavaAppletWidget.mm: Removed.
        * page/Frame.h:
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary):

2006-10-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=11220
          Fix manual test for http://bugs.webkit.org/show_bug.cgi?id=8276

        Subversion does not support resource forks and HFS metadata, so
        the resources for this test need to be on a disk image.

        * manual-tests/plain-text-paste.html: Changed instructions to refer to the disk image.
        * manual-tests/resources/plain-text-paste.dmg: Added.
        * manual-tests/resources/plain-text-paste/._1.textClipping: Removed.
        * manual-tests/resources/plain-text-paste/._2.textClipping: Removed.
        * manual-tests/resources/plain-text-paste/._4.txt: Removed.
        * manual-tests/resources/plain-text-paste/._5.webloc: Removed.
        * manual-tests/resources/plain-text-paste/1.textClipping: Removed.
        * manual-tests/resources/plain-text-paste/2.textClipping: Removed.
        * manual-tests/resources/plain-text-paste/3.gif: Removed.
        * manual-tests/resources/plain-text-paste/4.txt: Removed.
        * manual-tests/resources/plain-text-paste/5.webloc: Removed.

2006-10-09  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11217
        Cleanup svg coding style

        Cleanup coding style in filter classes.

        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (WebCore::SVGComponentTransferFunctionElement::parseMappedAttribute):
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::parseMappedAttribute):
        (WebCore::SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::parseMappedAttribute):
        (WebCore::SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::parseMappedAttribute):
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::stringToChannel):
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEFuncAElement.cpp:
        (WebCore::SVGFEFuncAElement::SVGFEFuncAElement):
        * ksvg2/svg/SVGFEFuncBElement.cpp:
        (WebCore::SVGFEFuncBElement::SVGFEFuncBElement):
        * ksvg2/svg/SVGFEFuncGElement.cpp:
        (WebCore::SVGFEFuncGElement::SVGFEFuncGElement):
        * ksvg2/svg/SVGFEFuncRElement.cpp:
        (WebCore::SVGFEFuncRElement::SVGFEFuncRElement):
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (WebCore::SVGFEGaussianBlurElement::parseMappedAttribute):
        (WebCore::SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::SVGFELightElement):
        (WebCore::SVGFELightElement::parseMappedAttribute):
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::SVGFEMergeElement):

2006-10-09  Rob Buis  <buis@kde.org>

        Reviewed by olliej.

        http://bugs.webkit.org/show_bug.cgi?id=11217
        Cleanup svg coding style

        Cleanup coding style in SVGPath* classes.

        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::getPointAtLength):
        (WebCore::SVGPathElement::createSVGPathSegClosePath):
        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegMovetoRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel):
        (WebCore::SVGPathElement::createSVGPathSegArcAbs):
        (WebCore::SVGPathElement::createSVGPathSegArcRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel):
        (WebCore::SVGPathElement::svgMoveTo):
        (WebCore::SVGPathElement::svgLineTo):
        (WebCore::SVGPathElement::svgLineToHorizontal):
        (WebCore::SVGPathElement::svgLineToVertical):
        (WebCore::SVGPathElement::svgCurveToCubic):
        (WebCore::SVGPathElement::svgCurveToCubicSmooth):
        (WebCore::SVGPathElement::svgCurveToQuadratic):
        (WebCore::SVGPathElement::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathElement::svgArcTo):
        (WebCore::SVGPathElement::parseMappedAttribute):
        (WebCore::SVGPathElement::pathSegList):
        (WebCore::SVGPathElement::normalizedPathSegList):
        (WebCore::SVGPathElement::animatedPathSegList):
        (WebCore::SVGPathElement::animatedNormalizedPathSegList):
        (WebCore::SVGPathElement::toPathData):
        * ksvg2/svg/SVGPathElement.h:
        (WebCore::SVGPathElement::rendererIsNeeded):
        * ksvg2/svg/SVGPathSeg.h:
        * ksvg2/svg/SVGPathSegArc.cpp:

2006-10-09  Rob Buis  <buis@kde.org>

        Reviewed by aroben.

        http://bugs.webkit.org/show_bug.cgi?id=11217
        Cleanup svg coding style

        Cleanup coding style in svg shape classes.

        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        (WebCore::SVGCircleElement::parseMappedAttribute):
        (WebCore::SVGCircleElement::pushAttributeContext):
        * ksvg2/svg/SVGCircleElement.h:
        (WebCore::SVGCircleElement::rendererIsNeeded):
        * ksvg2/svg/SVGEllipseElement.cpp:
        * ksvg2/svg/SVGEllipseElement.h:
        (WebCore::SVGEllipseElement::rendererIsNeeded):
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::parseMappedAttribute):
        (WebCore::SVGLineElement::pushAttributeContext):
        * ksvg2/svg/SVGLineElement.h:
        (WebCore::SVGLineElement::rendererIsNeeded):
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        (WebCore::SVGPolyElement::points):
        (WebCore::SVGPolyElement::animatedPoints):
        (WebCore::SVGPolyElement::parseMappedAttribute):
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::rendererIsNeeded):
        * ksvg2/svg/SVGPolygonElement.cpp:
        (WebCore::SVGPolygonElement::SVGPolygonElement):
        (WebCore::SVGPolygonElement::toPathData):
        * ksvg2/svg/SVGPolygonElement.h:
        * ksvg2/svg/SVGPolylineElement.cpp:
        (WebCore::SVGPolylineElement::SVGPolylineElement):
        (WebCore::SVGPolylineElement::toPathData):
        * ksvg2/svg/SVGPolylineElement.h:
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseMappedAttribute):
        (WebCore::SVGRectElement::pushAttributeContext):
        * ksvg2/svg/SVGRectElement.h:
        (WebCore::SVGRectElement::rendererIsNeeded):

2006-10-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - added a bit more WebCoreSystemInterface

            wkGetNSURLResponseCalculatedExpiration
            wkGetNSURLResponseLastModifiedDate
            wkGetNSURLResponseMustRevalidate

        * WebCore.exp: Added the new symbols.
        * platform/mac/WebCoreSystemInterface.h: Ditto.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

        - quiet down the code generation script

        * bindings/scripts/CodeGenerator.pm:

2006-10-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - more code laundering - add wkSupportsMultipartXMixedReplace

        * WebCore.exp:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2006-10-08  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin and Oliver.

        Fix artefacts when drawing polygons, most noticeable when painting <hr> elements.

        * platform/qt/GraphicsContextQt.cpp: Fix wrong operator<< usage.
        (WebCore::GraphicsContext::drawConvexPolygon):

2006-10-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * page/Frame.cpp:
        (WebCore::Frame::submitForm):
        No need to use latin1() here.

2006-10-08  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin.

        Kill warnings when generating IDL files on Qt/Linux, as the
        SOURCE_ROOT environment variable is not defined (and not needed) for us.

        * bindings/scripts/CodeGenerator.pm:

2006-10-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - split didNotOpenURL: into general and page-cache-specific parts

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge didNotOpenURL:]):
        (-[WebCoreFrameBridge invalidatePageCache:]):

2006-10-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * loader/loader.cpp:
        Remove DeprecatedStringList.h include.
        
        * page/Frame.cpp:
        (WebCore::Frame::submitForm):
        Don't remove "attach" from mailto URLs, we don't do it anywhere else.

2006-10-08  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11215
        Yet another round of Objective-C SVG DOM bindings auto-generation

        - Auto-generate DOMSVGPatternElement, DOMSVGPointList, DOMSVGPolygonElement, 
          DOMSVGPolylineElement, DOMSVGRadialGradientElement, DOMSVGRenderingIntent,
          DOMSVGScriptElement, DOMSVGSetElement, DOMSVGStopElement, DOMSVGSwitchElement, 
          DOMSVGSymbolElement, DOMSVGTRefElement, DOMSVGTSpanElement, 
          DOMSVGTextContentElement, DOMSVGTextElement, DOMSVGTextPositioningElement, 
          DOMSVGTitleElement, DOMSVGUnitTypes, DOMSVGUseElement, DOMSVGViewElement, 
          DOMSVGZoomAndPan and DOMSVGZoomEvent.

        - Auto-generate the implementations of DOMHTMLAppletElement and DOMHTMLEmbedElement
          using the new [ConvertFromString] property.

        - Add forward declarations for NS* types to auto-generated classes.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMHTMLAppletElement.mm: Removed.
        * bindings/objc/DOMHTMLEmbedElement.mm: Removed.
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVG.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * ksvg2/svg/SVGPatternElement.idl:
        * ksvg2/svg/SVGPolygonElement.idl:
        * ksvg2/svg/SVGPolylineElement.idl:
        * ksvg2/svg/SVGRadialGradientElement.idl:
        * ksvg2/svg/SVGRenderingIntent.idl:
        * ksvg2/svg/SVGScriptElement.idl:
        * ksvg2/svg/SVGSetElement.idl:
        * ksvg2/svg/SVGStopElement.idl:
        * ksvg2/svg/SVGSwitchElement.idl:
        * ksvg2/svg/SVGSymbolElement.idl:
        * ksvg2/svg/SVGTRefElement.idl:
        * ksvg2/svg/SVGTSpanElement.idl:
        * ksvg2/svg/SVGTextContentElement.idl:
        * ksvg2/svg/SVGTextElement.idl:
        * ksvg2/svg/SVGTextPositioningElement.idl:
        * ksvg2/svg/SVGTitleElement.idl:
        * ksvg2/svg/SVGUseElement.idl:
        * ksvg2/svg/SVGViewElement.idl:
        * ksvg2/svg/SVGZoomEvent.idl:

2006-10-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Remove crossDomain, it was unused and is one of the last functions that use DeprecatedStringList.        
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        
2006-10-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Convert a bunch of RefPtr<StringImpl> to String.
        
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::didTellBridgeAboutLoad):
        (WebCore::FrameMac::haveToldBridgeAboutLoad):
        * dom/BeforeUnloadEvent.cpp:
        (WebCore::BeforeUnloadEvent::storeResult):
        * dom/BeforeUnloadEvent.h:
        (WebCore::BeforeUnloadEvent::result):
        * dom/Document.cpp:
        (WebCore::Document::createEntityReference):
        * dom/Entity.cpp:
        (WebCore::Entity::Entity):
        (WebCore::Entity::nodeName):
        (WebCore::Entity::toString):
        * dom/Entity.h:
        (WebCore::Entity::publicId):
        (WebCore::Entity::systemId):
        (WebCore::Entity::notationName):
        * dom/EntityReference.cpp:
        (WebCore::EntityReference::EntityReference):
        (WebCore::EntityReference::nodeName):
        (WebCore::EntityReference::cloneNode):
        (WebCore::EntityReference::toString):
        * dom/EntityReference.h:
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        (WebCore::KeyboardEvent::initKeyboardEvent):
        * dom/KeyboardEvent.h:
        (WebCore::KeyboardEvent::keyIdentifier):
        * dom/MutationEvent.cpp:
        (WebCore::MutationEvent::MutationEvent):
        (WebCore::MutationEvent::initMutationEvent):
        * dom/MutationEvent.h:
        (WebCore::MutationEvent::prevValue):
        (WebCore::MutationEvent::newValue):
        (WebCore::MutationEvent::attrName):
        * dom/Notation.cpp:
        (WebCore::Notation::Notation):
        (WebCore::Notation::nodeName):
        * dom/Notation.h:
        (WebCore::Notation::publicId):
        (WebCore::Notation::systemId):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):
        (WebCore::ProcessingInstruction::setData):
        (WebCore::ProcessingInstruction::nodeName):
        (WebCore::ProcessingInstruction::nodeValue):
        (WebCore::ProcessingInstruction::cloneNode):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::toString):
        * dom/ProcessingInstruction.h:
        (WebCore::ProcessingInstruction::target):
        (WebCore::ProcessingInstruction::data):
        (WebCore::ProcessingInstruction::localHref):

2006-10-07  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11206
        10 more SVG Objective-C auto-generated bindings

        - Auto-generate DOMSVGFilterElement, DOMSVGFitToViewBox, 
          DOMSVGForeignObjectElement, DOMSVGGElement, DOMSVGGradientElement,
          DOMSVGImageElement, DOMSVGLineElement, DOMSVGLinearGradientElement, 
          DOMSVGMarkerElement, DOMSVGMaskElement and DOMSVGPaint.

        - Auto-generate the text method for DOMRange.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMRGBColor.mm:
        * bindings/objc/DOMSVG.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/Range.idl:
        * ksvg2/svg/SVGFilterElement.cpp:
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterElement.idl:
        * ksvg2/svg/SVGForeignObjectElement.idl:
        * ksvg2/svg/SVGGElement.idl:
        * ksvg2/svg/SVGGradientElement.idl:
        * ksvg2/svg/SVGImageElement.idl:
        * ksvg2/svg/SVGLineElement.idl:
        * ksvg2/svg/SVGLinearGradientElement.idl:
        * ksvg2/svg/SVGMarkerElement.idl:
        * ksvg2/svg/SVGMaskElement.idl:
        * ksvg2/svg/SVGPaint.idl:

2006-10-07  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11198
        Auto-generate a few more Objective-C DOM interfaces

        - Fully auto-generate DOMAbstractView and DOMRange.

        - Auto-generate just the interface for DOMRGBColor.

        - Add DOMRanges.h as the new top level file for Ranges
          module.

        - Add DOMRanges.h and DOMXPath.h to DOM.mm

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.h:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMAbstractView.h: Removed.
        * bindings/objc/DOMAbstractView.mm: Removed.
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMRGBColor.h: Removed.
        * bindings/objc/DOMRGBColor.mm:
        * bindings/objc/DOMRange.h: Removed.
        * bindings/objc/DOMRanges.h: Added.
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/RGBColor.idl:
        * dom/Range.idl:
        * page/AbstractView.idl: Added.

2006-10-07  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Eric.

        Bug 10837: REGRESSION: Yahoo New Charts Crashes WebKit
        http://bugs.webkit.org/show_bug.cgi?id=10837

        Return null when there is no frame. This matches Firefox.

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::getValueProperty):

2006-10-07  David Hyatt  <hyatt@apple.com>

        Implement scroll corner painting (a white rect fill) for overflow areas to cover up
        scrollbar joins properly.

        Refactor painting of scrollbars and resizers into common functions.  Eliminate the
        extra 20 bytes per RenderLayer by cutting out m_resizerImage and m_resizerControlRect.

        Reviewed by mitz

        * page/FrameView.cpp:
        (WebCore::selectCursor):
        (WebCore::FrameView::handleMouseMoveEvent):
        * platform/mac/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::horizontalScrollbarHeight):
        (WebCore::PlatformScrollbar::verticalScrollbarWidth):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::scrollCornerRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::isPointInResizeControl):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:

2006-10-07  Mark Rowe  <bdash@webkit.org>

        Reviewed by Mitz.

        Linux/Gdk build fixes, primarily consisting of s/ScrollBar/Scrollbar/ and
        matching recent ResourceLoader changes.

        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::openURL):
        (WebCore::FrameGdk::urlSelected):
        * platform/gdk/PlatformScrollBar.h:
        * platform/gdk/ResourceLoaderCurl.cpp:
        (WebCore::ResourceLoader::start):
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::hScrollbarMode):
        (WebCore::ScrollView::vScrollbarMode):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameView::passMousePressEventToScrollbar):
        (Widget::removeFromParent):
        (ScrollView::addChild):
        (ScrollView::updateScrollbars):
        (ScrollView::scrollbarUnderMouse):
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::width):
        (PlatformScrollbar::height):
        (PlatformScrollbar::setEnabled):
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        (PlatformScrollbar::setRect):
        (Scrollbar::Scrollbar):
        (Scrollbar::setSteps):
        (Scrollbar::scroll):
        (Scrollbar::setValue):
        (Scrollbar::setProportion):

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Implement a new method for obtaining accurate clip rectangles that can be used by plugins to properly clip.

        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRect):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/Widget.cpp:
        (WebCore::Widget::windowClipRect):
        * platform/Widget.h:
        (WebCore::Widget::geometryChanged):
        (WebCore::Widget::handleMouseMoveEvent):
        (WebCore::Widget::handleMouseReleaseEvent):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::documentClipRect):
        * rendering/RenderLayer.h:

2006-10-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Add another method we'll need for scrollbar dodging

        * platform/ScrollView.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (ScrollView::resizerOverlapsContent):

2006-10-06  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11191
        Auto-generate the interfaces even for Objective-C DOM 
        bindings that need custom implementations

        - Fully auto-generate DOMEventTarget, DOMNodeFilter and 
          DOMHTMLOptionElement.

        - Auto-generate just the interface for DOMHTMLAppletElement,
          DOMHTMLEmbedElement, DOMSVGNumber, DOMSVGPoint and DOMSVGRect
          using the new IDL property ObjCCustomImplementation.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMEventTarget.h: Removed.
        * bindings/objc/DOMHTMLAppletElement.h: Removed.
        * bindings/objc/DOMHTMLEmbedElement.h: Removed.
        * bindings/objc/DOMHTMLOptionElement.h: Removed.
        * bindings/objc/DOMHTMLOptionElement.mm: Removed.
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMNodeFilter.h: Removed.
        * bindings/objc/DOMSVGNumber.h: Removed.
        * bindings/objc/DOMSVGPoint.h: Removed.
        * bindings/objc/DOMSVGPoint.mm:
        (-[DOMSVGPoint matrixTransform:]):
        * bindings/objc/DOMSVGRect.h: Removed.
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/EventTarget.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLOptionElement.idl:
        * ksvg2/svg/SVGNumber.idl:
        * ksvg2/svg/SVGPoint.idl:
        * ksvg2/svg/SVGRect.idl:

2006-10-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Make Qt/Linux compile again completly.

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::removeFromParent):

2006-10-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fix Qt/Linux build by adapting the s/ScrollBar/Scrollbar/ patch.

        * platform/qt/PlatformScrollBar.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::hScrollbarMode):
        (WebCore::ScrollView::vScrollbarMode):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::setSteps):
        (WebCore::Scrollbar::scroll):
        (WebCore::Scrollbar::setValue):
        (WebCore::Scrollbar::setProportion):
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        (WebCore::PlatformScrollbar::width):
        (WebCore::PlatformScrollbar::height):
        (WebCore::PlatformScrollbar::setEnabled):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):
        (WebCore::PlatformScrollbar::setRect):
        (FrameView::passMousePressEventToScrollbar):

2006-10-06  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11177
        Another round of Objective-C SVG DOM bindings auto-generation

        - Auto-generate DOMSVGAnimatedNumberList, DOMSVGAnimatedRect, 
          DOMSVGComponentTransferFunctionElement, DOMSVGFEBlendElement, 
          DOMSVGFEColorMatrixElement, DOMSVGFEComponentTransferElement, 
          DOMSVGFECompositeElement, DOMSVGFEDiffuseLightingElement,
          DOMSVGFEDisplacementMapElement, DOMSVGFEDistantLightElement, 
          DOMSVGFEFloodElement, DOMSVGFEFuncAElement, DOMSVGFEFuncBElement, 
          DOMSVGFEFuncGElement, DOMSVGFEFuncRElement, DOMSVGFEGaussianBlurElement, 
          DOMSVGFEImageElement, DOMSVGFEMergeElement, DOMSVGFEMergeNodeElement, 
          DOMSVGFEOffsetElement, DOMSVGFEPointLightElement, 
          DOMSVGFESpecularLightingElement, DOMSVGFESpotLightElement, 
          DOMSVGFETileElement, DOMSVGFETurbulenceElement, 
          DOMSVGFilterPrimitiveStandardAttributes and DOMSVGNumberList. 

        - Adds interfaces and implementation stubs for DOMSVGNumber, DOMSVGPoint
          and DOMSVGRect.

        - IDL clean up.

        - Make numOctaves in SVGFETurbulenceElement use a long instead of an int
          in it's macro declaration and definition.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMCSS.mm:
        (+[DOMCSSValue _CSSValueWith:WebCore::]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVG.h:
        * bindings/objc/DOMSVGNumber.h: Added.
        * bindings/objc/DOMSVGNumber.mm: Added.
        (-[DOMSVGNumber dealloc]):
        (-[DOMSVGNumber finalize]):
        (-[DOMSVGNumber value]):
        (-[DOMSVGNumber setValue:]):
        (-[DOMSVGNumber _SVGNumber]):
        (-[DOMSVGNumber _initWithFloat:]):
        (+[DOMSVGNumber _SVGNumberWith:]):
        * bindings/objc/DOMSVGPoint.h: Added.
        * bindings/objc/DOMSVGPoint.mm: Added.
        (-[DOMSVGPoint dealloc]):
        (-[DOMSVGPoint finalize]):
        (-[DOMSVGPoint x]):
        (-[DOMSVGPoint setX:]):
        (-[DOMSVGPoint y]):
        (-[DOMSVGPoint setY:]):
        (-[DOMSVGPoint WebCore::]):
        (-[DOMSVGPoint _initWithFloatPoint:WebCore::]):
        (+[DOMSVGPoint _SVGPointWith:WebCore::]):
        * bindings/objc/DOMSVGRect.h: Added.
        * bindings/objc/DOMSVGRect.mm: Added.
        (-[DOMSVGRect dealloc]):
        (-[DOMSVGRect finalize]):
        (-[DOMSVGRect x]):
        (-[DOMSVGRect setX:]):
        (-[DOMSVGRect y]):
        (-[DOMSVGRect setY:]):
        (-[DOMSVGRect width]):
        (-[DOMSVGRect setWidth:]):
        (-[DOMSVGRect height]):
        (-[DOMSVGRect setHeight:]):
        (-[DOMSVGRect WebCore::]):
        (-[DOMSVGRect _initWithFloatRect:WebCore::]):
        (+[DOMSVGRect _SVGRectWith:WebCore::]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * ksvg2/svg/SVGAnimatedNumberList.idl:
        * ksvg2/svg/SVGAnimatedRect.idl:
        * ksvg2/svg/SVGComponentTransferFunctionElement.idl:
        * ksvg2/svg/SVGCursorElement.idl:
        * ksvg2/svg/SVGFEBlendElement.idl:
        * ksvg2/svg/SVGFEColorMatrixElement.idl:
        * ksvg2/svg/SVGFEComponentTransferElement.idl:
        * ksvg2/svg/SVGFECompositeElement.idl:
        * ksvg2/svg/SVGFEDiffuseLightingElement.idl:
        * ksvg2/svg/SVGFEDisplacementMapElement.idl:
        * ksvg2/svg/SVGFEDistantLightElement.idl:
        * ksvg2/svg/SVGFEFloodElement.idl:
        * ksvg2/svg/SVGFEFuncAElement.idl:
        * ksvg2/svg/SVGFEFuncBElement.idl:
        * ksvg2/svg/SVGFEFuncGElement.idl:
        * ksvg2/svg/SVGFEFuncRElement.idl:
        * ksvg2/svg/SVGFEGaussianBlurElement.idl:
        * ksvg2/svg/SVGFEImageElement.idl:
        * ksvg2/svg/SVGFEMergeElement.idl:
        * ksvg2/svg/SVGFEMergeNodeElement.idl:
        * ksvg2/svg/SVGFEOffsetElement.idl:
        * ksvg2/svg/SVGFEPointLightElement.idl:
        * ksvg2/svg/SVGFESpecularLightingElement.idl:
        * ksvg2/svg/SVGFESpotLightElement.idl:
        * ksvg2/svg/SVGFETileElement.idl:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.idl:
        * ksvg2/svg/SVGNumberList.idl:

2006-10-06  Adam Roben  <aroben@apple.com>

        Backing out my previous change.

        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):

2006-10-06  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::windowResizerRect):

2006-10-06  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        More loader tweaks.

        * platform/ResourceLoader.h:
        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ResourceLoader::newHTTPRequest):

2006-10-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by aroben.

        Stub out some methods that we'll be able to use to dodge a window resizer.

        * bridge/win/FrameWin.h:
        * page/Frame.h:
        (WebCore::Frame::windowResizerRect):
        * page/FrameView.h:
        * platform/ScrollView.h:
        (WebCore::ScrollView::windowResizerRect):
        * platform/Widget.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameView::windowResizerRect):
        (Widget::setParent):
        (Widget::parent):
        (FrameWin::windowResizerRect):

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Stub out setFrameGeometry.
        
        * platform/ScrollView.h:

2006-10-05  Adele Peterson  <adele@apple.com>

        Reverting autoscroll fix.  I need to rework this a little.

        * page/Frame.cpp:
        (WebCore::Frame::handleAutoscroll):
        (WebCore::Frame::autoscrollTimerFired):
        (WebCore::Frame::stopAutoscrollTimer):
        * page/Frame.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::~RenderListBox):

2006-10-05  Alice  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://problem/4731778>

        * editing/CommandByName.cpp:
        (WebCore::Frame::Command::):
        was calling the wrong enabledFn for arrow selection and navigation

2006-10-05  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - Fix for <rdar://problem/4707489> After timers fix, crash below RenderLayer::autoscroll after moving/destroying active <input type="text">
          and <rdar://problem/4707519> After timers fix, crash below RenderLayer::autoscroll after moving/destroying active textarea

        * rendering/RenderLayer.cpp: (WebCore::RenderLayer::~RenderLayer): If the renderer is being autoscrolled, then stop the autoscroll timer.
        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::~RenderListBox): ditto.

        * page/Frame.cpp: Added getter and setter for the renderer being autoscrolled.
        (WebCore::Frame::handleAutoscroll):
        (WebCore::Frame::autoscrollTimerFired):
        (WebCore::Frame::autoscrollRenderer):
        (WebCore::Frame::setAutoscrollRenderer):
        (WebCore::Frame::stopAutoscrollTimer):
        * page/Frame.h:

2006-10-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric.

        Fix win32 build bustage after ggaren's Scrollbar renaming changes.
        Properly include PlatformScrollBar.h in WbCore.vcproj.
        Clean up WidgetWin.cpp a bit.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/Widget.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::hScrollbarMode):
        (WebCore::ScrollView::vScrollbarMode):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameView::passMousePressEventToScrollbar):
        (Widget::removeFromParent):
        (ScrollView::scrollbarUnderMouse):
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::width):
        (PlatformScrollbar::height):
        (PlatformScrollbar::setEnabled):
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        (PlatformScrollbar::setRect):
        (Scrollbar::Scrollbar):
        (Scrollbar::setSteps):
        (Scrollbar::scroll):
        (Scrollbar::setValue):
        (Scrollbar::setProportion):
        * platform/win/WidgetWin.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::Widget):
        (WebCore::Widget::setContainingWindow):
        (WebCore::Widget::containingWindow):

2006-10-05  Geoffrey Garen  <ggaren@apple.com>

        build fix.
        
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::createFrame):
        * bridge/mac/FrameViewMac.mm:
        (WebCore::FrameView::passMousePressEventToScrollbar):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge installInFrame:]):
        * bridge/mac/WebCoreFrameView.h:
        * platform/ScrollBar.cpp:
        * platform/Widget.h:
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBarMac.mm:
        (NSControlSizeForScrollBarControlSize):
        (-[WebCoreScrollBar initWithPlatformScrollbar:]):
        (-[WebCoreScrollBar detachPlatformScrollbar]):
        (-[WebCoreScrollBar scroll:]):
        (-[WebCoreScrollBar widget]):
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):
        (WebCore::PlatformScrollbar::scrollbarHit):
        (WebCore::PlatformScrollbar::width):
        (WebCore::PlatformScrollbar::height):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::setEnabled):
        (WebCore::PlatformScrollbar::paint):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::vScrollbarMode):
        (WebCore::ScrollView::hScrollbarMode):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::removeFromParent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::destroyScrollbar):

2006-10-05  Geoffrey Garen  <ggaren@apple.com>

        build fix.
        
        * platform/Widget.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::destroyScrollbar):

2006-10-06  Mitz Pettel  <mitz@webkit.org>

        http://bugs.webkit.org/show_bug.cgi?id=8276
        Fix broken manual test added back in r13990.

        Add resource forks for test resources.

        * manual-tests/resources/plain-text-paste/._1.textClipping: Added.
        * manual-tests/resources/plain-text-paste/._2.textClipping: Added.
        * manual-tests/resources/plain-text-paste/._4.txt: Added.
        * manual-tests/resources/plain-text-paste/._5.webloc: Added.

2006-10-05  David Hyatt  <hyatt@apple.com>

        Rename addClip to clip.

        Reviewed by darin

        * kcanvas/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint):
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clip):
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::concatCTM):
        * platform/cg/GraphicsContextPlatformPrivate.h:
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::addRoundedRectClip):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBackground):
        (WebCore::InlineFlowBox::paintBackgroundAndBorder):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::paintObject):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::setClip):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::paintObject):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):

2006-10-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=10386
          Delete RenderImageButton.* and remove references from .vcproj and .bkl files

        * CMakeLists.txt:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCoreSources.bkl:
        * rendering/RenderImageButton.cpp: Removed.
        * rendering/RenderImageButton.h: Removed.

2006-10-05  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=11067
          manual-tests/scrollbar-hittest2.html is invalid

        * manual-tests/scrollbar-hittest2.html:

2006-10-05  David Carson  <dacarson@gmail.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11152
        Adjust the tokenizer chunk size to be smaller for
        mobile devices, and also decrease the yield timer
        for the tokenizer so that it can resume earlier.

        * html/HTMLTokenizer.cpp:
        * config.h:

2006-10-05  Adam Roben  <aroben@apple.com>

        Removing accidentally-checked-in do-nothing code.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):

2006-10-05  David Carson  <dacarson@gmail.com>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11158
        Initialize class variables

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):

2006-10-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin, landed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=11176
        Fix win32 build, adapt to Maciej's ResourceLoader changes.

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::start):

2006-10-05  Brett Wilson  <brettw@chromium.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10989
        Provide a way for embedders to implement BrowserExtensionWin

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/BrowserExtensionWin.cpp: Added.
        (BrowserExtensionWin::BrowserExtensionWin):
        (BrowserExtensionWin::setTypedIconURL):
        (BrowserExtensionWin::setIconURL):
        (BrowserExtensionWin::getHistoryLength):
        (BrowserExtensionWin::canRunModal):
        (BrowserExtensionWin::createNewWindow):
        (BrowserExtensionWin::canRunModalNow):
        (BrowserExtensionWin::runModal):
        (BrowserExtensionWin::goBackOrForward):
        (BrowserExtensionWin::historyURL):
        * bridge/win/BrowserExtensionWin.h:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::createNewWindow):
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:

2006-10-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.
        
        Fixed <rdar://problem/4766987>
        
        - renamed ScrollBar to Scrollbar and scroll bar to scrollbar in every case
        except for file names.
        
        - fixed RenderLayer to properly tear down scrollbars, removing them from
        their parents.

        * bindings/js/kjs_window.cpp:
        (KJS::showModalDialog):
        (KJS::setWindowFeature):
        (KJS::parseWindowFeatures):
        * bridge/BrowserExtension.h:
        * dom/Document.cpp:
        (WebCore::Document::setInPageCache):
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::init):
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h:
        (WebCore::HTMLFrameElement::scrollingMode):
        * page/Frame.cpp:
        (WebCore::Frame::finishedParsing):
        (WebCore::Frame::scrollbarsVisible):
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::clear):
        (WebCore::FrameView::initScrollbars):
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::handleMousePressEvent):
        (WebCore::selectCursor):
        (WebCore::FrameView::handleMouseMoveEvent):
        (WebCore::FrameView::setScrollbarsMode):
        (WebCore::FrameView::setVScrollbarMode):
        (WebCore::FrameView::setHScrollbarMode):
        (WebCore::FrameView::restoreScrollbar):
        (WebCore::FrameView::dispatchMouseEvent):
        (WebCore::FrameView::scrollbarMoved):
        * page/FrameView.h:
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::MouseEventWithHitTestResults):
        * page/MouseEventWithHitTestResults.h:
        (WebCore::MouseEventWithHitTestResults::scrollbar):
        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::setValue):
        (WebCore::Scrollbar::setProportion):
        (WebCore::Scrollbar::setSteps):
        (WebCore::Scrollbar::scroll):
        * platform/ScrollBar.h:
        (WebCore::):
        (WebCore::ScrollbarClient::~ScrollbarClient):
        (WebCore::Scrollbar::~Scrollbar):
        (WebCore::Scrollbar::orientation):
        (WebCore::Scrollbar::controlSize):
        (WebCore::Scrollbar::hasPlatformScrollbars):
        (WebCore::Scrollbar::client):
        * platform/ScrollBarMode.h:
        (WebCore::):
        * platform/ScrollView.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInScrollbar):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::horizontaScrollbarWidget):
        (WebCore::RenderLayer::verticalScrollbarWidget):
        (WebCore::RenderLayer::valueChanged):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::destroyScrollbar):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::verticalScrollbarWidth):
        (WebCore::RenderLayer::horizontalScrollbarHeight):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::horizontalScrollbar):
        (WebCore::RenderLayer::verticalScrollbar):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::~RenderListBox):
        (WebCore::RenderListBox::calcMinMaxWidth):
        (WebCore::RenderListBox::isPointInScrollbar):
        (WebCore::RenderListBox::optionAtPoint):
        (WebCore::RenderListBox::valueChanged):
        * rendering/RenderListBox.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::NodeInfo::scrollbar):
        (WebCore::RenderObject::NodeInfo::setScrollbar):

2006-10-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=11138
        Incorrect mouse event generation on Windows

        * platform/win/MouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        (1) Set mouse button even for non-click-related messages.
        (2) Track clicks correctly for all buttons, not just the left button.

2006-10-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Fix Qt/Linux build, adapt to Eric's quartz changes and to Maciej's ResourceLoader changes.

        * kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp:
        (WebCore::KRenderingPaintServerLinearGradientQt::renderPath):
        (WebCore::KRenderingPaintServerLinearGradientQt::setup):
        (WebCore::KRenderingPaintServerRadialGradientQt::setup):
        (WebCore::KRenderingPaintServerRadialGradientQt::renderPath):
        * kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp:
        (WebCore::KRenderingPaintServerPatternQt::renderPath):
        * kcanvas/device/qt/KRenderingPaintServerQt.cpp:
        (WebCore::KRenderingPaintServerQt::setPenProperties):
        * kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp:
        (WebCore::KRenderingPaintServerSolidQt::setup):
        (WebCore::KRenderingPaintServerSolidQt::renderPath):
        * kcanvas/device/qt/RenderPathQt.cpp:
        (WebCore::getPathStroke):

2006-10-05  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11054
        REGRESSION: Traditional Chinese encoding in login authentication

        1. Treat GB2312 encoding as GBK (its more modern superset), to match other browsers.
        2. On the Web, GB2312 is encoded as EUC-CN or HZ, while ICU provides a native encoding
        for encoding GB_2312-80 and several others. So, we need to override this behavior, too.

        * platform/StreamingTextDecoderICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames):

2006-10-05  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Removed dead code.
        Filed http://bugs.webkit.org/show_bug.cgi?id=11167 to for followup on removed FIXMEs

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/ecma/GlobalObject.cpp: Removed.
        * ksvg2/ecma/GlobalObject.h: Removed.

2006-10-05  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Small ResourceLoaderInternal tweak.

        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):

2006-10-05  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        More incremental KCanvas cleanup and optimization.
        Added SVGRenderStyle::hasFill() and hasStroke() removed more KSVGPainterFactory methods.
        Optimized dash array usage to not malloc.
        Also removed un-needed KSVGRenderingStyle includes.

        * kcanvas/KCanvasTreeDebug.cpp:
        (WebCore::operator<<):
        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint):
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (WebCore::RenderPath::strokeBBox):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (WebCore::KRenderingPaintServerGradientQuartz::setup):
        (WebCore::KRenderingPaintServerGradientQuartz::renderPath):
        (WebCore::KRenderingPaintServerGradientQuartz::teardown):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (WebCore::KRenderingPaintServerSolidQuartz::setup):
        (WebCore::KRenderingPaintServerSolidQuartz::renderPath):
        (WebCore::KRenderingPaintServerPatternQuartz::setup):
        (WebCore::KRenderingPaintServerPatternQuartz::renderPath):
        * kcanvas/device/quartz/QuartzSupport.mm:
        (WebCore::applyStrokeStyleToContext):
        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::hasStroke):
        (WebCore::SVGRenderStyle::hasFill):
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::strokePaintServer):
        * ksvg2/misc/KCanvasRenderingStyle.h:

2006-10-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - changed ResourceLoader to be refcounted

        It keeps a ref on itself while loading as well. This makes
        for a much saner memory management model than the previous.

        * bridge/mac/WebCoreResourceLoaderImp.mm:
        (-[WebCoreResourceLoaderImp finishJobAndHandle:]):
        * dom/XMLTokenizer.cpp:
        (WebCore::openFunc):
        * loader/icon/IconLoader.cpp:
        (IconLoader::IconLoader):
        (IconLoader::~IconLoader):
        (IconLoader::startLoading):
        (IconLoader::stopLoading):
        (IconLoader::receivedData):
        * loader/icon/IconLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        * platform/ResourceLoader.cpp:
        (WebCore::ResourceLoader::create):
        (WebCore::ResourceLoader::kill):
        * platform/ResourceLoader.h:
        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::start):
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/xmlhttprequest.h:

2006-10-05  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Improve SVG opacity performance by clipping to the object bbox before starting a new opacity layer.
        http://bugs.webkit.org/show_bug.cgi?id=11163
        
        No SVG performance tests yet.

        * kcanvas/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint):
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Stub out some stuff for widget focusability.

        Reviewed by maciej
 
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchMouseEvent):
        * platform/ScrollView.h:
        * platform/Widget.h:

2006-10-05  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej and Tim H.

        Copy some WebKit frame lifetime logic into WebCore -- just a step
        along the path to frame lifetime being handled completely in WebCore.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::setView): Move platform-independent parts of this
        method into Frame.
        * page/Frame.cpp:
        (WebCore::Frame::setView): Adding platform-independent parts of
        FrameMac::setView
        (WebCore::Frame::detachChildren): New method to accomplish what
        -[WebFrameBridge _detachChildren] currently does.
        (WebCore::Frame::clear): Call detachChildren
        * page/Frame.h: Add declaration for detachChildren

2006-10-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        Fixed <rdar://problem/4758577> REGRESSION: Business and People widgets fails to complete search query

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeader):
        removed exception set when the request is not open yet

2006-10-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4654328>
        Safari Crashes in WebCore::PluginTokenizer::writeRawData If I Try to Open a SWF File With Plug-ins Turned Off
        
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        Only send the data to the plug-in if plug-ins are enabled, otherwise just silently eat it.

2006-10-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=11130
        Convert "undefined" to AE missing value

        * bridge/mac/WebCoreFrameBridge.mm:
        (aeDescFromJSValue): return missing value for UndefinedType.

2006-10-03  Dave Hyatt  <hyatt@apple.com>

        Scrolling work.  Eliminate convertTo/FromContainingWindow as cross-platform functions.  Add back in
        the windowToContents/contentsToWindow functions.
        
        Reviewed by anders

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::eventMayStartDrag):
        (WebCore::FrameMac::dragHysteresisExceeded):
        (WebCore::FrameMac::mouseDown):
        (WebCore::FrameMac::shouldDragAutoNode):
        (WebCore::FrameMac::sendContextMenuEvent):
        * bridge/mac/FrameViewMac.mm:
        (WebCore::FrameView::passMousePressEventToScrollbar):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge _visiblePositionForPoint:]):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        (WebCore::EventTargetNode::dispatchWheelEvent):
        * page/Frame.cpp:
        (WebCore::Frame::selectClosestWordFromMouseEvent):
        (WebCore::Frame::handleMousePressEventTripleClick):
        (WebCore::Frame::handleMousePressEventSingleClick):
        (WebCore::Frame::handleMouseMoveEvent):
        (WebCore::Frame::handleMouseReleaseEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::handleMousePressEvent):
        (WebCore::FrameView::handleMouseDoubleClickEvent):
        (WebCore::selectCursor):
        (WebCore::FrameView::handleMouseMoveEvent):
        (WebCore::FrameView::handleMouseReleaseEvent):
        (WebCore::FrameView::dispatchDragEvent):
        (WebCore::FrameView::prepareMouseEvent):
        (WebCore::FrameView::handleWheelEvent):
        * page/FrameView.h:
        * platform/ScrollBar.cpp:
        (WebCore::ScrollBar::setValue):
        * platform/ScrollView.h:
        * platform/Widget.h:
        (WebCore::Widget::scrolled):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/mac/WidgetMac.mm:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::positionScrollbars):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget):

2006-09-26  David Smith  <catfish.man@gmail.com>

        Reviewed by Timothy.

        http://bugs.webkit.org/show_bug.cgi?id=3723
        Add -scrollDOMRangeToVisible:

        No automated tests are possible as this code path isn't reachable from JavaScript.

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge scrollDOMRangeToVisible:]):

2006-10-03  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Timothy.

        <http://bugs.webkit.org/show_bug.cgi?id=10338>
        When contentEditable, cursor doesn't change to hand
        
        Allow the behaviour of editable links to be specified by a WebPreference
        The preference WebKitEditableLinkBehavior has four options:
         - AlwaysLive: Safari 2.0 behaviour
         - OnlyLiveWithShiftKey: Firefox/WinIE behaviour (and prior WebKit-ToT behaviour)
         - LiveWhenNotFocused: Editable links are live only when their editable block is not
             focused, or when the shift key is pressed
         - DefaultBehavior: This is the same as OnlyLiveWithShiftKey.
         
        No layout tests, just a modification of a manual-test as it isn't possible to test
        this automatically.

        * bridge/mac/WebCoreSettings.h:
        * bridge/mac/WebCoreSettings.mm:
        (-[WebCoreSettings setEditableLinkBehavior:]):
        (-[WebCoreSettings editableLinkBehavior]):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::setActive):
        * html/HTMLAnchorElement.h:
        * manual-tests/contenteditable-link.html:
        * page/FrameView.cpp:
        (WebCore::nodeIsNotBeingEdited):
        (WebCore::selectCursor):
        * page/Settings.h:
        (WebCore::Settings::):
        (WebCore::Settings::Settings):
        (WebCore::Settings::editableLinkBehavior):
        (WebCore::Settings::setEditableLinkBehavior):

2006-10-03  Beth Dakin  <bdakin@apple.com>

        Reviewed Darin.

        No test cases needed.

        Implemented a version of StringImpl::append that takes a UChar* and 
        a length.

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::append):
        (WebCore::StringImpl::insert): Call new append instead of making a 
        new StringImpl.
        * platform/StringImpl.h:

2006-10-03  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11099
        HttpSendRequestEx results in ERROR_HTTP_HEADER_NOT_FOUND

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::onHandleCreated):

2006-10-02  Geoffrey Garen  <ggaren@apple.com>

        Feared, loathed, reviewed by Darin.

        More frame/iframe merging. Merged IFRAME::willRemove and IFRAME::detach 
        into FRAME, plus other cleanup.
        
        No new behavior, so no new test. Layout tests pass. Basic browsing and
        Mail editing seem to work.
        
        * dom/Node.cpp:
        (WebCore::Node::detach): Removed random commented-out code.
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::isURLAllowed): 
        (1) Removed reference to FrameView, to dissociate frame loading from rendering.
        (2) Renamed newURL to completeURL because the difference between newURL
        and URLString is that newURL is a KURL that is the complete version of URLString,
        not that it is new.
        (WebCore::HTMLFrameElement::willRemove): 
        (1) Removed close() call and moved close() code into willRemove(), also removing 
        close() call from detach(), since willRemove is the well-defined place 
        from DOM tear-down, not detach().
        (2) Removed manual renderer detach code because the DOM is not responsible
        for managing the render tree. I confirmed that this change not
        regress <rdar://problem/4132581>.
        (3) Removed questionable ASSERT. The ASSERT assumed that iframe elements
        lost their content frames after being removed from the DOM. That's our 
        current behavior, but it's going to change in future rounds of refactoring.
        This also fixes <rdar://problem/4750835>.
        (WebCore::HTMLFrameElement::setLocation): Removed wacky manual calls to
        attach/detach, because the render tree should not be in charge of deciding
        when to load.
        * html/HTMLFrameElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::attach): Renamed renderPart to renderPartObject,
        because the renderer is a renderPartObject, not a renderPart.
        * html/HTMLIFrameElement.h:

2006-10-03  Mark Rowe  <bdash@webkit.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=11137
        Bug 11137: GdkLauncher dies with "pure virtual method called" if
        window is closed while page still loading

        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::~FrameGdk): Call cancelAndClear to allow virtual
        methods to be called before the FrameGdk portion of "this" is torn down.

2006-10-03  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Handle tab key presses in the DOM.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::defaultEventHandler): Add tab key handling.
        * page/FrameView.cpp:
        (WebCore::FrameView::advanceFocus): Rename and reimplement
        focusNextPrevNode. Now we just call Element::focus().
        * page/FrameView.h: Rename focusNextPrevNode to advanceFocus and make
        it public.

2006-10-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs
        
        <rdar://problem/4760612>
        TOT REGRESSION: Repro assertion failure when forwarding draft in Range::compareBoundaryPoints
        
        No layout test possible, attributedStringFrom:(DOMNode*)...etc isn't available to DRT.
        
        * dom/Range.cpp:
        (WebCore::Range::boundaryPointsValid): compareBoundaryPoints asserts that the incoming 
        positions are non-null since most of it's callers would be in a bad state if the positions 
        were null.  boundaryPointsValid, which calls compareBoundaryPoints, is an exception.  
        Instead of removing the assert I've added nil checks in boundaryPointsValid, to keep it 
        from entering compareBoundaryPoints and hitting the assert.

2006-10-03  Adele Peterson  <adele@apple.com>

        Reviewed by Geoff.

        Make code for turning off new listbox implementation mac-only, since there's no implementation on other platforms.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::isKeyboardFocusable):
        (WebCore::HTMLSelectElement::isMouseFocusable):
        (WebCore::HTMLSelectElement::createRenderer):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        (WebCore::HTMLSelectElement::notifyOptionSelected):
        (WebCore::HTMLSelectElement::defaultEventHandler):

2006-10-04  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11132
          Caret disappears when you're typing

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Remove unnecessary call to
        clearCaretRectIfNeeded. The recomputeCaretRect now takes care of this.
        (WebCore::SelectionController::recomputeCaretRect): Explicitly set m_needsLayout
        to false so we can get the old caret repaint rect. Later we need to change the
        design so getting the rect doesn't have a side effect of causing a layout without
        invalidation.

2006-10-03  David Harrison  <harrison@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4671286> Candidate Window isn't displayed and only first candidate is displayed at typing location.

        Updated test:
        * fast/text/justified-text-rect.html

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge convertToNSRange:]):
        (-[WebCoreFrameBridge convertToDOMRange:]):
        Make the selection's root editable element (or the document itself) be
        the basis for NSRange conversions. This supports "shadow DOM" like
        that for text fields and text areas.
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        Pass the document element as the scope.
        
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength):
        Make the first parameter the scope.
        
        * editing/TextIterator.h:
        Make the first parameter of rangeFromLocationAndLength() the scope.

2006-10-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fix Qt/Linux build.

        * CMakeLists.txt: Add counter related files.

2006-10-03  Mark Rowe  <bdash@webkit.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10981
        Linux/GDK build fixes

        Based on a patch by Krzysztof Kowalczyk.

        * WebCoreSources.bkl:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::doScroll):
        (WebCore::FrameGdk::handleGdkEvent):
        * platform/gdk/PlatformScrollBar.h: Added.
        (WebCore::PlatformScrollBar::isWidget):
        * platform/gdk/ScrollViewGdk.cpp:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameView::passMousePressEventToScrollbar):
        (FrameView::passMousePressEventToSubframe):
        (FrameView::passMouseReleaseEventToSubframe):
        (FrameView::passMouseMoveEventToSubframe):
        (FrameView::passWheelEventToSubframe):
        (Cursor::Cursor):
        (Widget::invalidate):
        (Widget::invalidateRect):
        (ScrollView::wheelEvent):
        (ScrollView::convertToContainingWindow):
        (ScrollView::convertFromContainingWindow):
        (GraphicsContext::clip):
        (PlatformScrollBar::PlatformScrollBar):
        (PlatformScrollBar::updateThumbPosition):
        (PlatformScrollBar::updateThumbProportion):
        (ScrollBar::ScrollBar):
        (ScrollBar::setProportion):
        (WebCore::supportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/gdk/WheelEventGdk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):

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

        Reviewed by Maciej.

        Let Windows determine which mouse button is pressed.

        * platform/PlatformMouseEvent.h: Add message parameter to constructor.
        * platform/win/MouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Use message
        parameter to determine which mouse button is pressed.

2006-10-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by anders
        
        Build fix
        
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::empty):
        * editing/SelectionController.h:

2006-10-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4755287>
        Writely Editor: Crash occurs at WebCore::maxDeepOffset(WebCore::Node const*) when attempting to create a OL/UL following a HR element

        * editing/markup.cpp:
        (WebCore::createMarkup): Migrate to isBlock (isBlockFlow is true for inline replaced 
        elements).  Don't skip blocks that aren't containers (like horizontal rules).

2006-10-03  Darin Adler  <darin@apple.com>

        Reviewed by Justin Garcia.

        - correct mistaken code that would restart blinking every
          time "invalidateSelection" is called even if the caret
          has not moved

        * editing/SelectionController.h:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Update for name change.
        (WebCore::SelectionController::recomputeCaretRect): New function.
        Computes caret rect and does any necessary invalidation if the rect
        changes.
        (WebCore::SelectionController::invalidateCaretRect): Renamed from
        needsCaretRepaint. Invalidates the caret rect unconditionally. Also
        calls recomputeCaretRect as a side effect.

        * page/Frame.cpp:
        (WebCore::Frame::invalidateSelection): Remove unneeded call to
        clearCaretRectIfNeeded.
        (WebCore::Frame::clearCaretRectIfNeeded): Updated for name change.
        (WebCore::Frame::selectionLayoutChanged): Restructured to use the new
        recomputeCaretRect function and not restart blinking if caret has
        not changed position.
        (WebCore::Frame::caretBlinkTimerFired): Removed some checks that
        are not needed since selectionLayoutChanged already checks these.

        * page/FramePrivate.h: Removed unused m_blinkCaret.

2006-10-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Build fix. Add counters to vcproj.

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-10-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele

        If the Icon DB schema changes underneath you, the latest ToT can crash and burn when writing
        icon data out because we don't correctly check SQL error conditions.

        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::writeToDatabase):

2006-10-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Hyatt.

        Added method to find out whether a layout has occurred.

        * page/FrameView.cpp:
        (WebCore::FrameView::didFirstLayout):
        * page/FrameView.h:

2006-10-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Initial implementation of CSS2 counters. See http://
        bugs.webkit.org/show_bug.cgi?id=4980 for more details.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp: 
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Return 
        the increment/reset list now that this is implemented.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText): 
        * css/Counter.h:
        (WebCore::Counter::Counter):
        (WebCore::Counter::~Counter):
        (WebCore::Counter::identifier):
        (WebCore::Counter::listStyle):
        (WebCore::Counter::separator):
        (WebCore::Counter::listStyleNumber):
        (WebCore::Counter::setIdentifier):
        (WebCore::Counter::setListStyle):
        (WebCore::Counter::setSeparator):
        * css/cssparser.cpp:
        (WebCore::CSSParser::addProperty): Take care of reset/increment
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseContent): content can now take counters
        (WebCore::CSSParser::parseCounterContent): Parse counter() and 
        counters()
        (WebCore::CSSParser::parseCounter): Parse counter-reset and 
        counter-increment
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::CSSStyleSelector::applyProperty):
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::insert): Implemented a version of insert that 
        accepts a UChar* and a length.
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::insert): Same as above.
        * platform/StringImpl.h:
        * rendering/CounterListItem.h: Added.
        * rendering/CounterNode.cpp: Added.
        (WebCore::CounterNode::CounterNode):
        (WebCore::CounterNode::insertAfter):
        (WebCore::CounterNode::removeChild):
        (WebCore::CounterNode::remove):
        (WebCore::CounterNode::setUsesSeparator):
        (WebCore::CounterNode::recountAndGetNext):
        (WebCore::CounterNode::recountTree):
        (WebCore::CounterNode::setSelfDirty):
        (WebCore::CounterNode::setParentDirty):
        * rendering/CounterNode.h: Added.
        (WebCore::CounterNode::~CounterNode):
        (WebCore::CounterNode::parent):
        (WebCore::CounterNode::previousSibling):
        (WebCore::CounterNode::nextSibling):
        (WebCore::CounterNode::firstChild):
        (WebCore::CounterNode::lastChild):
        (WebCore::CounterNode::value):
        (WebCore::CounterNode::setValue):
        (WebCore::CounterNode::count):
        (WebCore::CounterNode::setCount):
        (WebCore::CounterNode::setHasSeparator):
        (WebCore::CounterNode::isReset):
        (WebCore::CounterNode::hasSeparator):
        (WebCore::CounterNode::willNeedLayout):
        (WebCore::CounterNode::setWillNeedLayout):
        (WebCore::CounterNode::isRoot):
        (WebCore::CounterNode::setRenderer):
        (WebCore::CounterNode::renderer):
        * rendering/CounterResetNode.cpp: Added.
        (WebCore::CounterResetNode::CounterResetNode):
        (WebCore::CounterResetNode::insertAfter):
        (WebCore::CounterResetNode::removeChild):
        (WebCore::CounterResetNode::recountAndGetNext):
        (WebCore::CounterResetNode::setParentDirty):
        (WebCore::CounterResetNode::updateTotal):
        * rendering/CounterResetNode.h: Added.
        (WebCore::CounterResetNode::firstChild):
        (WebCore::CounterResetNode::lastChild):
        (WebCore::CounterResetNode::isReset):
        (WebCore::CounterResetNode::total):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updatePseudoChildForObject): Account for 
        counter content.
        * rendering/RenderCounter.cpp: Added.
        (WebCore::RenderCounter::RenderCounter):
        (WebCore::RenderCounter::layout):
        (WebCore::toRoman):
        (WebCore::toLetterString):
        (WebCore::toHebrew):
        (WebCore::RenderCounter::convertValueToType):
        (WebCore::RenderCounter::calcMinMaxWidth):
        * rendering/RenderCounter.h: Added.
        (WebCore::RenderCounter::renderName):
        (WebCore::RenderCounter::isCounter):
        * rendering/RenderObject.cpp:
        (WebCore::getRenderObjectsToCounterNodeMaps): Maps RenderObjects to 
        maps of CounterNodes
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::destroy): Destroy the maps.
        (WebCore::RenderObject::findCounter): Finds/creates counters.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isCounter):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleVisualData::StyleVisualData):
        (WebCore::RenderStyle::arenaDelete):
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::setContent):
        (WebCore::ContentData::clearContent):
        (WebCore::RenderStyle::counterDataEquivalent):
        (WebCore::hasCounter):
        (WebCore::RenderStyle::hasCounterReset):
        (WebCore::RenderStyle::hasCounterIncrement):
        (WebCore::readCounter):
        (WebCore::RenderStyle::counterReset):
        (WebCore::RenderStyle::counterIncrement):
        * rendering/RenderStyle.h:
        (WebCore::StyleVisualData::operator==):
        (WebCore::CounterData::CounterData):
        (WebCore::CounterData::identifier):
        (WebCore::CounterData::listStyle):
        (WebCore::CounterData::separator):
        (WebCore::ContentData::contentCounter):
        (WebCore::ContentData::):
        (WebCore::RenderStyle::counterIncrement):
        (WebCore::RenderStyle::counterReset):
        (WebCore::RenderStyle::setCounterIncrement):
        (WebCore::RenderStyle::setCounterReset):
        (WebCore::RenderStyle::setCounterResetList):
        (WebCore::RenderStyle::setCounterIncrementList):
        (WebCore::RenderStyle::counterResetValueList):
        (WebCore::RenderStyle::counterIncrementValueList):

2006-10-02  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        - Fix for <rdar://problem/4463841> Switch to use new list box implementation for <select multiple>

        There are a few outstanding issues, so I've left the old code in for now.  So you can use the old-style listboxes
        by using "-webkit-appearance:none".

        * css/html4.css:

2006-10-02  David Harrison  <harrison@apple.com>

        Reverted the code part of r16696, my patch for <rdar://problem/4641262>, because the problem was
        addressed at a deeper level by r16696, the patch for <http://bugs.webkit.org/show_bug.cgi?id=10842>.
        Left the layout test.
        
        * rendering/bidi.cpp:
        (WebCore::checkMidpoints):

2006-10-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Fix Qt/Linux build.

        * platform/qt/TemporaryLinkStubs.cpp: s/DeprecatedStringList/Vector<String>/
        (WebCore::supportedKeySizes):

2006-10-02  Nikolas Zimmermann <zimmermann@kde.org>

        Reviewed by eseidel & mjs.  Landed by eseidel.

        Fix Qt/Linux build with older gcc 3.3.4.
        http://bugs.webkit.org/show_bug.cgi?id=11116

        As discussed with Maciej, the GCC_ROOT_NS_HACK
        can be completely removed, as well as the friendship
        between cacheGlobalObject & the JS* objects.

        * bindings/scripts/CodeGeneratorJS.pm: Remove friendship.
        * platform/image-decoders/png/pnggccrd.c: Fix comments for gcc3.
        (png_read_filter_row_mmx_avg):
        * platform/image-decoders/png/pngvcrd.c: Ditto.
        (png_mmx_support):
        (png_read_filter_row_mmx_avg):

2006-10-01  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Alexey.

        - reverted fix for http://bugs.webkit.org/show_bug.cgi?id=10893 since it led to layout test crashes

        * css/CSSGrammar.y:

2006-10-01  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Eliminate a few more hotspots in SVG drawing code.
        
        No test cases were harmed in the making of this patch.  (And SVG has no perf tests.)

        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (WebCore::KRenderingPaintServerSolidQuartz::setup): use a single shared colorspace, avoid a few mallocs
        * platform/mac/ColorMac.mm:
        (+[WebCoreControlTintObserver WebCore]): store a single shared colorspace instance

2006-10-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        More frame/iframe merging.
        
        - Removed needWidgetUpdate and related code. needWidgetUpdate is always
        false, so this was dead code.
        - Removed FIXME about setInViewSourceMode inside openURL(). openURL(), rather
        than attach(), is the correct place for setInViewSourceMode, because
        openURL() is the function that creates our frame.
        - Moved IFRAME insertedIntoDocument() code into FRAME, and removed FRAME
        code that did the same thing in other places.
        - Made FRAME's attach() method suffuciently generic so that IFRAME could
        call up to it, rather than skipping its superclass and calling up directly 
        to ELEMENT.
        - Changed a few IFRAME up-calls to ELEMENT into up-calls to FRAME.
        - Replaced ad hoc frame loading code in FRAME::attach() with call to
        openURL(), the designated frame loading function.

        Layout tests pass. I added a layout test for viewsource mode, since I
        broke it in the course of writing this patch.

2006-10-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        Get rid of availableStyleSheets() and remove DeprecatedStringList.h include.
        
        * dom/Node.h:
        Remove DeprecatedStringList class forward declaration.
        
        * editing/markup.cpp:
        Include DeprecatedStringList.h here since it's not included by Document.h anymore.
        
        * kcanvas/KCanvasTreeDebug.cpp:
        * kcanvas/KCanvasTreeDebug.h:
        Remove unused functions.
        
        * loader/loader.cpp:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameView.h:
        Fixup DeprecatedStringList.h includes.

2006-09-30  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4641262> REGRESSION: Japanese text corrupts on wrapping point

        Problem was that the decision to trim was based only on whether the character
        is a soft hyphen, which caused pretty much any Japanese character to go.
        Changed to decide based on whether the character is ignorable whitespace.
        
        Test:
        * fast/text/international/wrap-CJK-001.html

        * rendering/bidi.cpp:
        (WebCore::isTrimmableChar):
        New. Checks whether character is whitespace that can be ignored
        according to the text node's style.
        trimmed from the end of wrapped line.
        (WebCore::checkMidpoints):
        Call isTrimmable() rather than checking for char != SOFT_HYPHEN.

2006-10-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Mitz Pettel.

        Convert the SVG code to use Vector<String> instead of DeprecatedStringList.

        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::setRGBColor):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::parseMappedAttribute):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (SVGFESpecularLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseMappedAttribute):
        * ksvg2/svg/SVGLengthList.cpp:
        * ksvg2/svg/SVGNumberList.cpp:
        (SVGNumberList::parse):
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        * ksvg2/svg/SVGStringList.cpp:
        (WebCore::SVGStringList::reset):
        * ksvg2/svg/SVGStringList.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (SVGTransformable::parseTransformAttribute):

2006-10-01  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric, tweaked and landed by ap.

        Fix Qt/Linux build.

        * CMakeLists.txt:
        * platform/qt/PlatformScrollBar.h:
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::ScrollBar::ScrollBar):
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (FrameView::passMousePressEventToSubframe):
        (FrameView::passMouseMoveEventToSubframe):
        (FrameView::passMouseReleaseEventToSubframe):
        (FrameView::passWheelEventToSubframe):
        (FrameView::passMousePressEventToScrollbar):
        * ksvg2/svg/SVGDocument.h:

2006-10-01  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=10190
        REGRESSION: Repro crash when navigating away from an image document that hasn't finished loading

        No test case added (probably requires new DumpRenderTree functionality)

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged): Added early return if the document is
        being destroyed.

2006-10-01  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=10842
        REGRESSION (r15418): contenteditable div truncates rightmost Japanese character
        
        Make sure we only break after a space (and not any other valid line-break) if
        the style is -webkit-line-break: after-white-space (e.g. for a contentEditable div).
        I also did a logic shuffle at Mitz's request to prevent doing an if on the same expression
        twice in quick succession.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): 

2006-10-01  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej and Darin.

        http://bugs.webkit.org/show_bug.cgi?id=4372
        JavaScript document.write page form does not submit in Safari

        Test: fast/forms/document-write.html

        * page/Frame.cpp:
        (WebCore::Frame::submitForm): Don't check for parsing().

2006-10-01  Alexey Proskuryakov  <ap@nypop.com>

        Build fix.

        * bridge/mac/FrameViewMac.mm: Add missing #imports.

2006-10-01  Dave Hyatt  <hyatt@apple.com>

        Refactor the code that passes mouse presses to the Mac scrollbar and make it cross-platform.
       
        Reviewed by mitz

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::passWidgetMouseDownEventToWidget):
        * bridge/mac/FrameViewMac.mm:
        (WebCore::FrameView::passMousePressEventToScrollbar):
        * page/FrameView.cpp:
        (WebCore::FrameView::handleMousePressEvent):
        (WebCore::FrameView::setMousePressed):
        * page/FrameView.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameView::passMousePressEventToScrollbar):

2006-09-30  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11102
        Add more SVG Objective-C DOM bindings

        - Auto-generate Objective-C DOM bindings for DOMSVGAElement,
          DOMSVGAnimateColorElement, DOMSVGAnimateElement, DOMSVGAnimateTransformElement,
          DOMSVGAnimatedPathData, DOMSVGAnimatedPoints, DOMSVGAnimatedPreserveAspectRatio,
          DOMSVGAnimationElement, DOMSVGCircleElement, DOMSVGClipPathElement, DOMSVGColor,
          DOMSVGCursorElement, DOMSVGDefsElement, DOMSVGDescElement, DOMSVGDocument, 
          DOMSVGEllipseElement, DOMSVGPreserveAspectRatio, and DOMSVGURIReference.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVG.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * ksvg2/svg/SVGAElement.idl:
        * ksvg2/svg/SVGAnimateColorElement.idl:
        * ksvg2/svg/SVGAnimateElement.idl:
        * ksvg2/svg/SVGAnimateTransformElement.idl:
        * ksvg2/svg/SVGAnimatedPathData.idl:
        * ksvg2/svg/SVGAnimatedPoints.idl:
        * ksvg2/svg/SVGAnimatedPreserveAspectRatio.idl:
        * ksvg2/svg/SVGAnimationElement.idl:
        * ksvg2/svg/SVGCircleElement.idl:
        * ksvg2/svg/SVGClipPathElement.idl:
        * ksvg2/svg/SVGColor.idl:
        * ksvg2/svg/SVGCursorElement.idl:
        * ksvg2/svg/SVGDefsElement.idl:
        * ksvg2/svg/SVGDescElement.idl:
        * ksvg2/svg/SVGDocument.idl:
        * ksvg2/svg/SVGEllipseElement.idl:
        * ksvg2/svg/SVGPointList.idl:
        * ksvg2/svg/SVGPreserveAspectRatio.idl:
        * ksvg2/svg/SVGRect.idl:
        * ksvg2/svg/SVGSVGElement.idl:

2006-09-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        - fix build

        * platform/FloatRect.h:
        (WebCore::FloatRect::contains): Added; not exactly the same semantic as IntRect containment
        but more appropriate for path-type stuff.
        * platform/cg/PathCG.cpp:
        (WebCore::Path::contains): Don't use enclosingIntRect, just use FloatRect::contains.

2006-09-30  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11011
        External CSS is parsed as iso-8859-1 even though the main document is utf-8

        Test: fast/encoding/css-charset-default.xhtml

        * loader/CachedResourceClient.h:
        (WebCore::CachedResourceClient::setCSSStyleSheet):
        (WebCore::CachedResourceClient::setXSLStyleSheet):
        Divided setStyleSheet into setCSSStyleSheet and setXSLStyleSheet. The former
        takes an additional charset parameter, to be passed to CSSStyleSheet constructor.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet):
        (WebCore::CSSImportRule::insertedIntoParent): Default to parent stylesheet's charset.
        * css/CSSImportRule.h:

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:
        Added an m_charset member to be used when loading child stylesheets. Removed an unused m_implicit
        member. Changed some String parameters to const String&.

        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        * css/StyleSheet.h:
        Changed some String parameters to const String&. Removed an unused (even unimplemented) constructor.

        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::length):
        (WebCore::StyleSheetList::item):
        * css/StyleSheetList.h:
        Special-casing implicit stylesheets seemed to be dead code, removed.

        * dom/Document.cpp:
        (WebCore::Document::setCSSStyleSheet):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        Renamed setStyleSheet() to setCSSStyleSheet().

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet): Pass a correct charset to requestCSSStyleSheet().
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        (WebCore::ProcessingInstruction::setXSLStyleSheet):
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * dom/ProcessingInstruction.h:

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process): Default to document encoding if a charset attribute 
        is not specified.
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLLinkElement.h:

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::childrenChanged):
        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::childrenChanged):
        Inherit URL and charset from the document.

        * loader/Cache.cpp:
        (WebCore::Cache::requestCSSStyleSheet):
        * loader/Cache.h:
        Adjust for setStyleSheet() renaming.

        * loader/CachedCSSStyleSheet.h: Removed an unused constructor.
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::ref):
        (WebCore::CachedCSSStyleSheet::deref):
        (WebCore::CachedCSSStyleSheet::checkNotify):
        Pass the encoding to setCSSStyleSheet().

        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::ref):
        (WebCore::CachedXSLStyleSheet::checkNotify):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestCSSStyleSheet):
        * loader/DocLoader.h:
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::UserStyleSheetLoader):
        (WebCore::UserStyleSheetLoader::setCSSStyleSheet):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::setXSLStyleSheet):
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLImportRule.h:
        Adjust for setStyleSheet() renaming.

2006-09-30  Rob Buis  <buis@kde.org>

        Reviewed by eseidel.

        http://bugs.webkit.org/show_bug.cgi?id=11096
        Hit testing for polylines fails

        Fix Path::contains so it handles filled, non-closed paths too.

        * platform/cg/PathCG.cpp:
        (WebCore::Path::contains):

2006-09-30  Dave Hyatt  <hyatt@apple.com>

        Refactor subframe event handling to hide more of the Mac-specific logic from the cross-platform code.
        Stub out a capturing API that mimics the way Web browsers capture events and route them to specific
        subframes while the mouse is down.
      
        Reviewed by mitzpettel

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::passWidgetMouseDownEventToWidget):
        (WebCore::FrameMac::passWheelEventToWidget):
        * bridge/mac/FrameViewMac.mm:
        (WebCore::FrameView::passMousePressEventToSubframe):
        (WebCore::FrameView::passMouseMoveEventToSubframe):
        (WebCore::FrameView::passMouseReleaseEventToSubframe):
        (WebCore::FrameView::passWheelEventToSubframe):
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::subframeForTargetNode):
        (WebCore::FrameView::handleMousePressEvent):
        (WebCore::FrameView::handleMouseDoubleClickEvent):
        (WebCore::FrameView::handleMouseMoveEvent):
        (WebCore::FrameView::handleMouseReleaseEvent):
        (WebCore::FrameView::handleWheelEvent):
        * page/FrameView.h:
        * platform/ScrollBar.h:
        (WebCore::ScrollBar::handleMouseMoveEvent):
        (WebCore::ScrollBar::handleMouseOutEvent):
        * platform/Widget.h:
        (WebCore::Widget::handleMouseMoveEvent):
        (WebCore::Widget::handleMouseReleaseEvent):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameView::passMousePressEventToSubframe):
        (FrameView::passMouseMoveEventToSubframe):
        (FrameView::passMouseReleaseEventToSubframe):
        (FrameView::passWheelEventToSubframe):
        (Widget::capturingMouse):
        (Widget::setCapturingMouse):
        (Widget::capturingTarget):
        (Widget::capturingChild):
        (Widget::setCapturingChild):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2006-09-29  Darin Fisher  <darin@chromium.org>

        Reviewed by Adele.

        Fixes windows bustage:
        http://bugs.webkit.org/show_bug.cgi?id=11093

        * platform/win/PlatformScrollBar.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (PlatformScrollBar::PlatformScrollBar):
        (ScrollBar::ScrollBar):

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

        Eliminate RenderLayer::gScrollBar in favor of caching the scrollbar hit
        in RenderObject::NodeInfo (and then propagating that Widget to
        MouseEventWithHitTestResults).

        This allows RenderListBox and RenderBlock to do the same thing when the
        mouse is over the scrollbar.

        Also land fix to support font-size: 0.

        Reviewed by mjs (scrollbar), eric (font-size)

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        * page/Frame.cpp:
        (WebCore::Frame::passWidgetMouseDownEventToWidget):
        * page/FrameView.cpp:
        (WebCore::selectCursor):
        (WebCore::FrameView::handleMouseMoveEvent):
        (WebCore::FrameView::dispatchMouseEvent):
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::MouseEventWithHitTestResults):
        * page/MouseEventWithHitTestResults.h:
        (WebCore::MouseEventWithHitTestResults::scrollbar):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInScrollbar):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::getHiddenBehavior):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):
        (WebCore::RenderListBox::isPointInScrollbar):
        * rendering/RenderListBox.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::NodeInfo::NodeInfo):
        (WebCore::RenderObject::NodeInfo::scrollbar):
        (WebCore::RenderObject::NodeInfo::setScrollbar):

2006-09-29  Darin Fisher  <darin@chromium.org>

        Reviewed by Adele.

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

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::convertToContainingWindow):
        (WebCore::ScrollView::convertFromContainingWindow):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):

2006-09-29  Adele Peterson  <adele@apple.com>

        Updated with new argument for PlatformScrollBar.

        * platform/win/TemporaryLinkStubs.cpp:
        (PlatformScrollBar::PlatformScrollBar):

2006-09-29  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fixing build bustage with cast to int.

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::lastSelectedListIndex):

2006-09-29  Adele Peterson  <adele@apple.com>

        Fixing accidental include.

        * rendering/RenderListBox.cpp:

2006-09-29  Adele Peterson  <adele@apple.com>

        Adding RenderListBox files.

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-09-29  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Initial implementation of engine-based list box control.

        * WebCore.xcodeproj/project.pbxproj: Added RenderListBox.h and RenderListBox.cpp

        * bridge/mac/FrameMac.h: Added _mouseDownMayStartAutoscroll.
        * bridge/mac/FrameMac.mm: Updated autoscroll code to use renderers instead of layers, so any renderer that implements autoscroll will work.
        (WebCore::FrameMac::FrameMac):
        (WebCore::FrameMac::handleMousePressEvent):
        (WebCore::FrameMac::handleMouseMoveEvent):
        (WebCore::FrameMac::mouseDown):

        * page/Frame.cpp:
        (WebCore::Frame::handleMouseMoveEvent):
        (WebCore::Frame::scrollOverflow): Don't scroll list box here- this would cause arrow keys to scroll instead of select.
        (WebCore::Frame::handleAutoscroll): Updated to use a renderer instead of a layer when setting up autoscroll.
        (WebCore::Frame::autoscrollTimerFired): ditto.
        (WebCore::Frame::stopAutoscrollTimer): ditto.
        (WebCore::Frame::passWidgetMouseDownEventToWidget): Updated to check for list box's scroll bar.
        * page/Frame.h:
        * page/FramePrivate.h: (WebCore::FramePrivate::FramePrivate): Updated to use renderer unstead of layer for autoscroll.

        * page/FrameView.cpp: Keep track of current mouse position so this can be used for list box autoscroll.
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::currentMousePosition):
        (WebCore::FrameView::handleMousePressEvent):
        (WebCore::FrameView::handleMouseDoubleClickEvent):
        (WebCore::selectCursor):
        (WebCore::FrameView::handleMouseMoveEvent):
        (WebCore::FrameView::handleMouseReleaseEvent):
        * page/FrameView.h:

        * platform/ScrollBar.cpp: (WebCore::ScrollBar::ScrollBar): Added controlSize argument.  The list box will use a smaller scroll bar size.
        * platform/ScrollBar.h:
        (WebCore::):
        (WebCore::ScrollBar::controlSize):
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBarMac.mm:
        (NSControlSizeForScrollBarControlSize):
        (-[WebCoreScrollBar initWithPlatformScrollBar:]):
        (WebCore::PlatformScrollBar::PlatformScrollBar):

        * rendering/RenderBlock.h:
        * rendering/RenderLayer.cpp: (WebCore::RenderLayer::createScrollbar): Updated to pass regular control size to scrollbar constructor.
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldAutoscroll):
        (WebCore::RenderObject::autoscroll):
        * rendering/RenderObject.h: (WebCore::RenderObject::isListBox):

        * css/html4.css: Added properties for new list boxes.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setSelected): Doesn't allow selection to be changed here if the option is disabled.
        (WebCore::HTMLOptionElement::disabled): Added. Checks the parent's disabled status.
        * html/HTMLOptionElement.h: Added disabled method.

        * html/HTMLSelectElement.cpp: Added appearance switch for new list box implementation.
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::lastSelectedListIndex):
        (WebCore::HTMLSelectElement::deselectItems):
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::isKeyboardFocusable):
        (WebCore::HTMLSelectElement::isMouseFocusable):
        (WebCore::HTMLSelectElement::createRenderer):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::notifyOptionSelected):
        (WebCore::HTMLSelectElement::defaultEventHandler): Added code to select options for list box when clicking and using arrow keys.
        (WebCore::HTMLSelectElement::nextSelectableListIndex):
        (WebCore::HTMLSelectElement::previousSelectableListIndex):
        * html/HTMLSelectElement.h:

        * rendering/RenderTheme.cpp: Added support for ListBoxAppearance
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::activeListBoxSelectionForegroundColor):
        (WebCore::RenderTheme::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::inactiveListBoxSelectionForegroundColor):
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::supportsFocusRing):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::isControlStyled):

        * rendering/RenderListBox.cpp: Added.
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):
        (WebCore::RenderListBox::setStyle):
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::calcMinMaxWidth):
        (WebCore::RenderListBox::size):
        (WebCore::RenderListBox::numItems):
        (WebCore::RenderListBox::calcHeight):
        (WebCore::RenderListBox::baselinePosition):
        (WebCore::RenderListBox::itemBoundingBoxRect):
        (WebCore::RenderListBox::paintObject):
        (WebCore::RenderListBox::paintScrollbar):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        (WebCore::RenderListBox::scrollBarTarget):
        (WebCore::RenderListBox::isPointInScrollbar):
        (WebCore::RenderListBox::optionAtPoint):
        (WebCore::RenderListBox::autoscroll):
        (WebCore::RenderListBox::scrollToRevealElementAtListIndex):
        (WebCore::RenderListBox::scroll):
        (WebCore::RenderListBox::valueChanged):
        * rendering/RenderListBox.h: Added.
        (WebCore::RenderListBox::isListBox):
        (WebCore::RenderListBox::selectionChanged):
        (WebCore::RenderListBox::setSelectionChanged):
        (WebCore::RenderListBox::canHaveChildren):
        (WebCore::RenderListBox::renderName):
        (WebCore::RenderListBox::setOptionsChanged):
        (WebCore::RenderListBox::shouldAutoscroll):
        (WebCore::RenderListBox::listIndexIsVisible):

2006-09-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        We had a bug where html4.css was ignoring Media Queries. In the end 
        the problem was that we were trying to send a char* to the 
        MediaQueryEvaluator constructor that expects a String, but the 
        char* got interpreted as a bool, the wrong constructor was called, 
        and the media type was never set.

        No test case possible since this only affects html4.css

        * css/MediaQueryEvaluator.cpp: New constructor that expects takes a 
        char*
        (WebCore::MediaQueryEvaluator):
        * css/MediaQueryEvaluator.h: Same.

2006-09-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John, Maciej.
        
        Integrated some frame and iframe code. I'm trying to fix up frame ownership
        and loading. Reducing the number of different code paths involved
        seemed like a good first step.
        
        As a side effect, I fixed a bug where FRAME elements would report their
        src attributes as relative, rather than compelete, URLs. (IFRAME elements
        had the correct complete URL behavior.)

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::isURLAllowed): Fixed comment typo
        (WebCore::HTMLFrameElement::openURL):
            (1) Removed checks that requestFrame does for us
            (2) Added isURLAllowed check, to have one clear bottleneck for it
            (3) Added viewsource check, to have one clear bottleneck for it
        (WebCore::HTMLFrameElement::close): Changed to use the common contentFrame()
        method, instead of finding our content frame in our own unique way.
        (WebCore::HTMLFrameElement::setLocation): Removed isURLAllowed check,
        since openURL does this for us now.
        (WebCore::HTMLFrameElement::src): Return complete URL instead of relative.
        This is what FF does, and it made no sense to have different behaviors
        for FRAME and IFRAME elements.
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement): Removed duplicate init
        code.
        * html/HTMLIFrameElement.h: Removed src() and openURL() methods, since
        HTMLFrameElement now does everything we need.

2006-09-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Hyatt.

        Fix Qt/Linux build.

        * CMakeLists.txt:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::convertToContainingWindow):
        (WebCore::ScrollView::convertFromContainingWindow):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):

2006-09-29  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11082
        Simplify Internal methods for the auto-generated Objective-C DOM code

        - Auto-generate the internal methods for more Objective-C classes.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMCSS.mm:
        (-[DOMStyleSheet WebCore::]):
        (+[DOMStyleSheet _styleSheetWith:WebCore::]):
        (-[DOMCSSRule WebCore::]):
        (-[DOMCSSRule _initWithCSSRule:WebCore::]):
        (+[DOMCSSRule _CSSRuleWith:WebCore::]):
        (-[DOMCSSValue WebCore::]):
        (-[DOMCSSValue _initWithCSSValue:WebCore::]):
        (+[DOMCSSValue _CSSValueWith:WebCore::]):
        * bindings/objc/DOMHTMLAppletElement.mm:
        (-[DOMHTMLAppletElement WebCore::]):
        (+[DOMHTMLAppletElement _HTMLOptionElementWith:WebCore::]):
        * bindings/objc/DOMHTMLEmbedElement.mm:
        (-[DOMHTMLEmbedElement WebCore::]):
        (+[DOMHTMLEmbedElement _HTMLEmbedElementWith:WebCore::]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSCharsetRule.idl:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSStyleRule.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSUnknownRule.idl:
        * css/CSSValueList.idl:
        * dom/KeyboardEvent.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/NodeIterator.idl:
        * dom/OverflowEvent.idl:
        * dom/UIEvent.idl:
        * dom/WheelEvent.idl:

2006-09-29  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4663772> REGRESSION: Cannot type in Japanese after replying to a particular message
        <rdar://problem/4673293> REGRESSION: Can't enter the Japanese characters in Mail or Blot

        Test added
        * fast/text/attributed-substring-from-range-001.html

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::attributedString):
        Handle non-zero offsets when start and/or end node is a container. Offset used to be ignored in this case.
        Also, add validation of the range.

2006-09-29  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10893
        InsertRule can not handle @import statements

        Allow @import as part of a css rule.

        * css/CSSGrammar.y:

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

        Switch over the Mac-specific uses of viewportToContents/contentsToViewport.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::eventMayStartDrag):
        (WebCore::FrameMac::dragHysteresisExceeded):
        (WebCore::FrameMac::mouseDown):
        (WebCore::FrameMac::shouldDragAutoNode):
        (WebCore::FrameMac::sendContextMenuEvent):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge _visiblePositionForPoint:]):

2006-09-28  Dave Hyatt  <hyatt@apple.com>

        This patch eliminates viewportToContents/contentsToViewport in favor of convertTo/FromContainingWindow.
        ScrollView now subclasses these methods to factor in its scrollOffset and to deal with the document
        view.
       
        Reviewed by mjs (the convertTo/From changes), (I added the elimination of viewportToContents to
        the patch after review, once I realized that these new functions essentially do the same thing.)

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        (WebCore::EventTargetNode::dispatchWheelEvent):
        * page/Frame.cpp:
        (WebCore::Frame::selectClosestWordFromMouseEvent):
        (WebCore::Frame::handleMousePressEventTripleClick):
        (WebCore::Frame::handleMousePressEventSingleClick):
        (WebCore::Frame::handleMouseMoveEvent):
        (WebCore::Frame::handleMouseReleaseEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::handleMousePressEvent):
        (WebCore::selectCursor):
        (WebCore::FrameView::dispatchDragEvent):
        (WebCore::FrameView::prepareMouseEvent):
        (WebCore::FrameView::handleWheelEvent):
        * platform/ScrollView.h:
        * platform/Widget.cpp:
        (WebCore::Widget::convertToContainingWindow):
        * platform/Widget.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::convertToContainingWindow):
        (WebCore::ScrollView::convertFromContainingWindow):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::convertToContainingWindow):
        (WebCore::ScrollView::convertFromContainingWindow):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):

2006-09-28  Alice Liu  <alice.liu@apple.com>

        Build fix by adding missing files for CommandByName

        * WebCore.xcodeproj/project.pbxproj:

2006-09-28  Alice Liu  <alice.liu@apple.com>

        Adding CommandByName files to the vcproj

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-09-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben.

        This patch adds a command class that is attached to the frame so the frame can more easily execute commands such as copy, paste, select, etc. 
        This patch also exposes some UBRK-related utilities so that they can be used elsewhere.
        This patch also changes windows PlatformMouseEvent so that we can detect multiple-click mouse events

        * editing/CommandByName.cpp: Added.
        Added a command class that hangs off the frame so the frame can call commands more easily.  
        (WebCore::Frame::commandImp):
        (WebCore::Frame::execCopy):
        (WebCore::Frame::execCut):
        (WebCore::Frame::execDelete):
        (WebCore::Frame::execForwardDelete):
        (WebCore::Frame::execPaste):
        (WebCore::Frame::execMoveLeft):
        (WebCore::Frame::execMoveRight):
        (WebCore::Frame::execMoveUp):
        (WebCore::Frame::execMoveDown):
        (WebCore::Frame::execSelectAll):
        (WebCore::Frame::execSelectLeft):
        (WebCore::Frame::execSelectRight):
        (WebCore::Frame::execSelectUp):
        (WebCore::Frame::execSelectDown):
        (WebCore::Frame::enabled):
        (WebCore::Frame::enabledAnySelection):
        (WebCore::Frame::enabledAnyEditableSelection):
        (WebCore::Frame::enabledPaste):
        (WebCore::Frame::enabledAnyRangeSelection):
        (WebCore::Frame::enabledAnyEditableRangeSelection):
        (WebCore::Frame::createCommandDictionary):
        (WebCore::Frame::Command::):
        (WebCore:::m_frame):
        (WebCore::CommandByName::execCommand):
        * editing/CommandByName.h: Added.
        * page/Frame.cpp:
        Added implementation of accessor for CommandByName member
        (WebCore::Frame::command):
        * page/Frame.h:
        Added accessor for CommandByName member
        * page/FramePrivate.h:
        Added a CommandByName member
        (WebCore::FramePrivate::FramePrivate):
        * platform/PlatformMouseEvent.h:
        Changed constructor prototype
        * platform/StringImpl.cpp:
        Exposing getWordBreakIterator to be used elsewhere
        (WebCore::getWordBreakIterator):
        * platform/StringImpl.h:
        Exposing getWordBreakIterator to be used elsewhere
        * platform/win/MouseEventWin.cpp:
        Changed the PlatformMouseEvent on windows so that we "roll our own" multi-click mouse events instead of relying on the system to tell us, enabling us to detect triple-clicks
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2006-09-28  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Remove no-longer-used PopUpButton.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Remove PopUpButton.h
        * WebCore.xcodeproj/project.pbxproj: Remove PopUpButton.h,
        PopUpButtonMac.mm
        * platform/PopUpButton.h: Removed.
        * platform/mac/PopUpButtonMac.mm: Removed.
        * platform/win/TemporaryLinkStubs.cpp: Remove PopUpButton:: methods
        * rendering/DeprecatedRenderSelect.cpp: Change #include of
        PopUpButton.h to ListBox.h

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

        Reviewed by Alice.

        - change that should fix <rdar://problem/4733044> REGRESSION: XML iBench shows
          10% perf. regression (copying strings while decoding)

        Use Vector<UChar> instead of String when building up the decoded string in
        the ICU and Mac decoders. Using String leads to O(n^2) behavior because
        String grows the buffer every single time that append is called. Using
        Vector::append instead of String::append also avoids constructing a string
        each time just to append and a questionable copy that is done inside the
        String::append function which also contributed to the slowness.

        * platform/PlatformString.h:
        * platform/String.cpp: (WebCore::String::adopt): Added. Makes a String from a
        Vector<UChar>, adopting the buffer from the vector to avoid copying and memory
        allocation.
        * platform/StringImpl.h:
        * platform/StringImpl.cpp: (WebCore::StringImpl::adopt): Ditto.

        * platform/StreamingTextDecoder.h:
        * platform/StreamingTextDecoder.cpp: (WebCore::TextCodec::appendOmittingBOM):
        Change to use a Vector<UChar> instead of a String, since vectors have better
        resizing performance (they store a separate capacity).

        * platform/StreamingTextDecoderICU.cpp: (WebCore::TextCodecICU::decode):
        * platform/mac/StreamingTextDecoderMac.cpp: (WebCore::TextCodecMac::decode):
        Change to use Vector<UChar> instead of String and then create a string at
        the end of the process using the new adopt function.

2006-09-28  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11057
        Auto-generate more SVG Objective-C bindings

        - Auto-generates DOMSVGAnimatedAngle, DOMSVGAnimatedBoolean, 
          DOMSVGAnimatedEnumeration, DOMSVGAnimatedInteger, DOMSVGAnimatedLength,
          DOMSVGAnimatedLengthList, DOMSVGAnimatedNumber, DOMSVGAnimatedString,
          DOMSVGAnimatedTransformList, DOMSVGExternalResourcesRequired,
          DOMSVGLangSpace, DOMSVGLocatable, DOMSVGMetadataElement, DOMSVGRectElement,
          DOMSVGStringList, DOMSVGStylable, DOMSVGStyleElement, DOMSVGTests, 
          and DOMSVGTransformable.

        - Adds ability to CodeGeneratorObjC.pm to handle interfaces with mulitple
          parent interfaces and the SVG animated classes.

        - Corrects CodeGenerator.pm to only skip the first parent for the main 
          interface.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVG.h:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * ksvg2/svg/SVGAnimatedAngle.idl:
        * ksvg2/svg/SVGAnimatedBoolean.idl:
        * ksvg2/svg/SVGAnimatedEnumeration.idl:
        * ksvg2/svg/SVGAnimatedInteger.idl:
        * ksvg2/svg/SVGAnimatedLength.idl:
        * ksvg2/svg/SVGAnimatedLengthList.idl:
        * ksvg2/svg/SVGAnimatedNumber.idl:
        * ksvg2/svg/SVGAnimatedPathData.idl:
        * ksvg2/svg/SVGAnimatedString.idl:
        * ksvg2/svg/SVGAnimatedTransformList.idl:
        * ksvg2/svg/SVGExternalResourcesRequired.idl:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.idl:
        * ksvg2/svg/SVGFitToViewBox.idl:
        * ksvg2/svg/SVGLangSpace.idl:
        * ksvg2/svg/SVGLocatable.idl:
        * ksvg2/svg/SVGMetadataElement.idl:
        * ksvg2/svg/SVGStringList.idl:
        * ksvg2/svg/SVGStylable.idl:
        * ksvg2/svg/SVGStyleElement.idl:
        * ksvg2/svg/SVGTests.idl:
        * ksvg2/svg/SVGTransformable.idl:
        * ksvg2/svg/SVGURIReference.idl:
        * ksvg2/svg/SVGUnitTypes.idl:
        * ksvg2/svg/SVGZoomAndPan.idl:

2006-09-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel!!!

        Change the error code check for common functions from SQLResultOk to SQLResultDone 

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::forgetPageURLQuery):
        (WebCore::IconDatabase::setIconIDForPageURLQuery):
        (WebCore::IconDatabase::addIconForIconURLQuery):

2006-09-28  Dave Hyatt  <hyatt@apple.com>

        Just eliminate MapWindowPoints usage and use the HWND as
        the viewport.

        * platform/win/MouseEventWin.cpp:
        (WebCore::positionForEvent):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):

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

        Fix for bug 9222, cursor is wrong when mousing over overflow scrollbars in textareas.  Make sure
        selectCursor checks for whether or not a scrollbar was hit.  Also stub out a mouseMoved method for
        scrollbars to provide hover feedback if needed.

        Reviewed by Eric

        * page/FrameView.cpp:
        (WebCore::selectCursor):
        (WebCore::FrameView::handleMouseMoveEvent):
        * platform/ScrollBar.h:
        (WebCore::ScrollBar::mouseMoved):

2006-09-27  Darin Fisher  <darin@chromium.org>

        Reviewed by Maciej and Adam, landed by Adam

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11072
        Windows build is busted

        * platform/win/TemporaryLinkStubs.cpp:
        (ScrollView::paint):
        (ScrollView::themeChanged):

2006-09-27  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        paths with no fill specified default to black but do not receive paint-related mouse events
        http://bugs.webkit.org/show_bug.cgi?id=11069
        The default fill was being applied at the wrong place in the rendering chain, causing this problem.

        Test: svg/custom/hover-default-fill.svg

        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint): use isFilled and isStroked
        * ksvg2/css/SVGRenderStyle.h: use defaultFill() and defaultStroke()
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::isFilled): remove null check
        (WebCore::KSVGPainterFactory::fillPaintServer): remove null check
        (WebCore::KSVGPainterFactory::isStroked): remove null check
        (WebCore::KSVGPainterFactory::strokePaintServer): remove null check
        * ksvg2/svg/SVGPaint.cpp:
        (WebCore::SVGPaint::defaultFill): added.
        (WebCore::SVGPaint::defaultStroke): added.
        * ksvg2/svg/SVGPaint.h:

2006-09-27  Rob Buis  <buis@kde.org>

        Reviewed by eseidel.

        http://bugs.webkit.org/show_bug.cgi?id=11015
        SVG handles em units incorrectly

        Calculate viewport coordinates at layout time, since
        at this point the font size is known and lengths depending
        on font sizes can be calculated correctly.

        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::viewport):
        (WebCore::RenderSVGContainer::calcViewport):
        * kcanvas/RenderSVGContainer.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::updateValue):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::createRenderer):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createRenderer):
        (WebCore::SVGSVGElement::attributeChanged):
        * ksvg2/svg/SVGSVGElement.h:

2006-09-27  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Change our invalid-fill error behavior to match Opera (and soon Firefox)
        http://bugs.webkit.org/show_bug.cgi?id=11017

        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::isFilled):
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::isStroked):
        (WebCore::KSVGPainterFactory::strokePaintServer):

2006-09-27  Brady Eidson  <beidson@apple.com>

        Build fix

        * loader/icon/IconDatabase.cpp:
        (WebCore::readySQLStatement):

2006-09-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        In very specific circumstances, prepared SQLStatements can become invalid without
        any warning.  This checks for that state and re-prepares the statement and also
        adds more aggressive error-checking everywhere these statements are used.

        * loader/icon/IconDatabase.cpp:
        (WebCore::readySQLStatement): Check if the statement is expired - reprepare it
        (WebCore::IconDatabase::imageDataForIconURLQuery): More thoroughly catch error cases
        (WebCore::IconDatabase::timeStampForIconURLQuery): Ditto
        (WebCore::IconDatabase::iconURLForPageURLQuery): Ditto
        (WebCore::IconDatabase::forgetPageURLQuery): Ditto
        (WebCore::IconDatabase::setIconIDForPageURLQuery): Ditto
        (WebCore::IconDatabase::getIconIDForIconURLQuery): Ditto
        (WebCore::IconDatabase::addIconForIconURLQuery): Ditto
        (WebCore::IconDatabase::hasIconForIconURLQuery): Ditto
        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::isExpired): Added (accessor to sqlite3_expired())
        * loader/icon/SQLStatement.h:

2006-09-26  Darin Adler  <darin@apple.com>

        Reviewed by Steve.

        - clean up options for font code path

        * platform/Font.h:
        * platform/Font.cpp:
        (WebCore::Font::setCodePath): Added. Replaces boolean version.
        (WebCore::Font::canUseGlyphCache): Update to handle "never use complex" case too.

        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreSetAlwaysUseATSU): Change to call setCodePath.

2006-09-26  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge markAllMatchesForText:caseSensitive:limit:]):
        Added limit parameter, passed down to Frame
        
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::markAllMatchesForText):
        Added limit parameter. Stop the search if it hits limit.

2006-09-26  Sean Gies  <seangies@apple.com>

        Reviewed by Brady Eidson.

        * platform/cg/ImageCG.cpp: Removed #if's -- Darin said we don't need these.

2006-09-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4747695> 
        Gmail Editor: Crash at WebCore::Range::startPosition() when decreasing a indent
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd): Stop expanding
        to select special elements that are fully selected after expansion
        moves to positions that are visually distinct from the originals.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): If the content of the list 
        item will be moved into another list, put it in a list item.

2006-09-26  Geoffrey Garen <ggaren@apple.com>

        Reviewed by Darin.
        
        Temporary work-around for frame lifetime issue.

        * page/Frame.cpp:
        (WebCore::Frame::clear):
        (WebCore::Frame::disconnectOwnerElement):

2006-09-26  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11038
        Auto-generate DOMSVGElement for the Objective-C bindings

        - Auto-generates DOMSVGElement.

        - Make SVGExceptions work like all the other ExceptionCode
          extensions (Range, XPath, etc.) by adding SVGExceptionOffset
          and SVGExceptionMax.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_binding.cpp:
        (KJS::):
        (KJS::setDOMException):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        (raiseDOMException):
        * bindings/objc/DOMSVG.h:
        * bindings/objc/DOMSVGExecption.h: Added.
        * ksvg2/ksvg.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::setId):
        (WebCore::SVGElement::setXmlbase):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElement.idl:
        * ksvg2/svg/SVGException.h: Added.
        (WebCore::):

2006-09-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim H.
        
        viewbox parser does not allow <tab> as a delimiter
        http://bugs.webkit.org/show_bug.cgi?id=11014

        Test: svg/hixie/viewbox/003.xml

        * ksvg2/svg/svgpathparser.cpp:
        (WebCore::isWhitespace): new function
        (WebCore::skipOptionalSpaces):
        (WebCore::skipOptionalSpacesOrComma):

2006-09-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim H.

        SVGDocument::createElement does not create elements in the SVG namespace
        http://bugs.webkit.org/show_bug.cgi?id=10932
        
        Test: svg/custom/createelement.svg

        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::createElement):
        * ksvg2/svg/SVGDocument.h:

2006-09-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim H.
        
        RenderPath::nodeAtPoint does not respect stroke width
        http://bugs.webkit.org/show_bug.cgi?id=10829

        Test: svg/custom/stroke-width-click.svg

        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (WebCore::RenderPath::strokeContains):
        * kcanvas/device/quartz/QuartzSupport.h:
        * kcanvas/device/quartz/QuartzSupport.mm:

2006-09-26  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Bring animation back to life
        http://bugs.webkit.org/show_bug.cgi?id=11021
        
        Register/unregister SVGSVGElements as time containers on insertion/removal.
        Replace uses of DeprecatedString with String in SVGAnimationElement
        Various whitespace clean-up.

        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::parseClockValue):
        (WebCore::SVGAnimationElement::targetAttribute):
        (WebCore::SVGAnimationElement::setTargetAttribute):
        (WebCore::SVGAnimationElement::attributeName):
        * ksvg2/svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::rendererIsNeeded):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getScreenCTM):
        (WebCore::SVGSVGElement::createRenderer):
        (WebCore::SVGSVGElement::insertedIntoDocument): added, calls addTimeContainer(this)
        (WebCore::SVGSVGElement::removedFromDocument): added, calls removeTimeContainer(this)
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::handleTimerEvent):
        * ksvg2/svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::getTarget):
        * ksvg2/svg/SVGURIReference.h:

2006-09-26  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by mitzpettel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11020
        No-SVG build broken since r16549
        
        Change #if SVG_SUPPORT to #ifdef SVG_SUPPORT

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/FrameView.cpp:
        (WebCore::selectCursor):
        * platform/qt/GraphicsContextQt.cpp:

2006-09-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10820
        Add StringImpl::toDouble() and remove uses of .deprecatedString().toDouble()
        
        (Originally written by Eric Seidel).
        
        * bindings/js/kjs_window.cpp:
        (KJS::floatFeature):
        * ksvg2/svg/SVGAngle.cpp:
        (SVGAngle::setValueAsString):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (SVGAnimationElement::parseMappedAttribute):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (SVGComponentTransferFunctionElement::parseMappedAttribute):
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (SVGFEDisplacementMapElement::parseMappedAttribute):
        * ksvg2/svg/SVGFELightElement.cpp:
        (SVGFELightElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::parseMappedAttribute):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (SVGFESpecularLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseMappedAttribute):
        * ksvg2/svg/SVGStopElement.cpp:
        (SVGStopElement::parseMappedAttribute):
        * platform/AtomicString.h:
        (WebCore::AtomicString::toDouble):
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::toDouble):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toDouble):
        * platform/StringImpl.h:
        * rendering/DeprecatedSlider.cpp:
        (WebCore::DeprecatedSlider::updateFromElement):
        * xml/XPathGrammar.y:

2006-09-25  David Harrison  <harrison@apple.com>

        Reviewed by Tim Omernick and Tim Hatcher.

        <rdar://problem/4717965> Text Field text parameterized attributes should work
        <rdar://problem/4712111> Support NSAccessibilityInsertionPointLineNumberAttribute for AXTextArea elements

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Use new line number support to implement NSAccessibilityInsertionPointLineNumberAttribute.
        
        (-[WebCoreAXObject accessibilityParameterizedAttributeNames]):
        Cleaned up. Added text field and text area parameterzed attributes.
        
        (-[WebCoreAXObject doAXLineForTextMarker:]):
        Fixed to be zero-based and to deal with the first position properly.
        
        (-[WebCoreAXObject doAXTextMarkerRangeForLine:]):
        Minor formatting.
        
        (-[WebCoreAXObject textMarkerForIndex:lastIndexOK:]):
        (-[WebCoreAXObject indexForTextMarker:]):
        (-[WebCoreAXObject textMarkerRangeForRange:]):
        (-[WebCoreAXObject rangeForTextMarkerRange:]):
        New utility methods.
        
        (-[WebCoreAXObject doAXLineForIndex:]):
        (-[WebCoreAXObject doAXRangeForLine:]):
        (-[WebCoreAXObject doAXStringForRange:]):
        (-[WebCoreAXObject doAXRangeForPosition:]):
        (-[WebCoreAXObject doAXRangeForIndex:]):
        (-[WebCoreAXObject doAXBoundsForRange:]):
        (-[WebCoreAXObject doAXAttributedStringForRange:]):
        (-[WebCoreAXObject doAXRTFForRange:]):
        (-[WebCoreAXObject doAXStyleRangeForIndex:]):
        Implement text field and text area parameterized attributes.
         
        (-[WebCoreAXObject accessibilityAttributeValue:forParameter:]):
        Added text field and text area parameterzed attributes.

        * rendering/RenderTextControl.h:
        Made indexForVisiblePosition() and visiblePositionForIndex() public.

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

        Reviewed by Brady.

        Build fixes.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Fix malformed XML.
        * platform/ResourceLoader.h: Store whether a particular job
        has received a response within the ResourceLoader object itself, since
        it's possible that we will enter the InternetReadFileExA while loop
        twice for the same job.
        * platform/ResourceLoaderInternal.h: Add private instance variable to
        store whether we've received a response.
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/win/GraphicsContextWin.cpp: Fix order of preprocessor
        directives.
        * platform/win/ResourceLoaderWin.cpp: 
        (WebCore::ResourceLoader::onRequestComplete): Ask the ResourceLoader
        whether it has received a response instead of assuming it hasn't.
        (WebCore::ResourceLoader::setHasReceivedResponse): Added.
        (WebCore::ResourceLoader::hasReceivedResponse): Added.
        * platform/win/TemporaryLinkStubs.cpp: Rename setKnobProportion to
        setProportion
        (ScrollBar::setProportion):

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

        Requested by ggaren

        Disabled IconDatabase logging by default

        * platform/Logging.cpp:
        (WebCore::):

2006-09-25  Steve Falkenburg  <sfalken@apple.com>

        Build fix

        * platform/cf/ResourceLoaderCFNet.cpp:
        (WebCore::willCacheResponse):

2006-09-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <http://bugs.webkit.org/show_bug.cgi?id=11002>
        Gmail Editor: Crash at WebCore::SplitElementCommand::doApply() when attempting to indent in a new message
        
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Special case
        an empty root editable element.

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

        Reviewed by Steve

        Math error in SystemTimeWin

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

2006-09-25  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        Whitespace cleanup; rename *job variables to *loader.

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestConstructorImp::JSXMLHttpRequestConstructorImp):
        (KJS::JSXMLHttpRequestConstructorImp::implementsConstruct):
        (KJS::JSXMLHttpRequestConstructorImp::construct):
        (KJS::JSXMLHttpRequest::getOwnPropertySlot):
        (KJS::JSXMLHttpRequest::getValueProperty):
        (KJS::JSXMLHttpRequest::put):
        (KJS::JSXMLHttpRequest::putValueProperty):
        (KJS::JSXMLHttpRequest::mark):
        (KJS::JSXMLHttpRequest::JSXMLHttpRequest):
        (KJS::JSXMLHttpRequest::~JSXMLHttpRequest):
        (KJS::JSXMLHttpRequestProtoFunc::callAsFunction):
        * bindings/js/JSXMLHttpRequest.h:
        (KJS::JSXMLHttpRequest::toBoolean):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::urlMatchesDocumentDomain):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::receivedAllData):
        (WebCore::XMLHttpRequest::receivedData):
        * xml/xmlhttprequest.h:
        (WebCore::):

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

        Reviewed by Brady.

        - Deprecate the rest of the old-style methods that are not generated.
        - Add @property syntax to DOMRange.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMRange setStart:offset:]):
        (-[DOMRange setEnd:offset:]):
        (-[DOMRange compareBoundaryPoints:sourceRange:]):
        (-[DOMRange setStart::]):
        (-[DOMRange setEnd::]):
        (-[DOMRange compareBoundaryPoints::]):
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]):
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]):
        (-[DOMDocument createNodeIterator::::]):
        (-[DOMDocument createTreeWalker::::]):
        * bindings/objc/DOMCSS.h:
        * bindings/objc/DOMCSS.mm:
        (-[DOMDocument getComputedStyle:pseudoElement:]):
        (-[DOMDocument getComputedStyle::]):
        (-[DOMDocument getMatchedCSSRules:pseudoElement:]):
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMRange.h:
        * bindings/objc/DOMTraversal.h:

2006-09-25  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.
        
        Outermost <svg> element should clip to viewport
        http://bugs.webkit.org/show_bug.cgi?id=11007

        Test: svg/custom/viewport-clip.svg

        * css/svg.css: change svg:root overflow: from 'visible' to 'hidden'

2006-09-25  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        * css/MediaList.cpp:
        Remove unused header.
        
        * dom/Document.cpp:
        (WebCore::Document::clear):
        Use clear instead of iterating through the list of event listeners, removing each one.
        (Doing that causes a crash when running the layout tests with GuardMalloc turned on)
        
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        (WebCore::HTMLKeygenElement::appendFormData):
        Update due to changes in the SSL key generator.
        
        * ksvg2/svg/SVGAngle.cpp:
        Remove unused header.
        
        * ksvg2/svg/SVGAnimationElement.cpp:
        (SVGAnimationElement::parseMappedAttribute):
        Rename methods and pass Strings instead of DeprecatedStrings to
        parseSeparatedList.
        
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        Remove unused headers.
        
        * ksvg2/svg/SVGHelper.cpp:
        (WebCore::SVGHelper::parseSeparatedList):
        * ksvg2/svg/SVGHelper.h:
        Rename ParseSeperatedList to parseSeparatedList, make it take a String instead of a 
        DeprecatedString and have it use Vector<String> instead of DeprecatedStringList.
        
        * ksvg2/svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * ksvg2/svg/SVGLengthList.h:
        Use Vector<String> instead of DeprecatedStringList.
        
        * loader/Cache.cpp:
        (WebCore::Cache::requestImage):
        (WebCore::Cache::requestStyleSheet):
        (WebCore::Cache::requestScript):
        (WebCore::Cache::requestXSLStyleSheet):
        (WebCore::Cache::requestXBLDocument):
        (WebCore::Cache::remove):
        (WebCore::Cache::get):
        Use a String as the key in the cache set instead of a RefPtr<StringImpl>.
        
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::needReload):
        * loader/DocLoader.h:
        Use a HashSet instead of DeprecatedStringList.
        
        * page/FrameView.h:
        Remove declarations that have no functions.
        
        * platform/SSLKeyGenerator.h:
        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::supportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        Convert to use Vector<String> instead of DeprecatedStringList, and String instead of
        DeprecatedString.

2006-09-25  Dave Hyatt  <hyatt@apple.com>

        Shunt the RenderTheme world transform adoption between
        Cairo and Windows into getWindowsContext and move the method
        out of GraphicsContextCairo and into GraphicsContextWin.

        * ChangeLog:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/cairo/GraphicsContextCairo.cpp:
        * platform/win/GraphicsContextWin.cpp: Added.
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        * rendering/RenderThemeWin.cpp:
        (WebCore::prepareForDrawing):

2006-09-24  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        <svg:a> cannot be styled with a:hover
        http://bugs.webkit.org/show_bug.cgi?id=11005
        
        Test: svg/hixie/cascade/002.xml

        * css/cssstyleselector.cpp:
        (WebCore::checkPseudoState):

2006-09-24  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10882
        SVG needs Obj-C DOM bindings

        - Auto-generate the first 8 Objective-C SVG DOM bindings.  The 
          auto-generated classes are DOMSVGAngle, DOMSVGLength, DOMSVGLengthList,
          DOMSVGMatrix, DOMSVGPathSeg, DOMSVGPathSegList, DOMSVGTransform, and 
          DOMSVGTransformList.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVG.h: Added.
        * ksvg2/svg/SVGAngle.idl:
        * ksvg2/svg/SVGLength.idl:
        * ksvg2/svg/SVGLengthList.idl:
        * ksvg2/svg/SVGMatrix.idl:
        * ksvg2/svg/SVGPathSeg.idl:
        * ksvg2/svg/SVGPathSegList.idl:
        * ksvg2/svg/SVGTransform.idl:
        * ksvg2/svg/SVGTransformList.idl:

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

        Reviewed by eseidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6001
        WebKit does not handle fallback custom cursors
        Fix for http://bugs.webkit.org/show_bug.cgi?id=6002
        WebKit does not properly handle SVG <cursor> element

        Add support for svg cursor images. Also make sure hotspot
        settings are handled correctly. Add tests for handling of css3
        cursor syntax with hotspots in strict and quirks mode. Finally
        implement fallback.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSCursorImageValue.cpp: Added.
        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        * css/CSSCursorImageValue.h: Added.
        (WebCore::CSSCursorImageValue::hotspot):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * ksvg2/svg/SVGCursorElement.cpp:
        * manual-tests/css3-cursor-fallback-quirks.html: Added.
        * manual-tests/css3-cursor-fallback-strict.html: Added.
        * manual-tests/cursorfallback.xml: Added.
        * page/FrameView.cpp:
        (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor):
        (WebCore::Cursor::Cursor):
        * platform/qt/CursorQt.cpp:
        (WebCore::Cursor::Cursor):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleInheritedData::StyleInheritedData):
        (WebCore::StyleInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::addCursor):
        (WebCore::RenderStyle::addSVGCursor):
        (WebCore::RenderStyle::setCursorList):
        (WebCore::RenderStyle::clearCursorList):
        * rendering/RenderStyle.h:
        (WebCore::CursorData::CursorData):
        (WebCore::CursorList::operator[]):
        (WebCore::CursorList::size):
        (WebCore::CursorList::append):
        (WebCore::RenderStyle::cursors):

2006-09-24  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11009
        Auto-generate the internal methods interfaces for the Objective-C bindings

        - Auto-generate the internal method declarations into their own files
          named in the form DOMFooBarInternal.h for class DOMFooBar.

        - Remove all use of DOM_cast from code.

        - Assorted cleanups.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode _initWithNode:WebCore::]):
        (-[DOMNode WebCore::]):
        (-[DOMRange dealloc]):
        (-[DOMRange finalize]):
        (-[DOMRange _initWithRange:WebCore::]):
        (-[DOMRange WebCore::]):
        (-[DOMNodeFilter _initWithNodeFilter:WebCore::]):
        (-[DOMNodeFilter WebCore::]):
        (-[DOMNodeFilter dealloc]):
        (-[DOMNodeFilter finalize]):
        (-[DOMNodeIterator _initWithNodeIterator:WebCore::filter:]):
        (-[DOMNodeIterator WebCore::]):
        (-[DOMTreeWalker _initWithTreeWalker:WebCore::filter:]):
        (-[DOMTreeWalker WebCore::]):
        * bindings/objc/DOMAbstractView.mm:
        (-[DOMAbstractView _initWithAbstractView:WebCore::]):
        * bindings/objc/DOMCSS.mm:
        (-[DOMStyleSheet _initWithStyleSheet:WebCore::]):
        (-[DOMCSSRule _initWithRule:WebCore::]):
        (-[DOMCSSValue _initWithValue:WebCore::]):
        * bindings/objc/DOMEvents.mm:
        (-[DOMEvent _initWithEvent:WebCore::]):
        * bindings/objc/DOMHTMLAppletElement.mm:
        (-[DOMHTMLAppletElement align]):
        (-[DOMHTMLAppletElement setAlign:]):
        (-[DOMHTMLAppletElement alt]):
        (-[DOMHTMLAppletElement setAlt:]):
        (-[DOMHTMLAppletElement archive]):
        (-[DOMHTMLAppletElement setArchive:]):
        (-[DOMHTMLAppletElement code]):
        (-[DOMHTMLAppletElement setCode:]):
        (-[DOMHTMLAppletElement codeBase]):
        (-[DOMHTMLAppletElement setCodeBase:]):
        (-[DOMHTMLAppletElement height]):
        (-[DOMHTMLAppletElement setHeight:]):
        (-[DOMHTMLAppletElement hspace]):
        (-[DOMHTMLAppletElement setHspace:]):
        (-[DOMHTMLAppletElement name]):
        (-[DOMHTMLAppletElement setName:]):
        (-[DOMHTMLAppletElement object]):
        (-[DOMHTMLAppletElement setObject:]):
        (-[DOMHTMLAppletElement vspace]):
        (-[DOMHTMLAppletElement setVspace:]):
        (-[DOMHTMLAppletElement width]):
        (-[DOMHTMLAppletElement setWidth:]):
        * bindings/objc/DOMInternal.h:
        (getDOMWrapper):
        (addDOMWrapper):
        (raiseOnDOMError):
        * bindings/objc/DOMXPath.mm:
        (-[DOMNativeXPathNSResolver _initWithXPathNSResolver:WebCore::]):
        * bindings/scripts/CodeGeneratorObjC.pm:

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

        Reviewed by eseidel.

        Fix Qt/Linux build after Dave's Scrollbar changes.

        * platform/qt/PlatformScrollBar.h: (Somehow this contained the file twice! Removed one instance!)
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::ScrollBar::setProportion):
        (WebCore::PlatformScrollBar::updateThumbPosition):
        (WebCore::PlatformScrollBar::updateThumbProportion):

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

        Reviewed by eseidel.

        Qt/Linux build system changes: enable xpath/xslt by default.
        Offer possibility to change all of these using 'ccmake'.

        * CMakeLists.txt:

2006-09-24  Dave Hyatt  <hyatt@apple.com>

        Cleanup of Scrollbar APIs.  Rename setKnobProportion to setProportion.  Rename setScrollbarValue to updateThumbPosition.
        Give setProportion a base class implementation and implement it using the same pattern as setValue/updateThumbPosition (so that
        the base calls a protected virtual function, updateThumbProportion, implemented by the derived class to update the actual scrollbar itself).

        * platform/ScrollBar.cpp:
        (WebCore::ScrollBar::setValue):
        (WebCore::ScrollBar::setProportion):
        * platform/ScrollBar.h:
        (WebCore::ScrollBar::value):
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBarMac.mm:
        (WebCore::PlatformScrollBar::updateThumbPosition):
        (WebCore::PlatformScrollBar::updateThumbProportion):
        * platform/win/PlatformScrollBar.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (PlatformScrollBar::updateThumbPosition):
        (PlatformScrollBar::updateThumbProportion):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2006-09-23  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=4872
        XMLHttpRequest fails to throw an exception when there is a security violation
        (mismatching domains)

        Raise an exception if there is a security violation, and also in cases required by
        the current draft of XHR specification.

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::getValueProperty): Raise an exception if a DOM method reports one.
        (KJS::JSXMLHttpRequestProtoFunc::callAsFunction): Raise an exception if a DOM method
        reports one, and also if there were too few arguments passed. 

        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException): Added support for custom XHR exceptions.

        * xml/xmlhttprequest.h: Changed state names to match the current spec. Defined an
        exception code range for XHR exceptions.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::open): Removed a check for m_aborted that could never succeed.
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getStatus):
        (WebCore::XMLHttpRequest::getStatusText):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        (WebCore::XMLHttpRequest::receivedAllData):
        (WebCore::XMLHttpRequest::receivedData):

2006-09-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Jeff Jenkins.

        Tweak CF types.

        * platform/cf/ResourceLoaderCFNet.cpp:
        (WebCore::willCacheResponse):

2006-09-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <http://bugs.webkit.org/show_bug.cgi?id=8029>
        Rename Node::isAncestor and RenderObject::hasAncestor to isDescendantOf

        * dom/Document.cpp:
        (WebCore::Document::clearSelectionIfNeeded):
        * dom/Element.cpp:
        (WebCore::Element::contains):
        * dom/Node.cpp:
        (WebCore::Node::traverseNextNode):
        (WebCore::Node::traverseNextSibling):
        (WebCore::Node::traversePreviousNodePostOrder):
        (WebCore::Node::checkAddChild):
        (WebCore::Node::isDescendantOf):
        * dom/Node.h:
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::notifyBeforeNodeRemoval):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        (WebCore::ApplyStyleCommand::pushDownTextDecorationStyleAroundNode):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::mergeIdenticalElements):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::updatePositionForNodeRemoval):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::enclosingListOrBlockquote):
        * editing/Selection.cpp:
        (WebCore::Selection::validate):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved):
        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):
        (WebCore::VisiblePosition::canonicalPosition):
        (WebCore::isFirstVisiblePositionInNode):
        (WebCore::isLastVisiblePositionInNode):
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):
        (WebCore::enclosingNodeWithTag):
        (WebCore::enclosingList):
        (WebCore::enclosingListChild):
        * editing/markup.cpp:
        (WebCore::createMarkup):

2006-09-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        - Added @property syntax to non-generated headers
          inside #ifndef BUILDING_ON_TIGER.
        - Changed the DOMEventTarget protocol to have have new versions
          of addEventListener and removeEventListener with named parameters.
          These old style methods can be removed once Mail changes to use
          the new methods <rdar://problem/4746649>.

        * WebCorePrefix.h: define BUILDING_ON_TIGER when Tiger is the target
        * bindings/objc/DOM.mm:
        (-[DOMNode addEventListener:listener:useCapture:]):
        (-[DOMNode addEventListener:::]): call the new method
        (-[DOMNode removeEventListener:listener:useCapture:]):
        (-[DOMNode removeEventListener:::]): call the new method
        * bindings/objc/DOMAbstractView.h:
        * bindings/objc/DOMEventTarget.h:
        * bindings/objc/DOMHTMLAppletElement.h:
        * bindings/objc/DOMHTMLEmbedElement.h:
        * bindings/objc/DOMHTMLOptionElement.h:
        * bindings/objc/DOMObject.h:
        * bindings/objc/DOMRGBColor.h:

2006-09-22  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fix Qt/Linux build and a really stupid mixup in GraphicsContextQt.

        * platform/qt/FrameQt.cpp:
        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::translate): Make it actually translate, not scale! :-)
        (WebCore::GraphicsContext::origin):
        * platform/qt/PlatformScrollBar.h: Added.
        (WebCore::PlatformScrollBar::isWidget):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):

2006-09-22  Dave Hyatt <hyatt@apple.com>

        Super-minor tweaks to the systemFont function on Mac.
        Set the generic family to None rather than to Serif, and
        don't waste time setting the computed size, since that is
        set from the specified size over in CSSStyleSelector anyway.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemFont):

2006-09-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady.

        Build fix for Xcode 2.3. Convert GraphicsContext::translate() to
        take floats. There was already an implicit conversion to float/double
        when calling CGContextTranslateCTM or cairo_translate.

        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::translate):
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::translate):

2006-09-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Sfalken

        Add redirect and other cleanup to ResourceLoaderWin.cpp
        Fixes bug http://bugs.webkit.org/show_bug.cgi?id=10927
        Fixes bug http://bugs.webkit.org/show_bug.cgi?id=10744

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ResourceLoader.h:
        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        (WebCore::initializeOffScreenResourceLoaderWindow):
        (WebCore::ResourceLoader::onHandleCreated):
        (WebCore::ResourceLoader::onRequestRedirected):
        (WebCore::ResourceLoader::onRequestComplete):
        (WebCore::transferJobStatusCallback):

2006-09-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=10803
        REGRESSION (r15536-r15544): manual-tests/bugzilla-6821.html failing

        * page/FrameView.cpp:
        (WebCore::FrameView::hoverTimerFired): Use the current event.

2006-09-22  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Anders.

        Fix (last) svg memory leak.

        * ksvg2/svg/SVGTransformable.cpp: delete 't' in error case.
        (SVGTransformable::parseTransformAttribute):

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

        No review necessary, just removing a dead file.

        Remove unused file (added previously by mistake) to make room for real implementation.

        * platform/mac/BitmapImageMac.mm: Removed.

2006-09-22  Dave Hyatt <hyatt@apple.com>

        Move PlatformScrollBar.h down into the platforms.
        
        Reviewed by andersca

        * platform/PlatformScrollBar.h: Removed.
        * platform/win/PlatformScrollBar.h: Added.
        * platform/mac/PlatformScrollBar.h: Added.

2006-09-22   Dave Hyatt  <hyatt@apple.com>

        Add support for invalidation of widgets.  This will be needed for the Win32 widget subsystem (and for
        any widget subsystems that don't have any underlying native objects backing the widgets.

        Reviewed by anders

        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        * platform/win/TemporaryLinkStubs.cpp:
        (Widget::invalidate):
        (Widget::invalidateRect):

2006-09-22  Rob Buis  <buis@kd.org>

        Reviewed by eseidel.

        http://bugs.webkit.org/show_bug.cgi?id=10901
        Merge build fixes from unity

        * CMakeLists.txt:

2006-09-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.

        http://bugs.webkit.org/show_bug.cgi?id=10977
        SVGDocument does not expose 'rootElement' property

        Enable 'rootElement' property.

        * ksvg2/svg/SVGDocument.idl:

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

        Tweak includes.

        * platform/ResourceLoaderInternal.h:

2006-09-21  Geoffrey Garen  <ggaren@apple.com>

        build fixed. band happy.
        
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::translate):
        * platform/mac/WidgetMac.mm:

2006-09-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        Some Widget refactoring.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/mac/FrameMac.mm:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::runJavaScriptAlert):
        (WebCore::FrameWin::runJavaScriptConfirm):
        * bridge/win/PageWin.cpp:
        (WebCore::Page::Page):
        (WebCore::rootWindowForFrame):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::translate):
        * page/FrameView.cpp:
        (WebCore::FrameView::isFrameView):
        * page/Page.h:
        (WebCore::Page::setInstanceHandle):
        (WebCore::Page::instanceHandle):
        * platform/GraphicsContext.h:
        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::origin):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::clearFocus):
        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::initializeOffScreenResourceLoaderWindow):
        * platform/win/ScreenWin.cpp:
        (WebCore::monitorInfo):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::updateScrollInfo):
        (WebCore::ScrollView::updateScrollBars):
        * platform/win/SharedTimerWin.cpp:
        (WebCore::initializeOffScreenTimerWindow):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameView::updateBorder):
        (ScrollView::paint):
        (GraphicsContext::clip):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::parentWindow):
        (WebCore::Widget::setParentWindow):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setFrameGeometry):

2006-09-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim H.

        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::backslashAsCurrencySymbol):
        Add comment clarifying why backslashAsCurrencySymbol is needed.

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Add utility functions to get and release HDC from GraphicsContext.

        * platform/GraphicsContext.h: Add utilities to get and release HDC.
        * platform/cairo/GraphicsContextCairo.cpp: Implement new utilities.
        * rendering/RenderThemeWin.cpp: Switch to new utilities.

2006-09-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by anders
        
        <rdar://problem/4426622>
        Plain text paste slow.  Time spent mostly in WebCore::rebalanceWhitespaceInTextNode(...)

        * editing/htmlediting.cpp:
        (WebCore::rebalanceWhitespaceInTextNode): We no longer need to use a RegExp replace because we
        aren't producing complicated sequences here.  Use multiple UChar -> UChar replaces instead for speed.
        Got rid of uses of DepricatedString.

2006-09-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.

        Don't crash if no IconDatabase is available (ie. on Qt/Gdk)

        * page/Frame.cpp:
        (WebCore::Frame::endIfNotLoading):

2006-09-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.

        Fix Qt/Linux build.

        * CMakeLists.txt:
        * kcanvas/device/qt/KCanvasClipperQt.h:
        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::isLoadTypeReload):
        (WebCore::FrameQt::originalRequestURL):
        * platform/qt/FrameQt.h:
        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::concatCTM):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::IconDatabase::setIconURLForPageURL):

2006-09-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <http://bugs.webkit.org/show_bug.cgi?id=7165>
        TinyMCE: Dragging & dropping content always leaves a copy when editing inside a subframe

        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::MoveSelectionCommand): Set the document
        to the position-to-move-to's document, not the fragment's document.  The 
        fragment's document is the document used to create the fragment and is irrelavant.

=== Safari-521.27 ===

2006-09-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        When your assumption is "IconDatabase::sharedIconDatabase()" will never fail but it does, you're in trouble
        This fixes Spinneret so it won't crash on its first load!

        * page/Frame.cpp:
        (WebCore::Frame::endIfNotLoading):

2006-09-21  Brady Eidson  <beidson@apple.com>

        Build fix

        * platform/win/TemporaryLinkStubs.cpp:
        (ScrollView::wheelEvent):

2006-09-20  Rob Buis  <buis@kde.org>

        Reviewed by eseidel.

        http://bugs.webkit.org/show_bug.cgi?id=10946
        new marker code draws end-marker in wrong place

        Keep track of the start of the subpath so we can handle
        closeTo/moveTo correctly.

        * kcanvas/RenderPath.cpp:
        (WebCore::DrawMarkersData::DrawMarkersData):
        (WebCore::updateMarkerDataForElement):

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

        Wheel scrolling prep for Win32.

        WARNING: NO TEST CASES ADDED OR CHANGED

        * platform/PlatformWheelEvent.h:
        * platform/ScrollBar.h:
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::wheelEvent):
        * rendering/RenderLayer.cpp:

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

        Reviewed by Hyatt.

        Bug 10917: REGRESSION (r16027): iFrame transparency broken
        http://bugs.webkit.org/show_bug.cgi?id=10917

        Don't paint the base background color if we transparent.

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

2006-09-20  Adam Roben  <aroben@apple.com>

        Reviewed by andersca.

        * platform/FileChooser.h: Remove no-longer-necessary namespace std

2006-09-20  Eric Seidel  <eric@webkit.org>

        Reviewed by beth.

        Cleanup style in KCanvas.
        Remove extra white-space, unneeded arguments, etc.

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasClipper.cpp:
        (WebCore::operator<<):
        (WebCore::KCanvasClipper::externalRepresentation):
        * kcanvas/KCanvasClipper.h:
        * kcanvas/KCanvasFilters.cpp:
        (WebCore::KCanvasFilter::externalRepresentation):
        (WebCore::operator<<):
        (WebCore::KCanvasFilterEffect::externalRepresentation):
        (WebCore::KCPointLightSource::externalRepresentation):
        (WebCore::KCSpotLightSource::externalRepresentation):
        (WebCore::KCDistantLightSource::externalRepresentation):
        (WebCore::KCanvasFEBlend::externalRepresentation):
        (WebCore::KCanvasFEColorMatrix::externalRepresentation):
        (WebCore::KCanvasFEComponentTransfer::externalRepresentation):
        (WebCore::KCanvasFEComposite::externalRepresentation):
        (WebCore::KCanvasFEConvolveMatrix::externalRepresentation):
        (WebCore::KCanvasFEDiffuseLighting::externalRepresentation):
        (WebCore::KCanvasFEDisplacementMap::externalRepresentation):
        (WebCore::KCanvasFEFlood::externalRepresentation):
        (WebCore::KCanvasFEGaussianBlur::externalRepresentation):
        (WebCore::KCanvasFEImage::externalRepresentation):
        (WebCore::KCanvasFEMerge::externalRepresentation):
        (WebCore::KCanvasFEMorphology::externalRepresentation):
        (WebCore::KCanvasFEOffset::externalRepresentation):
        (WebCore::KCanvasFESpecularLighting::externalRepresentation):
        (WebCore::KCanvasFETile::externalRepresentation):
        (WebCore::KCanvasFETurbulence::externalRepresentation):
        * kcanvas/KCanvasFilters.h:
        (WebCore::KCanvasFEDiffuseLighting::lightSource):
        (WebCore::KCanvasFESpecularLighting::lightSource):
        * kcanvas/KCanvasImage.h:
        * kcanvas/KCanvasMarker.cpp:
        (WebCore::KCanvasMarker::externalRepresentation):
        * kcanvas/KCanvasMarker.h:
        * kcanvas/KCanvasResource.cpp:
        (WebCore::operator<<):
        * kcanvas/KCanvasResource.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        (WebCore::operator<<):
        (WebCore::writeIndent):
        (WebCore::writeStyle):
        (WebCore::write):
        (WebCore::writeRenderResources):
        * kcanvas/KCanvasTreeDebug.h:
        (WebCore::operator<<):
        * kcanvas/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint):
        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        (WebCore::drawStartAndMidMarkers):
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::translateForAttributes):
        * kcanvas/RenderSVGImage.h:
        * kcanvas/device/KRenderingDevice.cpp:
        (WebCore::KRenderingDevice::currentContext):
        (WebCore::KRenderingDevice::popContext):
        (WebCore::KRenderingDevice::pushContext):
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingFillPainter.h:
        * kcanvas/device/KRenderingPaintServer.h:
        (WebCore::KRenderingPaintServer::KRenderingPaintServer):
        (WebCore::KRenderingPaintServer::activeClient):
        (WebCore::KRenderingPaintServer::setActiveClient):
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        (WebCore::operator<<):
        (WebCore::KRenderingPaintServerGradient::externalRepresentation):
        (WebCore::KRenderingPaintServerLinearGradient::externalRepresentation):
        (WebCore::KRenderingPaintServerGradient::listener):
        (WebCore::KRenderingPaintServerGradient::setListener):
        (WebCore::KRenderingPaintServerRadialGradient::externalRepresentation):
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        (WebCore::KRenderingPaintServerPattern::tile):
        (WebCore::KRenderingPaintServerPattern::setTile):
        (WebCore::KRenderingPaintServerPattern::listener):
        (WebCore::KRenderingPaintServerPattern::setListener):
        (WebCore::KRenderingPaintServerPattern::externalRepresentation):
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/KRenderingPaintServerSolid.cpp:
        (WebCore::KRenderingPaintServerSolid::externalRepresentation):
        * kcanvas/device/KRenderingPaintServerSolid.h:
        * kcanvas/device/KRenderingStrokePainter.cpp:
        (WebCore::KRenderingStrokePainter::strokeMiterLimit):
        (WebCore::KRenderingStrokePainter::setStrokeMiterLimit):
        * kcanvas/device/KRenderingStrokePainter.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::prepareFilter):
        * kcanvas/device/quartz/KCanvasItemQuartz.h: Removed.
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm:
        (WebCore::KCanvasMaskerQuartz::applyMask):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        (WebCore::KCanvasImageQuartz::init):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (WebCore::KCanvasClipperQuartz::applyClip):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceQuartz::quartzContext):
        (WebCore::KRenderingDeviceQuartz::contextForImage):
        (WebCore::KRenderingDeviceQuartz::createPaintServer):
        (WebCore::KRenderingDeviceQuartz::createResource):
        (WebCore::KRenderingDeviceQuartz::createFilterEffect):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (WebCore::CGShadingRefForLinearGradient):
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::KRenderingPaintServerGradientQuartz::updateQuartzGradientCache):
        (WebCore::KRenderingPaintServerGradientQuartz::teardown):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (WebCore::KRenderingPaintServerQuartzHelper::strokePath):
        (WebCore::KRenderingPaintServerQuartzHelper::clipToStrokePath):
        (WebCore::KRenderingPaintServerQuartzHelper::fillPath):
        (WebCore::KRenderingPaintServerQuartzHelper::clipToFillPath):
        (WebCore::KRenderingPaintServerSolidQuartz::draw):
        (WebCore::KRenderingPaintServerSolidQuartz::setup):
        (WebCore::KRenderingPaintServerSolidQuartz::renderPath):
        (WebCore::KRenderingPaintServerPatternQuartz::setup):
        (WebCore::KRenderingPaintServerPatternQuartz::renderPath):
        (WebCore::KRenderingPaintServerPatternQuartz::teardown):
        * kcanvas/device/quartz/QuartzSupport.h:
        * kcanvas/device/quartz/QuartzSupport.mm:
        (WebCore::applyStrokeStyleToContext):

2006-09-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Dave Hyatt.

        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        Use lroundf instead of lround since deltas are floats.

2006-09-20  Julien Palmas  <julien.palmas@gmail.com>

        Reviewed by eseidel.  Landed by eseidel.

        Test: svg/custom/pattern-y-offset.svg

        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (WebCore::KRenderingPaintServerPatternQuartz::setup):

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

        Add a new wheelEvent method to ScrollView.  Platforms that wish
        to handle the wheel event for the scroll view themselves can then
        do so there.  (Mac lets the underlying NSScrollView do it for now.)

        * page/FrameView.cpp:
        (WebCore::FrameView::handleWheelEvent):
        * platform/ScrollView.h:
        (WebCore::ScrollView::wheelEvent):

2006-09-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Omernick

        Part of fixing a crash Tim O showed me that I missed in a release build.
        WebKit should be able to call through the bridge to WebCore no matter what -
        Replace the _iconDB member with calls to IconDatabase::sharedIconDatabase()

        * bridge/mac/WebCoreIconDatabaseBridge.h:
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (-[WebCoreIconDatabaseBridge closeSharedDatabase]):
        (-[WebCoreIconDatabaseBridge isOpen]):
        (-[WebCoreIconDatabaseBridge removeAllIcons]):
        (-[WebCoreIconDatabaseBridge _isEmpty]):
        (-[WebCoreIconDatabaseBridge isIconExpiredForIconURL:]):
        (-[WebCoreIconDatabaseBridge setPrivateBrowsingEnabled:]):
        (-[WebCoreIconDatabaseBridge privateBrowsingEnabled]):
        (-[WebCoreIconDatabaseBridge iconForPageURL:withSize:]):
        (-[WebCoreIconDatabaseBridge iconURLForPageURL:]):
        (-[WebCoreIconDatabaseBridge defaultIconWithSize:]):
        (-[WebCoreIconDatabaseBridge retainIconForURL:]):
        (-[WebCoreIconDatabaseBridge releaseIconForURL:]):
        (-[WebCoreIconDatabaseBridge _setIconData:forIconURL:]):
        (-[WebCoreIconDatabaseBridge _setHaveNoIconForIconURL:]):
        (-[WebCoreIconDatabaseBridge _setIconURL:forPageURL:]):
        (-[WebCoreIconDatabaseBridge _hasEntryForIconURL:]):
        (-[WebCoreIconDatabaseBridge _setEnabled:]):
        (-[WebCoreIconDatabaseBridge _isEnabled]):

2006-09-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Add String::split which returns a Vector of Strings and use it instead of 
        DeprecatedStringList.
        
        * bindings/js/kjs_events.cpp:
        (KJS::Clipboard::getValueProperty):
        * bindings/js/kjs_window.cpp:
        (KJS::parseModalDialogFeatures):
        * css/MediaList.cpp:
        (WebCore::MediaList::setMediaText):
        * dom/Clipboard.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::split):
        * platform/StringImpl.cpp:
        * platform/StringImpl.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::types):

2006-09-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Don't call 
        HTMLElement::isContentEditable just to check the Frame's editability, since
        it calls updateRenderering, which can get us into infinite recursion.

2006-09-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Cleaned up my last patch alot, and made the WebCore icon database disabled by default

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase): Disabled by default
        (WebCore::IconDatabase::removeAllIcons): Respect just isOpen() (disabled database will always be closed)
        (WebCore::IconDatabase::setPrivateBrowsingEnabled): Ditto
        (WebCore::IconDatabase::iconForPageURL): Ditto
        (WebCore::IconDatabase::isIconExpiredForIconURL): Ditto
        (WebCore::IconDatabase::iconURLForPageURL): Ditto
        (WebCore::IconDatabase::retainIconForPageURL): Ditto
        (WebCore::IconDatabase::releaseIconForPageURL): Ditto
        (WebCore::IconDatabase::setIconDataForIconURL): Ditto
        (WebCore::IconDatabase::setIconURLForPageURL): Ditto
        (WebCore::IconDatabase::hasEntryForIconURL): Ditto
        (WebCore::IconDatabase::setEnabled): Fixed a big bug here!

2006-09-20  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10935
        REGRESSION: file upload control with direction:rtl or text-align:right
        draws button on top of filename/icon

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::setStyle): Force text-align to
        match direction
        (WebCore::RenderFileUploadControl::paintObject): Fix positioning of
        the filename and icon in RTL

2006-09-20  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben.

        fixed windows build

        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        changed lrint to lround

2006-09-20  Sam Weinig  <sam.weinig@gmail.com>

        Build Fix.  Adds isHorizontal attribute back to WheelEvent
        for the Objective-C bindings.  If it is found that isHorizontal
        is not used, we should remove it again but also remove it's
        declaration from PublicDOMInterfaces.h

        * dom/WheelEvent.h:
        (WebCore::WheelEvent::isHorizontal):
        * dom/WheelEvent.idl:

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

        Fix for 10945, WheelEvent should support two dimensions at once, since
        MacBooks allow for diagonal scrolling.  Also enhance the PlatformWheelEvent
        to allow for diagonal scrolling.

        Reviewed by Eric

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchWheelEvent):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWheelEvent):
        * dom/WheelEvent.h:
        (WebCore::WheelEvent::wheelDelta):
        (WebCore::WheelEvent::wheelDeltaX):
        (WebCore::WheelEvent::wheelDeltaY):
        * dom/WheelEvent.idl:
        * page/FrameView.cpp:
        (WebCore::FrameView::handleWheelEvent):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::deltaX):
        (WebCore::PlatformWheelEvent::deltaY):
        (WebCore::PlatformWheelEvent::normalize):
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2006-09-19  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Split KCanvasResources.* into multiple files (and some other minor spacing changes).
        
        No tests were harmed in the making of this patch.

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasClipper.cpp: Added.
        (WebCore::operator<<):
        * kcanvas/KCanvasClipper.h: Added.
        * kcanvas/KCanvasFilters.h:
        * kcanvas/KCanvasImage.h:
        * kcanvas/KCanvasMarker.cpp: Added.
        * kcanvas/KCanvasMarker.h: Added.
        * kcanvas/KCanvasMasker.cpp: Added.
        (WebCore::KCanvasMasker::KCanvasMasker):
        (WebCore::KCanvasMasker::setMask):
        (WebCore::KCanvasMasker::externalRepresentation):
        (WebCore::getMaskerById):
        * kcanvas/KCanvasMasker.h: Added.
        * kcanvas/KCanvasResource.cpp: Added.
        (WebCore::KCanvasResource::invalidate):
        (WebCore::KCanvasResource::externalRepresentation):
        (WebCore::getResourceById):
        (WebCore::getPaintServerById):
        * kcanvas/KCanvasResource.h: Added.
        * kcanvas/KCanvasResources.cpp: Removed.
        * kcanvas/KCanvasResources.h: Removed.
        * kcanvas/RenderPath.cpp:
        * kcanvas/RenderSVGContainer.cpp:
        * kcanvas/RenderSVGImage.cpp:
        * kcanvas/RenderSVGText.cpp:
        * kcanvas/device/KRenderingPaintServer.h:
        * kcanvas/device/quartz/KCanvasMaskerQuartz.h:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGFilterElement.cpp:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.h:

2006-09-19  Brady Eidson <beidson@apple.com>

        Reviewed by Sarge Decker

        <rdar://problem/4739892> and <rdar://problem/4729797>
        - WebCore::IconDatabase needs to have and respect an enabled() flag
        - Mail on ToT WebKit crashes in IconDatabase code when mailing a page from Safari

        * bridge/mac/WebCoreIconDatabaseBridge.h:
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (-[WebCoreIconDatabaseBridge _setEnabled:]): Added
        (-[WebCoreIconDatabaseBridge _isEnabled]): Added
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::open): Don't open if disabled
        (WebCore::IconDatabase::removeAllIcons): Ignore if disabled/closed
        (WebCore::IconDatabase::setPrivateBrowsingEnabled): Ignore if disabled/closed
        (WebCore::IconDatabase::iconForPageURL): Default Icon if disabled/closed
        (WebCore::IconDatabase::isIconExpiredForIconURL): Default return if disabled/closed
        (WebCore::IconDatabase::iconURLForPageURL): Default return if disabled/closed
        (WebCore::IconDatabase::retainIconForPageURL): Ignore if disabled/closed
        (WebCore::IconDatabase::releaseIconForPageURL): Ignore if disabled/closed
        (WebCore::IconDatabase::releaseIconURL):
        (WebCore::IconDatabase::setIconDataForIconURL): Ignore if disabled/closed
        (WebCore::IconDatabase::setIconURLForPageURL): Ignore if disabled/closed
        (WebCore::IconDatabase::hasEntryForIconURL): Default return if disabled/closed
        (WebCore::IconDatabase::setEnabled): Added
        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::enabled): Added
        * page/Frame.cpp:
        (WebCore::Frame::endIfNotLoading): do an IconDatabase::enabled() check before bothering to load the icon
        * platform/mac/ResourceLoaderMac.mm: Removed extraneous #include

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

        Massage mouse wheel handling so that it is more cross-platform.  Make
        all the work happen in handleWheelEvent on the FrameView.

        Reviewed by bradee-oh

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::wheelEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::handleWheelEvent):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::platformDelta):
        (WebCore::PlatformWheelEvent::delta):
        * platform/mac/WheelEventMac.mm:
        (WebCore::platformDeltaForEvent):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scroll):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::scroll):

2006-09-19  Eric Seidel  <eric@webkit.org>

        Reviewed by adele.

        Improve test output for filters with bounding-box relative sizes.
        http://bugs.webkit.org/show_bug.cgi?id=8585

        Many test results updated.

        * kcanvas/KCanvasFilters.cpp:
        (WebCore::KCanvasFilter::externalRepresentation):

2006-09-19  Eric Seidel  <eric@webkit.org>

        Reviewed by adele.
        
        Markers should clip to their viewport.
        http://bugs.webkit.org/show_bug.cgi?id=5967

        Test: svg/custom/marker-overflow-clip.svg

        * kcanvas/KCanvasResources.cpp:
        (WebCore::KCanvasMarker::KCanvasMarker):
        (WebCore::KCanvasMarker::setMarker):
        (WebCore::KCanvasMarker::draw):
        * kcanvas/KCanvasResources.h:
        (WebCore::KCanvasMasker::mask):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::canvasResource):
        (WebCore::SVGMarkerElement::createRenderer):

2006-09-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by eseidel

        Backing out my recent change.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): 

2006-09-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Kevin McCullough

        http://bugs.webkit.org/show_bug.cgi?id=10940
        Opening a PDF in a new tab/window creates a documentless-frame
        and we deref the document without checking its validity

        * page/Frame.cpp:
        (WebCore::Frame::iconURL):

2006-09-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4735272>
        Can not click into link in programmatically editable content

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): We stopped using
        userModify to implement document wide editability.

2006-09-19  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin and landed by Brady

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10939
        Build broken when SVG is not enabled.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs):

2006-09-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4727383> REGRESSION: Pasting plain text with tabs into Blot converts the tabs to single spaces

        Pasting plain text results in a match style paste, and the insertion
        position is whitespace normal, which clobbers the whitespace:pre on 
        tab spans.  Skip changes to the whitespace mode when computing a style
        change for tab spans or the text nodes inside tab spans.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init): Don't change the whitespace mode inside
        tab spans.

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

        Fix for bug 5298, shape=default not supported for image maps.  Implement
        support for it.

        Reviewed by timo

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRegion):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::mapMouseEvent):

2006-09-19  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10824
        "no file selected" placeholder text missing from file upload control

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderFileUploadControl.cpp: Remove class
        RenderFileUploadInnerFileBox, rename defaultFilenameNumChars to
        defaultWidthNumChars
        (WebCore::RenderFileUploadControl::RenderFileUploadControl): Call
        RenderBlock constructor instead of RenderFlexibleBox, 
        (WebCore::RenderFileUploadControl::setStyle): Remove references to
        m_fileBox.
        (WebCore::RenderFileUploadControl::valueChanged): Call repaint()
        instead of updateIconAndFileName() (which has been removed)
        (WebCore::RenderFileUploadControl::updateFromElement): Remove
        references to m_fileBox, don't call updateIconAndFilename()
        (WebCore::RenderFileUploadControl::maxFilenameWidth): Calculate width
        without using m_fileBox
        (WebCore::RenderFileUploadControl::createButtonStyle): Remove
        now-unnecessary display:box rule.
        (WebCore::RenderFileUploadControl::paintObject): Remove redundant call
        to paintingDisabled() now that Icon::paint() does it, and add code to
        paint the filename directly.
        (WebCore::RenderFileUploadControl::calcMinMaxWidth): Move this method
        out of RenderFileUploadInnerFileBox and into RenderFileUploadControl
        * rendering/RenderFileUploadControl.h: Make RenderFileUploadControl a
        subclass of RenderBlock instead of RenderFlexibleBox, remove
        updateIconAndFilename() method, remove m_fileBox instance variable.

2006-09-19  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Exceptions thrown from <script> tags in XHTML/SVG docs show the wrong line numbers
        http://bugs.webkit.org/show_bug.cgi?id=10846
        
        No automated test case possible until http://bugs.webkit.org/show_bug.cgi?id=10905 is resolved.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):

2006-09-19  Krzysztof Kowalczyk <kkowalczyk@gmail.com>

        Reviewed by eseidel.  Landed by eseidel.
        
        Build fix only, no tests affected.

        * platform/gdk/FontPlatformDataGdk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameGdk::isLoadTypeReload):
        (FrameGdk::originalRequestURL):
        (IconDatabase::setIconURLForPageURL):

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

        Refine the fix for 9805 to really get all the complex cases right.

        Reviewed by Eric

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::handleBottomOfBlock):

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

        Fix for 9805, <hr> not positioned properly following a previous empty sibling
        that had clear:both set on it.  Update self-collapsing block clearance
        behavior to match what is specified in the latest draft of CSS2.1.

        Reviewed by Eric

        Added fast/block/margin-collapse/empty-clear-blocks.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::handleBottomOfBlock):

2006-09-18  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady, landed by Brady

        Send receivedResponse callback to ResourceLoaderClient when loading
        file URLs.

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

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::fileLoadTimer):

2006-09-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/3028061> - WebKit never updates favicon
        The WebKit enforced expiration date for icons has worked for some time, but the
        move to the new Icon Loader broke the "always get the icon if the user refreshes the page" 
        functionality.  This patch fixes that up, along with some other architectural improvements,
        the main one being that WebCore::Document now contains an iconURL for the Frame to query if needed.

        * bridge/mac/FrameMac.h: Added isLoadTypeReload()
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::isLoadTypeReload): Implementation, calls into the bridge
        * bridge/mac/WebCoreFrameBridge.h: Added isLoadTypeReload:
        * bridge/win/FrameWin.h: Added isLoadTypeReload() for temporary link stub
        * dom/Document.h: Added m_iconURL
        (WebCore::Document::iconURL): Added
        (WebCore::Document::setIconURL): Ditto
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process): Sets the iconURL in the Document instead of the Frame
        * page/Frame.cpp:
        (WebCore::Frame::iconURL): Calculates the iconURL based on the document, then the default favicon.ico url
        (WebCore::Frame::endIfNotLoading): Checks for the load type - always loads icon on Reload
        * page/Frame.h: Nuked setIconURL(), added isLoadTypeReload()
        * page/FramePrivate.h: Nuked IconURL
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::isLoadTypeReload):

2006-09-18  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        - Re-add private method [DOMRGBColor _color] to DOMPrivate.h as
          it is it turns out that AppKit uses it.

        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor _color]):

2006-09-18  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10903
        Yet Another Objective-C Bindings Patch

        - Whitespace cleanup for IDLParser.pm

        - Split DOMException, DOMRangeException, DOMXPathException, DOMEventsException
          and DOMAbstractView into their own files.

        - Remove private method [DOMRGBColor _color] from DOMPrivate.h as
          it is not used and a public method is available now.

        - Remove internal method [DOMDocument _ownerElement] from DOMInternal.h
          as it not used.

        - Auto-generate method isContentEditable for DOMNode.

        - General cleanup of bindings code including removing unneeded #imports
          and whitespace cleanup

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (addElementClass):
        (elementClass):
        (-[DOMNode _initWithNode:WebCore::]):
        (+[DOMNode _nodeWith:WebCore::]):
        (-[DOMNode WebCore::]):
        (-[DOMNode KJS::Bindings::]):
        (-[DOMNode addEventListener:::]):
        (-[DOMNode removeEventListener:::]):
        (-[DOMNode dispatchEvent:]):
        (-[DOMElement image]):
        (-[DOMElement _font]):
        (-[DOMElement _imageTIFFRepresentation]):
        (-[DOMElement _getURLAttribute:]):
        (-[DOMElement _NPObject]):
        (-[DOMElement isFocused]):
        (-[DOMRange dealloc]):
        (-[DOMRange finalize]):
        (-[DOMRange description]):
        (-[DOMRange startContainer]):
        (-[DOMRange startOffset]):
        (-[DOMRange endContainer]):
        (-[DOMRange endOffset]):
        (-[DOMRange collapsed]):
        (-[DOMRange commonAncestorContainer]):
        (-[DOMRange setStart::]):
        (-[DOMRange setEnd::]):
        (-[DOMRange setStartBefore:]):
        (-[DOMRange setStartAfter:]):
        (-[DOMRange setEndBefore:]):
        (-[DOMRange setEndAfter:]):
        (-[DOMRange collapse:]):
        (-[DOMRange selectNode:]):
        (-[DOMRange selectNodeContents:]):
        (-[DOMRange compareBoundaryPoints::]):
        (-[DOMRange deleteContents]):
        (-[DOMRange extractContents]):
        (-[DOMRange cloneContents]):
        (-[DOMRange insertNode:]):
        (-[DOMRange surroundContents:]):
        (-[DOMRange cloneRange]):
        (-[DOMRange toString]):
        (-[DOMRange detach]):
        (-[DOMRange _initWithRange:WebCore::]):
        (+[DOMRange _rangeWith:WebCore::]):
        (-[DOMRange WebCore::]):
        (-[DOMNodeFilter _initWithNodeFilter:WebCore::]):
        (+[DOMNodeFilter _nodeFilterWith:WebCore::]):
        (-[DOMNodeFilter WebCore::]):
        (-[DOMNodeFilter dealloc]):
        (-[DOMNodeFilter finalize]):
        (-[DOMNodeIterator _initWithNodeIterator:WebCore::filter:]):
        (-[DOMNodeIterator WebCore::]):
        (+[DOMNodeIterator _nodeIteratorWith:WebCore::filter:]):
        (-[DOMTreeWalker _initWithTreeWalker:WebCore::filter:]):
        (-[DOMTreeWalker WebCore::]):
        (+[DOMTreeWalker _treeWalkerWith:WebCore::filter:]):
        (ObjCNodeFilterCondition::acceptNode):
        (-[DOMDocument createNodeIterator::::]):
        (-[DOMDocument createTreeWalker::::]):
        (ObjCEventListener::find):
        (ObjCEventListener::create):
        (ObjCEventListener::handleEvent):
        * bindings/objc/DOMAbstractView.h: Added.
        * bindings/objc/DOMAbstractView.mm: Added.
        (-[DOMAbstractView document]):
        (-[DOMAbstractView WebCore::]):
        (-[DOMAbstractView _initWithAbstractView:WebCore::]):
        (+[DOMAbstractView _abstractViewWith:WebCore::]):
        * bindings/objc/DOMCSS.mm:
        (-[DOMStyleSheet _initWithStyleSheet:WebCore::]):
        (+[DOMStyleSheet _styleSheetWith:WebCore::]):
        (+[DOMCSSStyleSheet _CSSStyleSheetWith:WebCore::]):
        (-[DOMCSSRule _initWithRule:WebCore::]):
        (+[DOMCSSRule _CSSRuleWith:WebCore::]):
        (-[DOMCSSValue _initWithValue:WebCore::]):
        (+[DOMCSSValue _CSSValueWith:WebCore::]):
        (+[DOMCSSPrimitiveValue _CSSPrimitiveValueWith:WebCore::]):
        (-[DOMDocument getComputedStyle::]):
        (-[DOMDocument getMatchedCSSRules::]):
        * bindings/objc/DOMCore.h:
        * bindings/objc/DOMEventException.h: Added.
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        * bindings/objc/DOMException.h: Added.
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:]):
        (viewForElement):
        (-[DOMHTMLInputElement _replaceCharactersInRange:withString:selectingFromIndex:]):
        (-[DOMHTMLInputElement _selectedRange]):
        (-[DOMHTMLInputElement _setAutofilled:]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMObject.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMRange.h:
        * bindings/objc/DOMRangeException.h: Added.
        * bindings/objc/DOMViews.h:
        * bindings/objc/DOMViews.mm: Removed.
        * bindings/objc/DOMXPath.h:
        * bindings/objc/DOMXPathException.h: Added.
        * bindings/scripts/IDLParser.pm:
        * dom/Node.idl:

2006-09-18  Brady Eidson  <beidson@apple.com>

        Windows build fix

        * platform/win/TemporaryLinkStubs.cpp:
        (IconDatabase::setIconURLForPageURL):

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

        Fix for bug 3969, hr width doesn't update when it clears a float.  This
        was also a problem with tables and overflow sections.

        Reviewed by Eric

        Added fast/block/float/width-update-after-clear.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):

2006-09-18  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        http://bugs.webkit.org/show_bug.cgi?id=10907
        REGRESSION: New Icon Loaders don't handle certain non-server-root URLs correctly

        * bridge/mac/FrameMac.h: Changed originalRequestURL() to virtual
        * bridge/win/FrameWin.h: Added originalRequestURL()
        * loader/icon/IconLoader.cpp:
        (IconLoader::receivedAllData): Moved the "pageURL to iconURL mapping logic" to Frame::commitIconURLToIconDatabase()
        * page/Frame.cpp:
        (WebCore::Frame::iconURL): Construct the icon URL from *only* the protocol and host of the frame's url.
        (WebCore::Frame::endIfNotLoading): Call commitIconURLToIconDatabase() if we're not kicking off an icon load
        (WebCore::Frame::commitIconURLToIconDatabase): Map the completed doc's pageURL to the iconURL
        * page/Frame.h: Added pure virtual originalRequestURL()
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::originalRequestURL): Added

2006-09-18  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10807
        REGRESSION (r16259): Repro crash on manual-tests/svg-repaint-image.svg

        Make sure the paint method is not exited without popping
        context and transparency layer.

        WARNING: NO TEST CASES ADDED OR CHANGED

        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):

2006-09-18  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Eric.
        
        - fix for http://bugs.webkit.org/show_bug.cgi?id=10896
        REGRESSION: WebKit can't be built with SVG disabled
        
        * bindings/scripts/CodeGeneratorObjC.pm:
        For each file generated add a #ifdef <something>_SUPPORT / #endif
        pair if the idl file has a Conditional extended attribute

2006-09-17  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.
        
        REGRESSION (r16245): double-clicking on javascript exceptions fails to show source
        http://bugs.webkit.org/show_bug.cgi?id=10813

        * bridge/mac/WebCoreFrameBridge.mm:
        (+[WebCoreFrameBridge stringWithData:textEncodingName:]):

2006-09-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=10779
        REGRESSION: Animated GIF ignores frame intervals and loops infinitely

        No test possible.

        * platform/Image.cpp:
        (WebCore::Image::shouldAnimate): Don't check that there is more than one frame,
        maybe the rest just hasn't been loaded yet.
        (WebCore::Image::startAnimation): Move the frame count check here - there is no need
        to start animating before we get at least two frames.

2006-09-17  Brady Eidson <beidson@apple.com>

        Reviewed by Sarge

        IconLoader now gracefully handles the condition where there's no document in the frame
        (ie. PDFs)

        * loader/icon/IconLoader.cpp:
        (IconLoader::startLoading):

2006-09-17  David Hyatt  <hyatt@apple.com>

        Fix for bug 10899, rework how CSS keywords work to be smarter about
        using the correct size when generic families change (e.g., monospace to
        serif and vice versa).

        Reviewed by aroben

        Added fast/text/basic/generic-family-changes.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::checkForGenericFamilyChange):
        (WebCore::CSSStyleSelector::fontSizeForKeyword):
        * css/cssstyleselector.h:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * platform/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::keywordSize):
        (WebCore::FontDescription::setKeywordSize):
        (WebCore::FontDescription::operator==):

2006-09-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=10852
        REGRESSION: Reproducible crash in XMLHttpRequest::abort()

        Test: http/tests/xmlhttprequest/xhr-onunload.html

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send): Check the return value of ResourceLoader::start().

        * loader/icon/IconLoader.cpp:
        (IconLoader::startLoading): Fix a similar latent bug here.

2006-09-17  Adam Roben  <aroben@apple.com>

        Build fix.

        * loader/icon/IconDatabase.cpp:

2006-09-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Add simplifyWhiteSpace and stripWhiteSpace to the String class. 
        Change the XSLT Parameter Map to use Strings instead of StringImpls.
        General cleanup.

        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::XSLTProcessorProtoFunc::callAsFunction):
        * bindings/js/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        * bindings/js/kjs_window.cpp:
        (KJS::ScheduledAction::execute):
        * css/MediaList.cpp:
        (WebCore::MediaList::setMediaText):
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init):
        * html/HTMLDocument.cpp:
        (WebCore::parseDocTypeDeclaration):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::attach):
        (WebCore::HTMLObjectElement::setComplete):
        (WebCore::HTMLObjectElement::detach):
        (WebCore::HTMLObjectElement::recalcStyle):
        (WebCore::HTMLObjectElement::childrenChanged):
        (WebCore::HTMLObjectElement::isImageType):
        * html/HTMLObjectElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::value):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::appendFormData):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::setRGBColor):
        * ksvg2/svg/SVGDescElement.cpp:
        (WebCore::SVGDescElement::description):
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::stripWhiteSpace):
        (WebCore::String::simplifyWhiteSpace):
        * platform/StringImpl.cpp:
        (WebCore::isSpace):
        (WebCore::parseLength):
        (WebCore::StringImpl::stripWhiteSpace):
        (WebCore::StringImpl::simplifyWhiteSpace):
        (WebCore::StringImpl::toInt):
        * platform/StringImpl.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::cocoaTypeFromMIMEType):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunNormalizeSpace::doEvaluate):
        * xml/XPathGrammar.y:
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodeTestMatches):
        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::loadChildSheets):
        (WebCore::XSLStyleSheet::locateStylesheetSubResource):
        * xml/XSLTProcessor.cpp:
        (WebCore::xsltParamArrayFromParameterMap):
        (WebCore::XSLTProcessor::setParameter):
        (WebCore::XSLTProcessor::getParameter):
        (WebCore::XSLTProcessor::removeParameter):
        * xml/XSLTProcessor.h:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::getStatusText):

2006-09-17  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bugs 10895 and 6336, fieldsets misbehaving when floats
        are declared right before the fieldsets.  It turns out fieldsets in other
        browsers avoid floats (like overflow:auto/hidden/scroll sections do), so
        adding that behavior to fieldset fixes the bug.

        Made avoidsFloats virtual and did some refactoring to make tables, flexboxes
        and fieldsets all subclass.

        Reviewed by anders

        Added fast/forms/float-before-fieldset.html

        * rendering/RenderFieldset.h:
        (WebCore::RenderFieldset::avoidsFloats):
        * rendering/RenderFlexibleBox.h:
        (WebCore::RenderFlexibleBox::avoidsFloats):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::avoidsFloats):
        * rendering/RenderObject.h:
        * rendering/RenderTable.h:
        (WebCore::RenderTable::avoidsFloats):

2006-09-17  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bug 3240, implement support for the HTML4 "frame" and
        "rules" attributes on tables.

        Reviewed by bradee-oh

        Well-covered by existing layout tests.

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::additionalAttributeStyleDecl):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalAttributeStyleDecl):
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::HTMLTableElement):
        (WebCore::HTMLTableElement::~HTMLTableElement):
        (WebCore::HTMLTableElement::setCaption):
        (WebCore::HTMLTableElement::setTHead):
        (WebCore::HTMLTableElement::setTFoot):
        (WebCore::HTMLTableElement::setTBody):
        (WebCore::HTMLTableElement::createTHead):
        (WebCore::HTMLTableElement::deleteTHead):
        (WebCore::HTMLTableElement::createTFoot):
        (WebCore::HTMLTableElement::deleteTFoot):
        (WebCore::HTMLTableElement::createCaption):
        (WebCore::HTMLTableElement::deleteCaption):
        (WebCore::HTMLTableElement::insertRow):
        (WebCore::HTMLTableElement::deleteRow):
        (WebCore::HTMLTableElement::addChild):
        (WebCore::HTMLTableElement::childrenChanged):
        (WebCore::HTMLTableElement::mapToEntry):
        (WebCore::HTMLTableElement::parseMappedAttribute):
        (WebCore::HTMLTableElement::additionalAttributeStyleDecl):
        (WebCore::HTMLTableElement::getSharedCellDecl):
        (WebCore::HTMLTableElement::getSharedGroupDecl):
        (WebCore::HTMLTableElement::attach):
        * html/HTMLTableElement.h:
        (WebCore::HTMLTableElement::caption):
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::):
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalAttributeStyleDecl):
        * html/HTMLTableSectionElement.h:

2006-09-17  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bug 4192, font size wrong for <tt> elements that
        specify their own new font-family list.  Make sure to always
        reset the generic family along with the family list when mapping in
        new font-family values.

        Reviewed by bradee-oh

        fast/text/basic/generic-family-reset.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2006-09-16  Brady Eidson <beidson@apple.com>

        Reviewed by Hyatt

        Pruning code relating to WebKit's icon loader

        * bridge/mac/WebCoreIconDatabaseBridge.h:
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        * loader/icon/IconDatabase.h:
        * page/Frame.cpp:
        (WebCore::Frame::endIfNotLoading): Moved a FIXME in from WebKit's IconLoader to 
        its new home

2006-09-16  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10885
        Auto-generate DOMHTMLDocument for the Objective-C bindings

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument createDocumentFragmentWithText:]):
        * bindings/objc/DOMHTMLDocument.h: Removed.
        * bindings/objc/DOMHTMLDocument.mm: Removed.
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * html/HTMLDocument.idl:
        * platform/DeprecatedString.h:
        (WebCore::DeprecatedString::operator NSString*):

2006-09-16  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10866
        Code in kcanvas/ should not use Private

        Remove Private classes and tweak coding style.

        WARNING: NO TEST CASES ADDED OR CHANGED

        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::RenderPath):
        (WebCore::RenderPath::~RenderPath):
        (WebCore::RenderPath::localTransform):
        (WebCore::RenderPath::setLocalTransform):
        (WebCore::RenderPath::fillContains):
        (WebCore::RenderPath::relativeBBox):
        (WebCore::RenderPath::setPath):
        (WebCore::RenderPath::path):
        (WebCore::RenderPath::layout):
        * kcanvas/RenderPath.h:
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::~RenderSVGContainer):
        (WebCore::RenderSVGContainer::drawsContents):
        (WebCore::RenderSVGContainer::setDrawsContents):
        (WebCore::RenderSVGContainer::localTransform):
        (WebCore::RenderSVGContainer::setLocalTransform):
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::setViewport):
        (WebCore::RenderSVGContainer::viewport):
        (WebCore::RenderSVGContainer::setViewBox):
        (WebCore::RenderSVGContainer::viewBox):
        (WebCore::RenderSVGContainer::setAlign):
        (WebCore::RenderSVGContainer::align):
        (WebCore::RenderSVGContainer::fillContains):
        (WebCore::RenderSVGContainer::strokeContains):
        (WebCore::RenderSVGContainer::setSlice):
        (WebCore::RenderSVGContainer::slice):
        * kcanvas/RenderSVGContainer.h:
        * kcanvas/device/KRenderingFillPainter.cpp:
        (WebCore::KRenderingFillPainter::KRenderingFillPainter):
        (WebCore::KRenderingFillPainter::~KRenderingFillPainter):
        (WebCore::KRenderingFillPainter::fillRule):
        (WebCore::KRenderingFillPainter::setFillRule):
        (WebCore::KRenderingFillPainter::opacity):
        (WebCore::KRenderingFillPainter::setOpacity):
        * kcanvas/device/KRenderingFillPainter.h:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        (WebCore::KRenderingPaintServerGradient::KRenderingPaintServerGradient):
        (WebCore::KRenderingPaintServerGradient::~KRenderingPaintServerGradient):
        (WebCore::KRenderingPaintServerGradient::gradientStops):
        (WebCore::KRenderingPaintServerGradient::setGradientStops):
        (WebCore::KRenderingPaintServerGradient::spreadMethod):
        (WebCore::KRenderingPaintServerGradient::setGradientSpreadMethod):
        (WebCore::KRenderingPaintServerGradient::boundingBoxMode):
        (WebCore::KRenderingPaintServerGradient::setBoundingBoxMode):
        (WebCore::KRenderingPaintServerGradient::gradientTransform):
        (WebCore::KRenderingPaintServerGradient::setGradientTransform):
        (WebCore::KRenderingPaintServerLinearGradient::KRenderingPaintServerLinearGradient):
        (WebCore::KRenderingPaintServerLinearGradient::~KRenderingPaintServerLinearGradient):
        (WebCore::KRenderingPaintServerLinearGradient::gradientStart):
        (WebCore::KRenderingPaintServerLinearGradient::setGradientStart):
        (WebCore::KRenderingPaintServerLinearGradient::gradientEnd):
        (WebCore::KRenderingPaintServerLinearGradient::setGradientEnd):
        (WebCore::KRenderingPaintServerRadialGradient::KRenderingPaintServerRadialGradient):
        (WebCore::KRenderingPaintServerRadialGradient::~KRenderingPaintServerRadialGradient):
        (WebCore::KRenderingPaintServerRadialGradient::gradientCenter):
        (WebCore::KRenderingPaintServerRadialGradient::setGradientCenter):
        (WebCore::KRenderingPaintServerRadialGradient::gradientFocal):
        (WebCore::KRenderingPaintServerRadialGradient::setGradientFocal):
        (WebCore::KRenderingPaintServerRadialGradient::gradientRadius):
        (WebCore::KRenderingPaintServerRadialGradient::setGradientRadius):
        (WebCore::KRenderingPaintServerGradient::listener):
        (WebCore::KRenderingPaintServerGradient::setListener):
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        (WebCore::KRenderingPaintServerPattern::KRenderingPaintServerPattern):
        (WebCore::KRenderingPaintServerPattern::~KRenderingPaintServerPattern):
        (WebCore::KRenderingPaintServerPattern::setBbox):
        (WebCore::KRenderingPaintServerPattern::bbox):
        (WebCore::KRenderingPaintServerPattern::boundingBoxMode):
        (WebCore::KRenderingPaintServerPattern::setBoundingBoxMode):
        (WebCore::KRenderingPaintServerPattern::tile):
        (WebCore::KRenderingPaintServerPattern::setTile):
        (WebCore::KRenderingPaintServerPattern::patternTransform):
        (WebCore::KRenderingPaintServerPattern::setPatternTransform):
        (WebCore::KRenderingPaintServerPattern::listener):
        (WebCore::KRenderingPaintServerPattern::setListener):
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/KRenderingPaintServerSolid.cpp:
        (WebCore::KRenderingPaintServerSolid::KRenderingPaintServerSolid):
        (WebCore::KRenderingPaintServerSolid::~KRenderingPaintServerSolid):
        (WebCore::KRenderingPaintServerSolid::color):
        (WebCore::KRenderingPaintServerSolid::setColor):
        * kcanvas/device/KRenderingPaintServerSolid.h:
        * kcanvas/device/KRenderingStrokePainter.cpp:
        (WebCore::KRenderingStrokePainter::KRenderingStrokePainter):
        (WebCore::KRenderingStrokePainter::~KRenderingStrokePainter):
        (WebCore::KRenderingStrokePainter::strokeWidth):
        (WebCore::KRenderingStrokePainter::setStrokeWidth):
        (WebCore::KRenderingStrokePainter::strokeMiterLimit):
        (WebCore::KRenderingStrokePainter::setStrokeMiterLimit):
        (WebCore::KRenderingStrokePainter::strokeCapStyle):
        (WebCore::KRenderingStrokePainter::setStrokeCapStyle):
        (WebCore::KRenderingStrokePainter::strokeJoinStyle):
        (WebCore::KRenderingStrokePainter::setStrokeJoinStyle):
        (WebCore::KRenderingStrokePainter::dashOffset):
        (WebCore::KRenderingStrokePainter::setDashOffset):
        (WebCore::KRenderingStrokePainter::dashArray):
        (WebCore::KRenderingStrokePainter::setDashArray):
        (WebCore::KRenderingStrokePainter::opacity):
        (WebCore::KRenderingStrokePainter::setOpacity):
        (WebCore::KRenderingStrokePainter::dirty):
        (WebCore::KRenderingStrokePainter::setDirty):
        * kcanvas/device/KRenderingStrokePainter.h:

2006-09-16  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=10887
        Fix build error

        * bindings/objc/DOMPrivate.h: Remove reference to DOMEventPrivate.h.

2006-09-16  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Anders.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=10886
        REGRESSION (r16387): Reproducible crash when mousing over HTML document

        - Special case method [DOMNode ownerDocument] to call document() instead
          or ownerDocument() to return to the old behavior. 

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorObjC.pm:

2006-09-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        <rdar://problem/4730811> - New IconDatabase needs to attempt to create its path.
        Otherwise new installs and new user accounts won't have any icons because the icon.db cannot be created

        * loader/icon/IconDatabase.cpp: Removed a now obsolete FIXME
        (WebCore::makeAllDirectories): Added - candidate to be in a header for "platform neutral file utilities"
        (WebCore::IconDatabase::open): Make sure the directory exists

2006-09-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady.

        Make new style ObjC methods public API.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/PublicDOMInterfaces.h:

2006-09-15  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10870
        Auto-generate DOMNode for the Objective-C bindings

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode boundingBox]):
        (-[DOMNode lineBoxRects]):
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMNode.h: Removed.
        * bindings/objc/DOMNode.mm: Removed.
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/Node.idl:

2006-09-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Removed alter selection logic from WebCoreFrameBridge and moved to SelectionController.

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge centerSelectionInVisibleArea]):
        (-[WebCoreFrameBridge rangeByExpandingSelectionWithGranularity:]):
        (-[WebCoreFrameBridge rangeByAlteringCurrentSelection:direction:granularity:]):
        (-[WebCoreFrameBridge alterCurrentSelection:direction:granularity:]):
        (-[WebCoreFrameBridge alterCurrentSelection:verticalDistance:]):
        (-[WebCoreFrameBridge replaceMarkedTextWithText:]):
        (-[WebCoreFrameBridge replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        (-[WebCoreFrameBridge increaseSelectionListLevel]):
        (-[WebCoreFrameBridge increaseSelectionListLevelOrdered]):
        (-[WebCoreFrameBridge increaseSelectionListLevelUnordered]):
        (-[WebCoreFrameBridge decreaseSelectionListLevel]):
        (-[WebCoreFrameBridge insertLineBreak]):
        (-[WebCoreFrameBridge insertParagraphSeparator]):
        (-[WebCoreFrameBridge insertParagraphSeparatorInQuotedContent]):
        (-[WebCoreFrameBridge insertText:selectInsertedText:]):
        (-[WebCoreFrameBridge deleteKeyPressedWithSmartDelete:granularity:]):
        (-[WebCoreFrameBridge forwardDeleteKeyPressedWithSmartDelete:granularity:]):
        (createMouseEventFromDraggingInfo):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::moveTo):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::modify):
        (WebCore::SelectionController::setBase):
        (WebCore::SelectionController::setExtent):
        * editing/SelectionController.h:
        * page/Frame.cpp:
        (WebCore::Frame::revealSelection):
        (WebCore::Frame::revealCaret):
        * page/Frame.h:

2006-09-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Added the ability to get a mutable char* from a CString, which will copy the internal
        buffer if the ref count is greater than 1 so your mutable char* won't affect any other
        referrer of that buffer.

        * platform/CString.cpp:
        (WebCore::CString::mutableData):
        (WebCore::CString::copyBufferIfNeeded):
        * platform/CString.h:

2006-09-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4674869>
        REGRESSION: selecting text to write over results in cursor jumping to middle of next line

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify): Added lineBoundary to test fix.
        * editing/visible_units.cpp:
        (WebCore::endOfLine): If the last box on the line is a lineBreak, return the
        position before it, not after it.

2006-09-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=10864
        Bug 10864: Linux\GDK build fixes

        * Projects/gdk/webcore-gdk.bkl:
        * WebCoreSources.bkl:
        * platform/gdk/FontCacheGdk.cpp:
        * platform/gdk/FontDataGdk.cpp:
        (WebCore::FontData::platformInit):
        * platform/gdk/FontGdk.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::handleGdkEvent):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/ImageGdk.cpp: Added.
        (WebCore::Image::initPlatformData):
        (WebCore::Image::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::supportsType):
        * platform/gdk/RenderPopupMenuGdk.cpp:
        (WebCore::RenderPopupMenuGdk::hidePopup):
        * platform/gdk/RenderPopupMenuGdk.h:
        * platform/gdk/ScreenGdk.cpp:
        (WebCore::drawableForPage):
        (WebCore::screenRect):
        (WebCore::screenDepth):
        (WebCore::usableScreenRect):
        (WebCore::scaleFactor):
        * platform/gdk/SystemTimeLinux.cpp:
        (WebCore::currentTime):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameGdk::bindingRootObject):
        (FrameGdk::markMisspellings):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (FrameGdk::shouldChangeSelection):
        (FrameGdk::respondToChangedSelection):
        (FrameGdk::respondToChangedContents):
        (Path::contains):
        (PlatformScrollBar::PlatformScrollBar):
        (PlatformScrollBar::~PlatformScrollBar):
        (PlatformScrollBar::width):
        (PlatformScrollBar::height):
        (PlatformScrollBar::setEnabled):
        (PlatformScrollBar::paint):
        (PlatformScrollBar::setScrollBarValue):
        (PlatformScrollBar::setKnobProportion):
        (PlatformScrollBar::setRect):
        (ScrollBar::ScrollBar):
        (FileChooser::FileChooser):
        (FileChooser::~FileChooser):
        (FileChooser::openFileChooser):
        (FileChooser::basenameForWidth):
        (FileChooser::uploadControlDetaching):
        (FileChooser::chooseFile):
        (Icon::Icon):
        (Icon::~Icon):
        (Icon::newIconForFile):
        (Icon::paint):
        (IconLoader::stopLoading):
        (IconLoader::startLoading):
        (IconLoader::createForFrame):
        (IconDatabase::isIconExpiredForIconURL):
        (IconDatabase::hasEntryForIconURL):
        (IconDatabase::sharedIconDatabase):
        * platform/gdk/WidgetGdk.cpp:
        * webcore-base.bkl:

2006-09-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10835
        Fix svg memory leaks.

        Reworked SVGList to deal with RefPtr's for ptr types
        which makes manual refcounting unnecessary, and is much safer.

        Removing all virtual functions (nullItem) from SVGList, and
        also remove SVGListBase. Switch to a similar concept like
        Vector/VectorTraits (see new file SVGListTraits.h).

        Credits go to Eric/Maciej for the inspiration.

        * CMakeLists.txt: Add SVGListTraits.cpp to build
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGeneratorJS.pm: Generator changes for SVGTransform/PathSeg/LengthList (now RefPtr based)
        * kcanvas/RenderSVGText.cpp: Add some get() methods, as SVGLengthList is RefPtr based now.
        (WebCore::RenderSVGText::translationForAttributes):
        * ksvg2/svg/SVGAnimateTransformElement.cpp: Add some get() methods, as SVGTransformList is RefPtr based now.
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        * ksvg2/svg/SVGElementInstanceList.cpp: Be RefPtr based.
        (WebCore::SVGElementInstanceList::SVGElementInstanceList):
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGLengthList.cpp: Ditto.
        (WebCore::SVGLengthList::SVGLengthList):
        * ksvg2/svg/SVGLengthList.h: Ditto.
        * ksvg2/svg/SVGList.h: Rewrote, as described above.
        (WebCore::SVGListTypeOperations::nullItem):
        (WebCore::SVGList::SVGList):
        (WebCore::SVGList::~SVGList):
        (WebCore::SVGList::clear):
        (WebCore::SVGList::getFirst):
        (WebCore::SVGList::getLast):
        (WebCore::SVGList::getItem):
        (WebCore::SVGList::replaceItem):
        (WebCore::SVGList::removeItem):
        * ksvg2/svg/SVGListTraits.cpp: Added.
        * ksvg2/svg/SVGListTraits.h: Added.
        (WebCore::):
        * ksvg2/svg/SVGPathElement.cpp: Add some get() methods, as SVGPathSegList is RefPtr based now.
        (WebCore::SVGPathElement::toPathData):
        * ksvg2/svg/SVGPathSegList.cpp: Be RefPtr based.
        (WebCore::SVGPathSegList::SVGPathSegList):
        * ksvg2/svg/SVGPathSegList.h: Ditto.
        * ksvg2/svg/SVGTransform.cpp: Style cleanup.
        (SVGTransform::SVGTransform):
        * ksvg2/svg/SVGTransformList.cpp: Be RefPtr based.
        (SVGTransformList::SVGTransformList):
        (SVGTransformList::createSVGTransformFromMatrix):
        (SVGTransformList::consolidate):
        * ksvg2/svg/SVGTransformList.h: Ditto.
        * ksvg2/svg/SVGTransformable.cpp: Fix RefPtr usage of SVGTransform.
        (SVGTransformable::parseTransformAttribute):

2006-09-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Fix build on Qt/Linux and implement Frame::addMessageToConsole to
        be able to see javascript errors for instance.

        * CMakeLists.txt:
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQt.cpp: Implement addMessageToConsole.
        (WebCore::FrameQt::bindingRootObject):
        * platform/qt/TemporaryLinkStubs.cp
        (WebCore::IconDatabase::hasEntryForIconURL):
        (WebCore::IconDatabase::sharedIconDatabase):

2006-09-15  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10869
        Auto-generate the internal methods for the Objective-C bindings

        - Auto-generates the internal method (ie. the _fooBar and _fooBarWith methods)
          implementations where standard.  For cases where a custom implementation was
          needed, added a [ObjCNoInternal] extended attribute to the corresponding IDL.

        - Some general cleanup of some of the non-generated bindings, to bring them in-
          line with what the generated bindings look like.

        * bindings/objc/DOM.mm:
        (-[DOMNode description]):
        * bindings/objc/DOMCSS.mm:
        (-[DOMCSSPrimitiveValue WebCore::]):
        (-[DOMDocument getComputedStyle::]):
        (-[DOMDocument getMatchedCSSRules::]):
        * bindings/objc/DOMEvents.mm:
        (-[DOMEvent WebCore::]):
        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMHTMLDocument.mm:
        (-[DOMHTMLDocument title]):
        (-[DOMHTMLDocument setTitle:]):
        (-[DOMHTMLDocument referrer]):
        (-[DOMHTMLDocument domain]):
        (-[DOMHTMLDocument URL]):
        (-[DOMHTMLDocument body]):
        (-[DOMHTMLDocument setBody:]):
        (-[DOMHTMLDocument images]):
        (-[DOMHTMLDocument applets]):
        (-[DOMHTMLDocument links]):
        (-[DOMHTMLDocument forms]):
        (-[DOMHTMLDocument anchors]):
        (-[DOMHTMLDocument cookie]):
        (-[DOMHTMLDocument setCookie:]):
        (-[DOMHTMLDocument open]):
        (-[DOMHTMLDocument close]):
        (-[DOMHTMLDocument write:]):
        (-[DOMHTMLDocument writeln:]):
        (-[DOMHTMLDocument getElementById:]):
        (-[DOMHTMLDocument getElementsByName:]):
        (-[DOMHTMLDocument WebCore::]):
        (+[DOMHTMLDocument _HTMLDocumentWith:WebCore::]):
        * bindings/objc/DOMHTMLOptionElement.mm:
        (-[DOMHTMLOptionElement form]):
        (-[DOMHTMLOptionElement defaultSelected]):
        (-[DOMHTMLOptionElement setDefaultSelected:]):
        (-[DOMHTMLOptionElement text]):
        (-[DOMHTMLOptionElement index]):
        (-[DOMHTMLOptionElement disabled]):
        (-[DOMHTMLOptionElement setDisabled:]):
        (-[DOMHTMLOptionElement label]):
        (-[DOMHTMLOptionElement setLabel:]):
        (-[DOMHTMLOptionElement selected]):
        (-[DOMHTMLOptionElement setSelected:]):
        (-[DOMHTMLOptionElement value]):
        (-[DOMHTMLOptionElement setValue:]):
        (-[DOMHTMLOptionElement WebCore::]):
        (+[DOMHTMLOptionElement _HTMLOptionElementWith:WebCore::]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMNode.mm:
        (-[DOMNode dealloc]):
        (-[DOMNode finalize]):
        (-[DOMNode nodeName]):
        (-[DOMNode nodeValue]):
        (-[DOMNode setNodeValue:]):
        (-[DOMNode nodeType]):
        (-[DOMNode parentNode]):
        (-[DOMNode childNodes]):
        (-[DOMNode firstChild]):
        (-[DOMNode lastChild]):
        (-[DOMNode previousSibling]):
        (-[DOMNode nextSibling]):
        (-[DOMNode attributes]):
        (-[DOMNode ownerDocument]):
        (-[DOMNode insertBefore::]):
        (-[DOMNode replaceChild::]):
        (-[DOMNode removeChild:]):
        (-[DOMNode appendChild:]):
        (-[DOMNode hasChildNodes]):
        (-[DOMNode cloneNode:]):
        (-[DOMNode normalize]):
        (-[DOMNode isSupported::]):
        (-[DOMNode namespaceURI]):
        (-[DOMNode prefix]):
        (-[DOMNode setPrefix:]):
        (-[DOMNode localName]):
        (-[DOMNode hasAttributes]):
        (-[DOMNode isSameNode:]):
        (-[DOMNode isEqualNode:]):
        (-[DOMNode isDefaultNamespace:]):
        (-[DOMNode lookupPrefix:]):
        (-[DOMNode lookupNamespaceURI:]):
        (-[DOMNode textContent]):
        (-[DOMNode setTextContent:]):
        (-[DOMNode boundingBox]):
        (-[DOMNode lineBoxRects]):
        * bindings/objc/DOMObject.mm:
        (-[DOMObject _init]):
        * bindings/objc/DOMXPath.mm:
        (-[DOMNativeXPathNSResolver dealloc]):
        (-[DOMNativeXPathNSResolver finalize]):
        (-[DOMNativeXPathNSResolver WebCore::]):
        (-[DOMNativeXPathNSResolver _initWithXPathNSResolver:WebCore::]):
        (+[DOMNativeXPathNSResolver _xpathNSResolverWith:WebCore::]):
        (-[DOMNativeXPathNSResolver lookupNamespaceURI:]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        (-[WebCoreFrameBridge moveSelectionToDragCaret:smartMove:]):
        * css/CSSCharsetRule.idl:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSStyleRule.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSUnknownRule.idl:
        * css/CSSValue.idl:
        * css/CSSValueList.idl:
        * css/StyleSheet.idl:
        * dom/Event.idl:
        * dom/KeyboardEvent.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/NodeIterator.idl:
        * dom/OverflowEvent.idl:
        * dom/TreeWalker.idl:
        * dom/UIEvent.idl:
        * dom/WheelEvent.idl:

2006-09-15  Adam Roben  <aroben@apple.com>

        Reviewed by timothy.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10865
        New file upload control should match the width of the old one

        Make width of new file upload control match the old one as closely as
        possible.

        * rendering/RenderFileUploadControl.cpp:

2006-09-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Remove the SVG IDL files from the Copy Resources phase.

        * WebCore.xcodeproj/project.pbxproj:

2006-09-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Eric Siedel

        Dumped the use of CGColorRef and directly use the floating point data from
        WebCore::Color

        This fixes the performance regression found between 16285 and 16286

        * platform/mac/FontMac.mm:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawGlyphs):

2006-09-14  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=10838
        Bug 10838: REGRESSION: Leaking of WebScriptObjectPrivate

        FrameMac relies on its cleanupPluginObjects being called to perform cleanup.  The virtual
        Frame::cleanupPluginObjects method is called from Frame's destructor, which results
        in Frame::cleanupPluginObjects being called rather than FrameMac::cleanupPluginObjects.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::~FrameMac): Call cancelAndClear to ensure that FrameMac::cleanupPluginObjects
        will be called from Frame::clear
        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Use cancelAndClear.
        (WebCore::Frame::cancelAndClear): Move cancellation and clearing into a separate method that
        FrameMac can use.
        * page/Frame.h:

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

        Reviewed by Maciej's rubber stamp

        Exact same fix I just made, but in the other method I horked up
        Also added a reference to the bugzilla in comments

        * page/Frame.cpp:
        (WebCore::Frame::endIfNotLoading):
        (WebCore::Frame::stop):

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

        Reviewed by Maciej

        Fixed a bad iFrame crash, resolving some of the layout test badness

        * page/Frame.cpp:
        (WebCore::Frame::endIfNotLoading):
        - Added a RefPtr to protect the frame itself to prevent its destruction during this method

2006-09-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4655880> Up/Down arrows skip over To Do

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canDeleteRange:]): Added a FIXME.
        * dom/Node.cpp: Removed the unused inSameRootEditableElement.
        * dom/Node.h:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify): Added documentboundary to granularities in order test a fix.
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition): Use highestEditableRoot so that this function can move from
        editable content into editable content that's embedded in non-editable content.
        (WebCore::nextLinePosition): Ditto.
        (WebCore::startOfEditableContent): Renamed from startOfEditableRoot and use highestEditableRoot.
        This is the behavior that callers desire.  This fixes Command + Up/Down.
        (WebCore::endOfEditableContent): Ditto.
        * editing/visible_units.h:

2006-09-14  Karthik Kumar  <karthikkumar@gmail.com>

        Reviewed by timothy. Landed by aroben.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10856
        Windows build fixes after r16360

        * WebCore.vcproj/WebCore/WebCore.vcproj: Add loader\icon to
        AdditionalIncludeDirectories
        * platform/win/TemporaryLinkStubs.cpp: Add link stubs for IconLoader,
        IconDatabase
        (IconLoader::stopLoading):
        (IconLoader::startLoading):
        (IconLoader::createForFrame):
        (IconDatabase::isIconExpiredForIconURL):
        (IconDatabase::hasEntryForIconURL):
        (IconDatabase::sharedIconDatabase):

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

        Part of a build fix for Windows - rest will be working out a mess of temporary link stubs

        * loader/icon/IconLoader.cpp:
        (IconLoader::receivedAllData):
        * page/Frame.cpp:
        * page/FramePrivate.h:

2006-09-14  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Justin Garcia.

        - http://bugs.webkit.org/show_bug.cgi?id=10726
          Crash in ApplyStyleCommand::applyRelativeFontStyleChange

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Prevent a crash by
        makeing sure that the 'beyondEnd' node is after the start node.

2006-09-14  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10845
        Various bugs/crashes in ResourceLoaderWin with local files.

        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::fileLoadTimer):

2006-09-13  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej

        Icon loads now take place in WebCore

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:
        - Moved enforcement of a Mozilla Favicon extension elsewhere
        
        * bridge/mac/FrameMac.h: 
        * bridge/mac/FrameMac.mm: 
        (WebCore::FrameMac::originalRequestURL):
        - Added accessor to "original request URL"
        
        * bridge/mac/WebCoreFrameBridge.h: 
        - Removed methods to set the iconURL as all loading is now done in WebCore
        - Added call throughs to notify WebKit an Icon is done loading, and a to get the original request URL
        
        * html/HTMLLinkElement.cpp: 
        (WebCore::HTMLLinkElement::process):
        - Moved enforcement of a Mozilla Favicon extension elsewhere
        
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconURLForPageURL):
        - Changed an ASSERT to correctly handle a sketchy (invalid) situation

        * loader/icon/IconLoader.h: Added.
        * loader/icon/IconLoader.cpp: Added.
        (IconLoader::IconLoader):
        (IconLoader::createForFrame):
        - Static factory method with a private constructor to enforce 
          "you MUST have a Frame to create an IconLoader" semantics
        (IconLoader::~IconLoader):
        (IconLoader::startLoading):
        (IconLoader::stopLoading):
        (IconLoader::receivedData):
        - ResourceLoaderClient delegate
        (IconLoader::receivedAllData):
        - Ditto

        * loader/mac/IconLoaderMac.mm: Added.
        (IconLoader::receivedResponse):
        (IconLoader::notifyIconChanged):
        - For now, these are platform specific methods
        - One to get the HTTP response code of an icon load
        - The other to call through to the app when the icon has changed (loaded)

        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::iconURL):
        (WebCore::Frame::setIconURL):
        - Frame objects now have an inherent icon URL and a way to calculate/access it
        (WebCore::Frame::endIfNotLoading):
        - This is where we actually kick off the IconLoader
        (WebCore::Frame::stop):
        - Added call to stop loading the icon

        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        (WebCore::FramePrivate::~FramePrivate):
        - Added the icon URL as a private member
        - Added the IconLoader as a private member, and clean it up on deletion

        * platform/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::start):  Added a valuable ASSERT

2006-09-13  David Hyatt  <hyatt@apple.com>

        Fix for 10841, unable to check checkboxes inside labels.

        Reviewed by xenon, bradee-oh

        * css/html4.css:
        * dom/Element.cpp:
        (WebCore::Element::contains):
        * dom/Element.h:
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler):

2006-09-13  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=10834
        Bug 10834: FileChooser constructor in FileChooserMac appears to overretain m_controller

        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::FileChooser): Don't over-retain the OpenPanelController.

2006-09-13  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10836
        Bug 10836: REGRESSION: Mac implementation of Font::drawGlyphs leaks a CGColorRef

        * platform/mac/FontMac.mm:
        (WebCore::Font::drawComplexText): Release CGColorRef after use.
        (WebCore::Font::drawGlyphs): Ditto.

2006-09-14  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the Win32 build.
        
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::bindingRootObject):

2006-09-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O.

        Add USE defines for the generic JavaScriptCore bindings as well as NPAPI bindings.
        
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::createLanguageInstanceForValue):
        * bindings/js/kjs_dom.cpp:
        (KJS::getRuntimeObject):
        * bridge/mac/FrameMac.h:
        * config.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::~HTMLAppletElement):
        (WebCore::HTMLAppletElement::detach):
        * html/HTMLAppletElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::~HTMLEmbedElement):
        (WebCore::HTMLEmbedElement::detach):
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::~HTMLObjectElement):
        (WebCore::HTMLObjectElement::detach):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement):
        (WebCore::HTMLPlugInElement::~HTMLPlugInElement):
        (WebCore::HTMLPlugInElement::createNPObject):
        * html/HTMLPlugInElement.h:
        * page/Frame.h:

2006-09-13  David Hyatt  <hyatt@apple.com>

        Clean up the XBL and XSLT ifdefs to be consistent with the SVG
        and XPath ifdefs.  KHTML_NO_XBL is flipped and is now XBL_SUPPORT.
        KHTML_XSLT is now XSLT_SUPPORT.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSXSLTProcessor.cpp:
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * config.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        (WebCore::Document::bindingManager):
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setStyleSheet):
        * dom/ProcessingInstruction.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::processingInstruction):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * dom/XMLTokenizer.h:
        * loader/Cache.cpp:
        (WebCore::Cache::getStatistics):
        * loader/Cache.h:
        * loader/CachedResource.h:
        (WebCore::CachedResource::):
        * loader/CachedResourceClient.h:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        * loader/DocLoader.h:
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCSS3NonInheritedData::StyleCSS3NonInheritedData):
        (WebCore::StyleCSS3NonInheritedData::~StyleCSS3NonInheritedData):
        (WebCore::StyleCSS3NonInheritedData::operator==):
        * rendering/RenderStyle.h:
        * xml/XSLImportRule.cpp:
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.cpp:
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessor.cpp:
        * xml/XSLTProcessor.h:

2006-09-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Fix newly introduced memory leaks in SVG.
        http://bugs.webkit.org/show_bug.cgi?id=10835

        * ksvg2/svg/SVGList.h:
        (WebCore::SVGListBase::~SVGListBase):
        (WebCore::SVGListBase::clearVector):
        (WebCore::SVGListBase::clear):
        (WebCore::SVGList::clearVector):
        (WebCore::):
        * ksvg2/svg/SVGNumberList.cpp: s/float/double/ - forgot that!
        (SVGNumberList::SVGNumberList):
        * ksvg2/svg/SVGNumberList.h: Ditto.

2006-09-13  Darin Fisher  <darin@chromium.org>

        Reviewed/landed by aroben.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10833
        Windows build needs fixed after move to engine-rendered file upload widget

        * WebCore.vcproj/WebCore/WebCore.vcproj: Add RenderFileUpload files,
        remove RenderFileButton files
        * platform/win/TemporaryLinkStubs.cpp: Add stubs for FileChooser, Icon
        (FileChooser::FileChooser):
        (FileChooser::~FileChooser):
        (FileChooser::openFileChooser):
        (FileChooser::basenameForWidth):
        (FileChooser::uploadControlDetaching):
        (FileChooser::chooseFile):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (Icon::Icon):
        (Icon::~Icon):
        (Icon::newIconForFile):
        (Icon::paint):

2006-09-13  Darin Fisher  <darin@chromium.org>

        Reviewed/landed by aroben.

        Fixes http://bugs.webkit.org/attachment.cgi?id=10537
        Webkit WebCore build fails on Windows

        * WebCore.vcproj/WebCore/build-generated-files.sh: export SOURCE_ROOT
        variable

2006-09-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fix Qt/Linux build.

        * CMakeLists.txt: Change SVGZoomEvent.idl location & add RenderFileUploadControl
        * platform/Icon.h: Add wtf/Platform.h include
        * platform/qt/FileChooserQt.cpp: Added as stub. Easy to implement though.
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::~FileChooser):
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth):
        (WebCore::FileChooser::uploadControlDetaching):
        (WebCore::FileChooser::chooseFile):
        * platform/qt/IconQt.cpp: Added as stub.
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):
        (WebCore::Icon::paint):
        * platform/qt/TemporaryLinkStubs.cpp: Remove old RenderFileButton code & some new *Labels needed
        (searchableIndexIntroduction):
        (fileButtonChooseFileLabel):
        (fileButtonNoFileSelectedLabel):

2006-09-12  Adam Roben  <aroben@apple.com>

        Reviewed by eseidel.

        Switch back to passing relative paths to generate-bindings.pl when
        generating JS bindings.

        * DerivedSources.make: Pass in relative paths to generate-bindings.pl
        * bindings/scripts/CodeGenerator.pm: Make ScanDirectory never call
        chdir and always construct absolute paths instead.

2006-09-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 3244, implement html4 label support.

        Reviewed by mjs, aroben

        Added fast/events/label-focus.html

        * css/html4.css:
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::formElement):
        (WebCore::HTMLLabelElement::setActive):
        (WebCore::HTMLLabelElement::setHovered):
        (WebCore::HTMLLabelElement::defaultEventHandler):
        * html/HTMLLabelElement.h:

2006-09-12  Julien Palmas  <julien.palmas@gmail.com>

        Reviewed by darin.  Landed by eseidel.

        * ksvg2/svg/svgpathparser.cpp:
        (WebCore::SVGPolyParser::parsePoints):

2006-09-11  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Andersca, Maciej, Brady.

        - Implemented intersectsNode in the Range Class
          to be compliant with Mozilla standard

        * dom/Range.cpp:
        (WebCore::Range::intersectsNode):
        * dom/Range.h:
        * dom/Range.idl:

2006-09-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Test: svg/W3C-SVG-1.1/struct-dom-01-b.svg (fixed)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10826
        
        Also finally fixes some long outstanding bugs:
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=9190
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=9229
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10413

        Enable all JavaScript SVG bindings. Builds on Qt/Linux & OSX.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/bindings/js/JSSVGElementWrapperFactory.cpp:
        * ksvg2/svg/SVGAElement.idl: Added.
        * ksvg2/svg/SVGAngle.idl:
        * ksvg2/svg/SVGAnimateColorElement.idl: Added.
        * ksvg2/svg/SVGAnimateElement.idl: Added.
        * ksvg2/svg/SVGAnimateTransformElement.idl: Added.
        * ksvg2/svg/SVGAnimatedLengthList.idl: Added.
        * ksvg2/svg/SVGAnimatedNumberList.idl: Added.
        * ksvg2/svg/SVGAnimatedTransformList.idl: Added.
        * ksvg2/svg/SVGAnimationElement.idl: Added.
        * ksvg2/svg/SVGCircleElement.idl: Added.
        * ksvg2/svg/SVGClipPathElement.idl: Added.
        * ksvg2/svg/SVGColor.idl:
        * ksvg2/svg/SVGComponentTransferFunctionElement.idl: Added.
        * ksvg2/svg/SVGCursorElement.idl: Added.
        * ksvg2/svg/SVGDefsElement.idl: Added.
        * ksvg2/svg/SVGDescElement.idl: Added.
        * ksvg2/svg/SVGEllipseElement.idl: Added.
        * ksvg2/svg/SVGEvent.idl:
        * ksvg2/svg/SVGExternalResourcesRequired.idl: Added.
        * ksvg2/svg/SVGFEBlendElement.idl: Added.
        * ksvg2/svg/SVGFEColorMatrixElement.idl: Added.
        * ksvg2/svg/SVGFEComponentTransferElement.idl: Added.
        * ksvg2/svg/SVGFECompositeElement.idl: Added.
        * ksvg2/svg/SVGFEDiffuseLightingElement.idl: Added.
        * ksvg2/svg/SVGFEDisplacementMapElement.idl: Added.
        * ksvg2/svg/SVGFEDistantLightElement.idl: Added.
        * ksvg2/svg/SVGFEFloodElement.idl: Added.
        * ksvg2/svg/SVGFEFuncAElement.idl: Added.
        * ksvg2/svg/SVGFEFuncBElement.idl: Added.
        * ksvg2/svg/SVGFEFuncGElement.idl: Added.
        * ksvg2/svg/SVGFEFuncRElement.idl: Added.
        * ksvg2/svg/SVGFEGaussianBlurElement.idl: Added.
        * ksvg2/svg/SVGFEImageElement.idl: Added.
        * ksvg2/svg/SVGFEMergeElement.idl: Added.
        * ksvg2/svg/SVGFEMergeNodeElement.idl: Added.
        * ksvg2/svg/SVGFEOffsetElement.idl: Added.
        * ksvg2/svg/SVGFEPointLightElement.idl: Added.
        * ksvg2/svg/SVGFESpecularLightingElement.idl: Added.
        * ksvg2/svg/SVGFESpotLightElement.idl: Added.
        * ksvg2/svg/SVGFETileElement.idl: Added.
        * ksvg2/svg/SVGFETurbulenceElement.idl: Added.
        * ksvg2/svg/SVGFilterElement.idl: Added.
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.idl: Added.
        * ksvg2/svg/SVGFitToViewBox.idl: Added.
        * ksvg2/svg/SVGForeignObjectElement.idl: Added.
        * ksvg2/svg/SVGGElement.idl: Added.
        * ksvg2/svg/SVGGradientElement.idl: Added.
        * ksvg2/svg/SVGImageElement.idl: Added.
        * ksvg2/svg/SVGLangSpace.idl: Added.
        * ksvg2/svg/SVGLength.idl:
        * ksvg2/svg/SVGLengthList.idl: Added.
        * ksvg2/svg/SVGLineElement.idl: Added.
        * ksvg2/svg/SVGLinearGradientElement.idl: Added.
        * ksvg2/svg/SVGLocatable.idl: Added.
        * ksvg2/svg/SVGMarkerElement.idl: Added.
        * ksvg2/svg/SVGMaskElement.idl: Added.
        * ksvg2/svg/SVGNumberList.idl: Added.
        * ksvg2/svg/SVGPaint.idl: Added.
        * ksvg2/svg/SVGPathElement.idl:
        * ksvg2/svg/SVGPathSeg.idl:
        * ksvg2/svg/SVGPatternElement.idl: Added.
        * ksvg2/svg/SVGPointList.idl: Added.
        * ksvg2/svg/SVGPolygonElement.idl: Added.
        * ksvg2/svg/SVGPolylineElement.idl: Added.
        * ksvg2/svg/SVGPreserveAspectRatio.idl:
        * ksvg2/svg/SVGRadialGradientElement.idl: Added.
        * ksvg2/svg/SVGRectElement.idl: Added.
        * ksvg2/svg/SVGRenderingIntent.idl: Added.
        * ksvg2/svg/SVGSVGElement.idl:
        * ksvg2/svg/SVGScriptElement.idl: Added.
        * ksvg2/svg/SVGSetElement.idl: Added.
        * ksvg2/svg/SVGStopElement.idl: Added.
        * ksvg2/svg/SVGStringList.idl: Added.
        * ksvg2/svg/SVGStylable.idl: Added.
        * ksvg2/svg/SVGStyleElement.idl: Added.
        * ksvg2/svg/SVGSwitchElement.idl: Added.
        * ksvg2/svg/SVGSymbolElement.idl: Added.
        * ksvg2/svg/SVGTRefElement.idl: Added.
        * ksvg2/svg/SVGTSpanElement.idl: Added.
        * ksvg2/svg/SVGTests.idl: Added.
        * ksvg2/svg/SVGTextContentElement.idl: Added.
        * ksvg2/svg/SVGTextElement.idl: Added.
        * ksvg2/svg/SVGTextPositioningElement.idl: Added.
        * ksvg2/svg/SVGTitleElement.idl: Added.
        * ksvg2/svg/SVGTransform.idl:
        * ksvg2/svg/SVGTransformList.idl: Added.
        * ksvg2/svg/SVGTransformable.idl: Added.
        * ksvg2/svg/SVGURIReference.idl: Added.
        * ksvg2/svg/SVGUnitTypes.idl: Added.
        * ksvg2/svg/SVGUseElement.idl: Added.
        * ksvg2/svg/SVGViewElement.idl: Added.
        * ksvg2/svg/SVGZoomAndPan.idl: Added.
        * ksvg2/svg/SVGZoomEvent.idl: Added.

2006-09-12  Adam Roben  <aroben@apple.com>

        Reviewed by timo, ggaren.

        Make Icon ref-counted.

        * platform/FileChooser.h: Store m_icon as a RefPtr instead of
        auto_ptr.
        * platform/Icon.h: Inherit from Shared<Icon>
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::chooseFile): Update m_icon usage
        * platform/mac/IconMac.mm:
        (WebCore::Icon::newIconForFile): Return a RefPtr instead of an
        auto_ptr

=== Safari-521.26 ===

2006-09-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Anders.

        Add exception codes to SVGList functions, adjust all code using it.

        Move SVGPaintType enums from ksvg.h into SVGPaint (needed for js generation)
        Move SVGUnitTypes enums from ksvg.h into it's own file SVGUnitType.h (ditto)
        Move SVGRenderingIntent enums from ksvg.h into it's own file SVGRenderingIntent.h (ditto)
        Move SVGZoomAndPan enums from ksvg.h into SVGSVGElement (ditto)
        Move SVGFE* related enums into their respecitive classes.

        Fix JSSVGNumber to operator on doubles, instead of floats.

        * ksvg2/bindings/js/JSSVGNumber.cpp:
        (WebCore::getJSSVGNumber):
        * ksvg2/bindings/js/JSSVGNumber.h:
        (WebCore::JSSVGNumber::JSSVGNumber):
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGPaint):
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        (StyleFillData::operator==):
        * ksvg2/ksvg.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::isFilled):
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::isStroked):
        (WebCore::KSVGPainterFactory::strokePaintServer):
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        (WebCore::SVGAnimateTransformElement::parseMappedAttribute):
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (SVGAnimationElement::getSimpleDuration):
        (SVGAnimationElement::parseMappedAttribute):
        (SVGAnimationElement::setTargetAttribute):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::SVGClipPathElement):
        (SVGClipPathElement::parseMappedAttribute):
        (SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (SVGComponentTransferFunctionElement::transferFunction):
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        (WebCore::SVGComponentTransferFunctionElement::):
        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::dispatchZoomEvent):
        (WebCore::SVGDocument::dispatchScrollEvent):
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::parseMappedAttribute):
        (WebCore::SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEBlendElement.h:
        (WebCore::SVGFEBlendElement::):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (SVGFEColorMatrixElement::parseMappedAttribute):
        (SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        (WebCore::SVGFEColorMatrixElement::):
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::parseMappedAttribute):
        (WebCore::SVGFEComponentTransferElement::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (SVGFECompositeElement::parseMappedAttribute):
        (SVGFECompositeElement::filterEffect):
        * ksvg2/svg/SVGFECompositeElement.h:
        (WebCore::SVGFECompositeElement::):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (SVGFEDisplacementMapElement::parseMappedAttribute):
        (SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        (WebCore::SVGFEDisplacementMapElement::):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::parseMappedAttribute):
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (SVGFEGaussianBlurElement::parseMappedAttribute):
        (SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (SVGFEMergeElement::filterEffect):
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        (SVGFEMergeNodeElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (SVGFEOffsetElement::parseMappedAttribute):
        (SVGFEOffsetElement::filterEffect):
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (SVGFESpecularLightingElement::parseMappedAttribute):
        (SVGFESpecularLightingElement::filterEffect):
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::parseMappedAttribute):
        (WebCore::SVGFETileElement::filterEffect):
        * ksvg2/svg/SVGFETileElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.h:
        (WebCore::SVGFETurbulenceElement::):
        * ksvg2/svg/SVGFilterElement.cpp:
        (SVGFilterElement::SVGFilterElement):
        (SVGFilterElement::parseMappedAttribute):
        (SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::SVGGradientElement):
        (SVGGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::):
        * ksvg2/svg/SVGHelper.cpp:
        (WebCore::SVGHelper::ParseSeperatedList):
        * ksvg2/svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGList.h:
        (WebCore::SVGListBase::clear):
        (WebCore::SVGListBase::initialize):
        (WebCore::SVGListBase::getItem):
        (WebCore::SVGListBase::insertItemBefore):
        (WebCore::SVGListBase::replaceItem):
        (WebCore::SVGListBase::removeItem):
        (WebCore::SVGListBase::appendItem):
        * ksvg2/svg/SVGLocatable.cpp:
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMarkerElement.h:
        (WebCore::SVGMarkerElement::):
        * ksvg2/svg/SVGNumberList.cpp:
        (SVGNumberList::parse):
        * ksvg2/svg/SVGPaint.cpp:
        (WebCore::SVGPaint::SVGPaint):
        (WebCore::SVGPaint::uri):
        (WebCore::SVGPaint::setUri):
        (WebCore::SVGPaint::setPaint):
        * ksvg2/svg/SVGPaint.h:
        (WebCore::SVGPaint::):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgMoveTo):
        (WebCore::SVGPathElement::svgLineTo):
        (WebCore::SVGPathElement::svgLineToHorizontal):
        (WebCore::SVGPathElement::svgLineToVertical):
        (WebCore::SVGPathElement::svgCurveToCubic):
        (WebCore::SVGPathElement::svgCurveToCubicSmooth):
        (WebCore::SVGPathElement::svgCurveToQuadratic):
        (WebCore::SVGPathElement::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathElement::svgArcTo):
        (WebCore::SVGPathElement::svgClosePath):
        (WebCore::SVGPathElement::parseMappedAttribute):
        (WebCore::SVGPathElement::toPathData):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseMappedAttribute):
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        * ksvg2/svg/SVGPolyElement.cpp:
        (SVGPolyElement::parseMappedAttribute):
        (SVGPolyElement::svgPolyTo):
        (SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGPolygonElement.cpp:
        (SVGPolygonElement::toPathData):
        * ksvg2/svg/SVGPolylineElement.cpp:
        (SVGPolylineElement::toPathData):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRenderingIntent.h: Added.
        (WebCore::SVGRenderingIntent::):
        (WebCore::SVGRenderingIntent::SVGRenderingIntent):
        (WebCore::SVGRenderingIntent::~SVGRenderingIntent):
        * ksvg2/svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::):
        * ksvg2/svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::type):
        (WebCore::SVGScriptElement::setType):
        (WebCore::SVGScriptElement::parseMappedAttribute):
        * ksvg2/svg/SVGScriptElement.h:
        * ksvg2/svg/SVGStringList.cpp:
        (WebCore::SVGStringList::reset):
        * ksvg2/svg/SVGStyledLocatableElement.cpp:
        (SVGStyledLocatableElement::getTransformToElement):
        * ksvg2/svg/SVGStyledLocatableElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (SVGStyledTransformableElement::parseMappedAttribute):
        (SVGStyledTransformableElement::getTransformToElement):
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):
        * ksvg2/svg/SVGTests.h:
        * ksvg2/svg/SVGTextContentElement.cpp:
        (SVGTextContentElement::getSubStringLength):
        (SVGTextContentElement::getStartPositionOfChar):
        (SVGTextContentElement::getEndPositionOfChar):
        (SVGTextContentElement::getExtentOfChar):
        (SVGTextContentElement::getRotationOfChar):
        (SVGTextContentElement::selectSubString):
        * ksvg2/svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::):
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextElement.h:
        (WebCore::SVGTextElement::getTransformToElement):
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::consolidate):
        (SVGTransformList::concatenate):
        * ksvg2/svg/SVGTransformable.cpp:
        (SVGTransformable::parseTransformAttribute):
        * ksvg2/svg/SVGUnitTypes.h: Added.
        (WebCore::SVGUnitTypes::):
        (WebCore::SVGUnitTypes::SVGUnitTypes):
        (WebCore::SVGUnitTypes::~SVGUnitTypes):
        * ksvg2/svg/SVGUseElement.cpp:
        (SVGUseElement::closeRenderer):
        * ksvg2/svg/SVGViewElement.h:
        (WebCore::SVGViewElement::):
        * ksvg2/svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::SVGZoomAndPan):
        (WebCore::SVGZoomAndPan::parseMappedAttribute):

2006-09-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Adele Peterson.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::doTextFieldCommandFromEvent):
        Don't call textField:doCommandBySelector: with a nil selector. This was indirectly causing a
        (valid) assertion failure in some Safari code.

2006-09-12  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4717841> Setting AXFocused to true does not activate the insertion point in text field

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilitySetValue:forAttribute:]):
        For AXFocus, use focus() if the node is an element, so that selection is set.
        Matches tabbing behavior in text fields and text areas.

2006-09-12  Adam Roben  <aroben@apple.com>

        Reviewed by adele.

        Make uploading work with the new file upload control.

        * css/html4.css: Remove unnecessary style (this is already done in
        RenderFileUpload.cpp)
        * html/HTMLInputElement.cpp: Don't get the button text from the value
        attribute for file controls.
        (WebCore::HTMLInputElement::valueWithDefault):
        * platform/mac/FileChooserMac.mm: Call
        RenderFileUploadControl::valueChanged when the user selects a file.
        (WebCore::FileChooser::chooseFile):
        * rendering/RenderFileUploadControl.cpp: Add valueChanged() method to
        update the form and fire the onChange event.
        (WebCore::RenderFileUploadControl::valueChanged):
        (WebCore::RenderFileUploadControl::updateFromElement):
        * rendering/RenderFileUploadControl.h: Add valueChanged() declaration.

2006-09-12  Adam Roben  <aroben@apple.com>

        Adding rules to html4.css to style the button in file upload controls.

        * css/html4.css:

2006-09-12  Adam Roben  <aroben@apple.com>

        Reviewed many times by darin, hyatt.

        Switch to new engine-based implementation of <input type="file">

        * WebCore.exp: Remove obsolete symbol WebCoreFileButton
        * WebCore.xcodeproj/project.pbxproj: Remove files for old widget-based
        control, add files for new engine-based control
        * css/CSSSelector.cpp: Add support for new
        '-webkit-file-upload-button' pseudo element
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h: Ditto.
        (WebCore::CSSSelector::):
        * css/cssstyleselector.cpp: Ditto.
        (WebCore::CSSStyleSelector::checkOneSelector):
        * html/HTMLInputElement.cpp: Send click events to new control
        (WebCore::HTMLInputElement::select):
        (WebCore::HTMLInputElement::click):
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::valueWithDefault):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLTextFieldInnerElement.h: Add 'virtual' keyword
        (WebCore::HTMLTextFieldInnerElement::shadowParentNode):
        * platform/FileButton.h: Removed.
        * platform/FileChooser.h: Added. This is the replacement for
        FileButton.h
        (WebCore::FileChooser::filename):
        (WebCore::FileChooser::icon):
        (WebCore::FileChooser::uploadControl):
        (WebCore::FileChooser::document):
        * platform/Icon.h: Added new platform-specific class representing a
        file icon.
        * platform/LocalizedStrings.h:
        * platform/mac/FileButtonMac.mm: Removed.
        * platform/mac/FileChooserMac.mm: Added. This is the replacement for
        FileButtonMac.mm
        (-[OpenPanelController initWithFileChooser:]):
        (-[OpenPanelController fileChooserDetachingSoon]):
        (-[OpenPanelController beginSheet]):
        (-[OpenPanelController chooseFilename:]):
        (-[OpenPanelController cancel]):
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::~FileChooser):
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth):
        (WebCore::FileChooser::uploadControlDetaching):
        (WebCore::FileChooser::chooseFile):
        * platform/mac/IconMac.mm: Added.
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):
        (WebCore::Icon::paint):
        * platform/mac/LocalizedStringsMac.mm: Call across bridge to get
        localized strings.
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        * rendering/RenderButton.cpp: Extract method setText() from
        updateFromElement.
        (WebCore::RenderButton::updateFromElement):
        (WebCore::RenderButton::setText):
        * rendering/RenderButton.h: Add declaration for new setText method.
        * rendering/RenderFileButton.cpp: Removed.
        * rendering/RenderFileButton.h: Removed.
        * rendering/RenderFileUploadControl.cpp: Added. This is the
        replacement for RenderFileButton.cpp.
        (WebCore::RenderFileUploadInnerFileBox::renderName):
        (WebCore::HTMLFileUploadInnerButtonElement::isShadowNode):
        (WebCore::HTMLFileUploadInnerButtonElement::shadowParentNode):
        (WebCore::RenderFileUploadControl::RenderFileUploadControl):
        (WebCore::RenderFileUploadControl::~RenderFileUploadControl):
        (WebCore::RenderFileUploadControl::setStyle):
        (WebCore::RenderFileUploadControl::updateIconAndFilename):
        (WebCore::RenderFileUploadControl::click):
        (WebCore::RenderFileUploadControl::updateFromElement):
        (WebCore::RenderFileUploadControl::maxFilenameWidth):
        (WebCore::RenderFileUploadControl::createButtonStyle):
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadInnerFileBox::RenderFileUploadInnerFileBox):
        (WebCore::RenderFileUploadInnerFileBox::setStyle):
        (WebCore::RenderFileUploadInnerFileBox::layout):
        (WebCore::RenderFileUploadInnerFileBox::setHasIcon):
        (WebCore::RenderFileUploadInnerFileBox::setFilename):
        (WebCore::RenderFileUploadInnerFileBox::calcMinMaxWidth):
        (WebCore::HTMLFileUploadInnerButtonElement::HTMLFileUploadInnerButtonElement):
        (WebCore::HTMLFileUploadInnerButtonElement::createRenderer):
        * rendering/RenderFileUploadControl.h: Added. This is the replacement
        for RenderFileButton.h.
        (WebCore::RenderFileUploadControl::renderName):
        * rendering/RenderStyle.cpp: Add support for
        -webkit-file-upload-button pseudo element.
        (WebCore::):
        (WebCore::pseudoBit):
        * rendering/RenderStyle.h: Ditto.
        (WebCore::RenderStyle::):

2006-09-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John Sullivan.

        Do the plugin object cleanup in Frame::clear instead of setView.
        
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::setView):
        (WebCore::FrameMac::cleanupPluginObjects):
        * page/Frame.cpp:
        (WebCore::Frame::clear):
        * page/Frame.h:

2006-09-12  Darin Fisher  <darin@chromium.org>

        Reviewed/landed by aroben.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10822
        windows build is busted

        * WebCore.vcproj/WebCore/WebCore.vcproj: Add missing
        JSRangeException.{cpp,h} to project

2006-09-12  David Hyatt  <hyatt@apple.com>

        Fix fieldsets so that they properly expand to enclose overhanging floats
        when the fieldset has auto height.  This is a nifty undocumented behavior
        of the fieldset element.  The bug is 3898.

        Reviewed by mjs

        Added fast/forms/fieldset-with-float.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderFieldset.h:
        (WebCore::RenderFieldset::renderName):
        (WebCore::RenderFieldset::expandsToEncloseOverhangingFloats):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::expandsToEncloseOverhangingFloats):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::expandsToEncloseOverhangingFloats):

2006-09-11  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.
        
        REGRESSION: When dragging a link on a page, the selected link doesn't display it's name or URL
        http://bugs.webkit.org/show_bug.cgi?id=10819
        http://bugs.webkit.org/show_bug.cgi?id=10814

        No test cases were harmed in the coding of the patch.

        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):

2006-09-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 8126, column widths apply to the border boxes of cells.

        Reviewed by aroben

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColWidth):

2006-09-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Adele.

        Fix Qt/Linux build.

        * CMakeLists.txt: Add dom/RangeException.idl to build & fix feature defines.

2006-09-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

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

        This finally fixes the SVGAnimated* classes JS bindings!

        - Move all SVGAnimated*.idl files from ksvg2/bindings/idl/svg to ksvg2/svg
        - Adjust XCode/Qt build files to generate the new idl files

        - Remove all SVGAnimated* primitives cpp implementations (Angle/Boolean/Color/Enumeration/Integer/Length/
                                                                  LengthList/Number/NumberList/PreserveAspectRatio/
                                                                  Rect/String/TransformList)

        - Remove unneeded methods from CodeGenerator.pm and add new helper function: IsSVGAnimatedType
        - Adjust CodeGeneratorJS.pm to the new SVGAnimated* tear-off concept

        - Add two new macros: ANIMATED_PROPERTY_EMPTY_DECLARATIONS / ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
          This is used to fix multiple-inheritance issues in SVG with properties,
          similar like SVGTests::isValid() was fixed.

        - Rewrote SVGList using WTF::Vector, instead of DeprecatedPtrList and killed DOMList.
          (SVGAnimated*Lists work again now)

        - Adjust macros in SVGElement to create the "*Animated" tear-off classes.

        - Adjust all SVG classes which use the ANIMATED macros to include the ClassName as first param in the header.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::adjustRectsForAspectRatio):
        (WebCore::RenderSVGImage::paint):
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::translationForAttributes):
        * ksvg2/ksvg.h:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::FloatRect):
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        (WebCore::SVGAnimatedTemplate::~SVGAnimatedTemplate):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (SVGComponentTransferFunctionElement::transferFunction):
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElementInstanceList.cpp:
        (WebCore::SVGElementInstanceList::SVGElementInstanceList):
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (SVGFEColorMatrixElement::parseMappedAttribute):
        (SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFETileElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::SVGGradientElement):
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGHelper.cpp:
        (WebCore::SVGHelper::PercentageOfViewport):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLength.cpp:
        * ksvg2/svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::SVGLengthList):
        (WebCore::SVGLengthList::parse):
        * ksvg2/svg/SVGLengthList.h:
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGList.h:
        (WebCore::SVGListBase::SVGListBase):
        (WebCore::SVGListBase::~SVGListBase):
        (WebCore::SVGListBase::numberOfItems):
        (WebCore::SVGListBase::clear):
        (WebCore::SVGListBase::initialize):
        (WebCore::SVGListBase::getFirst):
        (WebCore::SVGListBase::getLast):
        (WebCore::SVGListBase::getItem):
        (WebCore::SVGListBase::insertItemBefore):
        (WebCore::SVGListBase::replaceItem):
        (WebCore::SVGListBase::removeItem):
        (WebCore::SVGListBase::appendItem):
        (WebCore::SVGList::nullItem):
        (WebCore::):
        * ksvg2/svg/SVGLocatable.cpp:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGNumberList.cpp:
        (SVGNumberList::SVGNumberList):
        (SVGNumberList::parse):
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::pathSegList):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::SVGPathSegList):
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPointList.cpp:
        (SVGPointList::SVGPointList):
        * ksvg2/svg/SVGPointList.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        (SVGPolyElement::points):
        (SVGPolyElement::svgPolyTo):
        (SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/SVGPolygonElement.cpp:
        (SVGPolygonElement::toPathData):
        * ksvg2/svg/SVGPolylineElement.cpp:
        (SVGPolylineElement::toPathData):
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        (WebCore::SVGPreserveAspectRatio::):
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::SVGSVGElement::createRenderer):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGScriptElement.h:
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStringList.cpp:
        (WebCore::SVGStringList::SVGStringList):
        (WebCore::SVGStringList::reset):
        * ksvg2/svg/SVGStringList.h:
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGStyledLocatableElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (SVGStyledTransformableElement::SVGStyledTransformableElement):
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGSwitchElement.h:
        * ksvg2/svg/SVGSymbolElement.h:
        * ksvg2/svg/SVGTRefElement.h:
        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::isValid):
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        (SVGTextPositioningElement::SVGTextPositioningElement):
        (SVGTextPositioningElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextPositioningElement.h:
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::SVGTransformList):
        (SVGTransformList::createSVGTransformFromMatrix):
        (SVGTransformList::consolidate):
        (SVGTransformList::concatenate):
        * ksvg2/svg/SVGTransformList.h:
        * ksvg2/svg/SVGURIReference.h:
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGViewElement.h:

2006-09-11  Adam Roben  <aroben@apple.com>

        Rubberstamped by Adele.

        Rename LocalGraphicsContext.{h,mm} to
        LocalCurrentGraphicsContext.{h,mm} to match the class name.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/LocalCurrentGraphicsContext.mm: Added.
        * platform/mac/LocalCurrentGraphicsContext.h: Added.
        * platform/mac/LocalGraphicsContext.h: Removed.
        * platform/mac/LocalGraphicsContext.mm: Removed.
        * rendering/RenderThemeMac.mm: Fix #include to match renamed file

2006-09-11  Brady Eidson  <beidson@apple.com>

        Build fix

        * WebCore.xcodeproj/project.pbxproj:

2006-09-11  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Darin. 

        - Implements comparePoint on the Range class

        - Exposes RangeExceptions in JavaScript

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_binding.cpp:
        * bindings/objc/DOMInternal.mm:
        * dom/Range.cpp:
        (WebCore::Range::comparePoint):
        (WebCore::Range::compareNode):
        * dom/Range.h:
        (WebCore::Range::):
        * dom/Range.idl:
        * dom/RangeException.h: Added.
        (WebCore::):
        * dom/RangeException.idl: Added.
        * page/DOMWindow.idl:

2006-09-11  Adam Roben  <aroben@apple.com>

        Reviewed by timo.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10812
        Move LocalGraphicsContext out of RenderThemeMac

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/LocalGraphicsContext.h: Added.
        * platform/mac/LocalGraphicsContext.mm: Added.
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):
        (WebCore::LocalCurrentGraphicsContext::~LocalCurrentGraphicsContext):
        * rendering/RenderThemeMac.mm:

2006-09-11  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10323
          REGRESSION: javascript: URL containing '\\' gets passed as '//'

        Test: fast/dom/javascript-backslash.html

        * platform/KURL.cpp: (WebCore::KURL::init): Don't do backslash
        substitution in JavaScript URLs.

2006-09-11  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin and Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10792
        Remove the [Exclude=LANGUAGE] idiom from IDL's and code generators 
        for something better

        - Replaces [Exclude=LANGUAGE] idiom with preprocessor #if defined(LANGUAGE)
          idiom.

        - Assorted whitespace changes to IDL files.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMEvents.h:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSValue.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/KeyboardEvent.idl:
        * dom/MouseEvent.idl:
        * dom/NamedNodeMap.idl:
        * dom/NodeFilter.idl:
        * dom/UIEvent.idl:
        * dom/WheelEvent.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLOptionsCollection.idl:

2006-09-11  David Hyatt  <hyatt@apple.com>

        Fix an unwitting victim of the kMin->min change.  calcBlockMinMaxWidth
        was accidentally renamed to calcBlominMaxWidth.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcMinMaxWidth):
        (WebCore::RenderBlock::calcBlockMinMaxWidth):
        * rendering/RenderBlock.h:

2006-09-10  David Hyatt  <hyatt@apple.com>

        Rework the printer font stuff a little bit so that the Font API doesn't
        have to be changed.

        Reviewed by eseidel

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreStringTruncator.mm:
        (truncateString):
        (+[WebCoreStringTruncator widthOfString:font:]):
        * platform/Font.cpp:
        (WebCore::Font::drawSimpleText):
        * platform/Font.h:
        * platform/TextStyle.h:
        (WebCore::TextStyle::TextStyle):
        (WebCore::TextStyle::attemptFontSubstitution):
        (WebCore::TextStyle::setRTL):
        * platform/mac/FontMac.mm:
        (WebCore::m_wordSpacing):
        (WebCore::Font::drawGlyphs):
        * platform/mac/ListBoxMac.mm:
        (itemTextRenderer):
        (groupLabelTextRenderer):
        (-[WebCoreTableView drawRow:clipRect:]):
        * platform/mac/PopUpButtonMac.mm:
        (PopUpButton::sizeHint):
        * platform/mac/TextFieldMac.mm:
        (-[NSSearchFieldCell _addStringToRecentSearches:]):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        (WebCoreTextFloatWidth):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):

2006-09-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Small cleanups + future plans

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open): path separator cleanup
        * platform/Image.h: 
     
2006-09-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Added specialized HashTraits

        * platform/IntSizeHash.h:

2006-09-10  Brady Eidson  <beidson@apple.com>

        Forgetting header #define protection is BAAAAAD
        (and re-alphabetized the project file)

        * WebCore.xcodeproj/project.pbxproj:
        * platform/IntSizeHash.h:

2006-09-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Moved the custom IntSize hash out of IconDatabase into a more generally useful file

        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/IconDatabase.h:
        * platform/IntSizeHash.h: Added.

2006-09-10  David Hyatt  <hyatt@apple.com>

        Fix for bug 10801, form controls that get styled suddenly lose their
        intrinsic margins.  Move the intrinsic margin addition code into
        adjustRenderStyle and get it out of the theme code and the old form control
        code.

        Reviewed by aroben

        * css/cssstyleselector.cpp:
        (WebCore::addIntrinsicMargins):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * css/html4.css:
        * rendering/DeprecatedRenderSelect.h:
        (WebCore::DeprecatedRenderSelect::calcReplacedHeight):
        * rendering/DeprecatedSlider.h:
        * rendering/RenderFormElement.cpp:
        (WebCore::RenderFormElement::setStyle):
        * rendering/RenderFormElement.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustButtonStyle):
        (WebCore::RenderThemeMac::adjustTextFieldStyle):
        (WebCore::RenderThemeMac::adjustTextAreaStyle):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):

2006-09-10  Darin Adler  <darin@apple.com>

        - test for http://bugs.webkit.org/show_bug.cgi?id=10547

        * manual-tests/target-test.html: Added.
        * manual-tests/targeted.html: Added.

2006-09-10  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.
        
        Remove a bunch more NSGraphicsContext related code.
        Add a LocalCurrentGraphicsContext to simplify methods which need to call up into AppKit controls (and thus depend on the [NSGraphicsContext currentContext] being set correctly)
        Add an "isPrinting" flag to many of the text drawing functions in order to avoid the need for a GraphicsContext::isPrinting() function.

        No tests were harmed in the making of this patch.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge drawRect:]):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        (WebCore::KRenderingDeviceContextQuartz::cgContext):
        (WebCore::KRenderingDeviceQuartz::isBuffered):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceContextQuartz::KRenderingDeviceContextQuartz):
        (WebCore::KRenderingDeviceContextQuartz::~KRenderingDeviceContextQuartz):
        * kcanvas/device/quartz/QuartzSupport.mm:
        * platform/Font.cpp:
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawText):
        * platform/Font.h:
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        * platform/GraphicsContext.h:
        * platform/mac/FileButtonMac.mm:
        (-[WebFileChooserButton drawRect:]):
        * platform/mac/FontMac.mm:
        (WebCore::ATSULayoutParameters::ATSULayoutParameters):
        (WebCore::ATSULayoutParameters::initialize):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawGlyphs):
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForMisspelling):
        * platform/mac/ListBoxMac.mm:
        (-[WebCoreTableView drawRow:clipRect:]):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderThemeMac.mm:
        (WebCore::WebCoreNSGraphicsContextBridge::WebCoreNSGraphicsContextBridge):
        (WebCore::WebCoreNSGraphicsContextBridge::~WebCoreNSGraphicsContextBridge):
        (WebCore::RenderThemeMac::paintButton):
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintTextArea):

2006-09-09  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by aroben.

        Fixes to work with string API changes.

        * platform/cf/ResourceLoaderCFNet.cpp:
        (WebCore::arrayFromFormData):
        (WebCore::ResourceLoader::start):
        * platform/cf/StringCF.cpp:
        * platform/cf/StringImplCF.cpp:

2006-09-09  David Hyatt  <hyatt@apple.com>

        Fix for Bugzilla bug 5500, scrollLeft/Top/Width/Height properties not supported
        on textarea.  Refactored the DOM getters and setters to go through the renderer
        instead of right to the layer.  The renderer functions are virtual so that the
        text control can subclass and forward to its anonymous div.

        Fix for Bugzilla bug 10719, When positioned objects are sizing using their
        containing block width as a guide, they should not ever use the line width like
        non-positioned objects do.

        Reviewed by aroben

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::scrollLeft):
        (WebCore::Element::scrollTop):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::clientWidth):
        (WebCore::RenderObject::clientHeight):
        (WebCore::RenderObject::scrollWidth):
        (WebCore::RenderObject::scrollHeight):
        (WebCore::RenderObject::scrollLeft):
        (WebCore::RenderObject::scrollTop):
        (WebCore::RenderObject::setScrollLeft):
        (WebCore::RenderObject::setScrollTop):
        (WebCore::RenderObject::hasStaticX):
        (WebCore::RenderObject::hasStaticY):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::clientLeft):
        (WebCore::RenderObject::clientTop):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::scrollWidth):
        (WebCore::RenderTextControl::scrollHeight):
        (WebCore::RenderTextControl::scrollLeft):
        (WebCore::RenderTextControl::scrollTop):
        (WebCore::RenderTextControl::setScrollLeft):
        (WebCore::RenderTextControl::setScrollTop):
        * rendering/RenderTextControl.h:

2006-09-09  David Hyatt  <hyatt@apple.com>

        Implement support for the WinIE clientLeft and clientTop extensions.

        Reviewed by aroben

        * dom/Element.cpp:
        (WebCore::Element::clientLeft):
        (WebCore::Element::clientTop):
        * dom/Element.h:
        * dom/Element.idl:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::clientLeft):
        (WebCore::RenderObject::clientTop):

2006-09-09  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Eric.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10795
        Auto-generate the Objective-C DOM XPath bindings

        - Auto-generates DOMXPathExpression, DOMXPathNSResolver and DOMXPathResult.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMXPath.h:
        * bindings/objc/DOMXPath.mm:
        * bindings/objc/PublicDOMInterfaces.h:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:

2006-09-09  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Eric.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10791
        Even More Objective-C DOM auto-generation cleanup

        - Auto-generate some remaining extension methods for DOMDocument
          and DOMCSSStyleDeclaration.

        - Split DOMHTMLEmbedElement into it's own files.  It can't be
          auto-generated yet because the Objective-C interface is significantly
          different from the implementation interface.  Since HTMLEmbedElement
          is not in the W3C spec, this is somewhat of a gray area.

        - Auto-generate DOMEventListener protocol.

        - Clean up the IDL files by separating the extensions from the
          specified methods and attributes.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMCSS.mm:
        * bindings/objc/DOMEventListener.h: Removed.
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMHTMLEmbedElement.h: Added.
        * bindings/objc/DOMHTMLEmbedElement.mm: Added.
        (-[DOMHTMLEmbedElement align]):
        (-[DOMHTMLEmbedElement setAlign:]):
        (-[DOMHTMLEmbedElement height]):
        (-[DOMHTMLEmbedElement setHeight:]):
        (-[DOMHTMLEmbedElement name]):
        (-[DOMHTMLEmbedElement setName:]):
        (-[DOMHTMLEmbedElement src]):
        (-[DOMHTMLEmbedElement setSrc:]):
        (-[DOMHTMLEmbedElement type]):
        (-[DOMHTMLEmbedElement setType:]):
        (-[DOMHTMLEmbedElement width]):
        (-[DOMHTMLEmbedElement setWidth:]):
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * css/CSSStyleDeclaration.idl:
        * dom/Document.idl:
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/OverflowEvent.idl:
        * dom/UIEvent.idl:
        * dom/WheelEvent.idl:
        * html/HTMLEmbedElement.idl: Added.

2006-09-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim H.
        
        Remove DeprecatedString usage and fix style.
        http://bugs.webkit.org/show_bug.cgi?id=10787

        No tests were harmed in the making of this patch.

        * kcanvas/KCanvasFilters.cpp:
        (WebCore::KCanvasFilterEffect::in):
        (WebCore::KCanvasFilterEffect::setIn):
        (WebCore::KCanvasFilterEffect::result):
        (WebCore::KCanvasFilterEffect::setResult):
        (WebCore::KCanvasFEMerge::externalRepresentation):
        * kcanvas/KCanvasFilters.h:
        (WebCore::KCanvasFEBlend::in2):
        (WebCore::KCanvasFEBlend::setIn2):
        (WebCore::KCanvasFEComposite::in2):
        (WebCore::KCanvasFEComposite::setIn2):
        (WebCore::KCanvasFEDisplacementMap::in2):
        (WebCore::KCanvasFEDisplacementMap::setIn2):
        (WebCore::KCanvasFEMerge::mergeInputs):
        (WebCore::KCanvasFEMerge::setMergeInputs):
        * kcanvas/KCanvasResources.cpp:
        (WebCore::KCanvasResource::idInRegistry):
        (WebCore::KCanvasResource::setIdInRegistry):
        (WebCore::getResourceById):
        * kcanvas/KCanvasResources.h:
        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::getAbsoluteRepaintRect):
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::getAbsoluteRepaintRect):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):
        * kcanvas/device/KRenderingPaintServer.h:
        (WebCore::KRenderingPaintServer::idInRegistry):
        (WebCore::KRenderingPaintServer::setIdInRegistry):
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::imageForName):
        (WebCore::KCanvasFilterQuartz::setImageForName):
        (WebCore::KCanvasFEMergeQuartz::getCIFilter):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.cpp:
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/ecma/GlobalObject.cpp:
        (GlobalObject::get):
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/svg/SVGDescElement.cpp:
        (WebCore::SVGDescElement::SVGDescElement):
        (WebCore::SVGDescElement::description):
        * ksvg2/svg/SVGDescElement.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        (WebCore::SVGFEComponentTransferElement::filterEffect):
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (SVGFECompositeElement::SVGFECompositeElement):
        (SVGFECompositeElement::filterEffect):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::SVGFEFloodElement):
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (SVGFEMergeElement::filterEffect):
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (SVGFEOffsetElement::SVGFEOffsetElement):
        (SVGFEOffsetElement::filterEffect):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (SVGFESpecularLightingElement::filterEffect):
        * ksvg2/svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        (WebCore::SVGFETileElement::filterEffect):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (SVGFETurbulenceElement::SVGFETurbulenceElement):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio):
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        (WebCore::SVGPreserveAspectRatio::getCTM):
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGStyleElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        * ksvg2/svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        (WebCore::SVGViewElement::parseMappedAttribute):
        * ksvg2/svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::SVGZoomAndPan):

2006-09-08  Darin Adler  <darin@apple.com>

        Reviewed by Tim H.

        <rdar://problem/4699166> REGRESSION: Background images in Mail stationery do not load
        
        Fixes the quoting logic. The previous logic did not account for the
        CSS tokenizer's regex character range between * and ~ as valid in URL types.

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

2006-09-09  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=10759
          fast/AppleScript/array.html test failing

        * bridge/mac/WebCoreFrameBridge.mm:
        (aeDescFromJSValue): Convert integer values to typeSInt32 AE descriptors.

2006-09-08  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Replace incorrect fooBaseValue() calls with foo() calls instead.
        http://bugs.webkit.org/show_bug.cgi?id=10746
        
        With the previously broken animation system, we had both base and anim values
        but they were not automatically connected/disconnected when animation started and stopped.
        So the animVals were basically never used (since they were always wrong).
        Now, animVal and baseVal are handled correctly.
        
        There are only 3 places in the code where we will ever need to use the BaseValue accessor variants.
        1. SVGAnimated* DOM bindings
        2. Animation Code
        3. parseMappedAttribute implementations

        * kcanvas/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::relativeBBox):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        (WebCore::RenderSVGImage::translationForAttributes):
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::translationForAttributes):
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::updateFromElement):
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * ksvg2/svg/SVGCircleElement.cpp:
        (SVGCircleElement::parseMappedAttribute):
        (SVGCircleElement::toPathData):
        (SVGCircleElement::pushAttributeContext):
        (SVGCircleElement::hasPercentageValues):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (SVGComponentTransferFunctionElement::transferFunction):
        * ksvg2/svg/SVGCursorElement.cpp:
        (SVGCursorElement::parseMappedAttribute):
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        (WebCore::SVGEllipseElement::toPathData):
        (WebCore::SVGEllipseElement::pushAttributeContext):
        (WebCore::SVGEllipseElement::hasPercentageValues):
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (SVGFEComponentTransferElement::filterEffect):
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (SVGFECompositeElement::filterEffect):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::lightSource):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFEImageElement.cpp:
        (SVGFEImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (SVGFEMergeElement::SVGFEMergeElement):
        (SVGFEMergeElement::filterEffect):
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (SVGFEOffsetElement::filterEffect):
        * ksvg2/svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::SVGFEPointLightElement):
        (WebCore::SVGFEPointLightElement::lightSource):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (SVGFESpecularLightingElement::filterEffect):
        * ksvg2/svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource):
        * ksvg2/svg/SVGFETileElement.cpp:
        (SVGFETileElement::filterEffect):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (SVGFETurbulenceElement::filterEffect):
        * ksvg2/svg/SVGFilterElement.cpp:
        (SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::rebuildStops):
        * ksvg2/svg/SVGHelper.cpp:
        (WebCore::SVGHelper::PercentageOfViewport):
        * ksvg2/svg/SVGLineElement.cpp:
        (SVGLineElement::toPathData):
        (SVGLineElement::pushAttributeContext):
        (SVGLineElement::hasPercentageValues):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::attributeChanged):
        (WebCore::SVGMaskElement::drawMaskerContent):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::pushAttributeContext):
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        (WebCore::SVGPatternElement::getCTM):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::toPathData):
        (WebCore::SVGRectElement::pushAttributeContext):
        (WebCore::SVGRectElement::hasPercentageValues):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        (WebCore::SVGSVGElement::createRenderer):
        * ksvg2/svg/SVGTRefElement.cpp:
        (SVGTRefElement::updateReferencedText):
        * ksvg2/svg/SVGUseElement.cpp:
        (SVGUseElement::closeRenderer):

2006-09-08  Eric Seidel  <eric@webkit.org>

        Reviewed by beth.

        Remove the last vestiges of KDOM (KDOMCSSValue and KDOMCSSValueList)
        http://bugs.webkit.org/show_bug.cgi?id=10778

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGStrokeDasharray):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):

2006-09-07  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin and Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10774
        Auto-generate the Objective-C DOM Traversal bindings

        - Auto-generates DOMNodeIterator and DOMTreeWalker.

        - Splits out DOMNodeFilter into its own file.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMNodeFilter.h: Added.
        * bindings/objc/DOMTraversal.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/Range.idl:
        * dom/TreeWalker.idl:

2006-09-07  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin, landed by Adam.

        Fixes part of bug 10743: Windows build busted.

        * platform/win/FontCacheWin.cpp: Add missing #include, set svn:eol-style to native
        (WebCore::FontCache::getFontLinkInterface):
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/win/FontDataWin.cpp: Ditto.
        (WebCore::FontData::platformWidthForGlyph):
        * platform/win/FontWin.cpp: Add missing #include, band-aid over const problem with GlyphBufferGlyph
        (WebCore::Font::drawGlyphs):
        * platform/win/ResourceLoaderWin.cpp: Add missing #include, change .ascii() to .latin1()
        (WebCore::ResourceLoaderWndProc):
        (WebCore::ResourceLoader::start):

2006-09-07  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10753
        REGRESSION: The beginning of a CSS file is missing

        Test: http/tests/incremental/slow-utf8-css.pl

        * loader/Decoder.cpp:
        (WebCore::Decoder::checkForCSSCharset): Use the same buffering logic as used for HTML.
        (WebCore::Decoder::decode):
        * loader/Decoder.h: Added a return value and a movedDataToBuffer parameter to
        checkForCSSCharset().

2006-09-07  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10766
        Auto-generate the Objective-C DOM Events bindings

        - Auto-generates DOMEvent, DOMKeyboardEvent, DOMMouseEvent, DOMMutationEvent, 
          DOMOverflowEvent, DOMUIEvent, and DOMWheelEvent.
          
        - Splits out DOMEventListener and DOMEventTarget into their own files.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMEventListener.h: Added.
        * bindings/objc/DOMEventTarget.h: Added.
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        (-[DOMEvent WebCore::]):
        (-[DOMEvent _initWithEvent:WebCore::]):
        (+[DOMEvent _eventWith:WebCore::]):
        * bindings/objc/DOMEventsNonstandard.mm: Removed.
        * bindings/objc/DOMNode.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/Event.idl:
        * dom/EventListener.idl: Added.
        * dom/EventTarget.idl: Added.
        * dom/KeyboardEvent.idl:
        * dom/MouseEvent.idl:
        * dom/UIEvent.idl:
        * dom/WheelEvent.idl:

2006-09-07  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9753
        SVG with width and height 100% leaves room for scrollbar on the right.

        Relayout children of svg containers, except svg shapes that do not depend on percentages.

        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::hasPercentageValues):
        * kcanvas/RenderPath.h:
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * ksvg2/svg/SVGCircleElement.cpp:
        (SVGCircleElement::hasPercentageValues):
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::hasPercentageValues):
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGLineElement.cpp:
        (SVGLineElement::hasPercentageValues):
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::hasPercentageValues):
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::hasPercentageValues):

2006-09-06  Brady Eidson <beidson@apple.com>

        Constant renamed in 16250 wasn't changed in each use

        * platform/win/GlyphMapWin.cpp:
        (WebCore::GlyphMap::fillPage):

2006-09-06  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix crashes affecting editing layout tests (regressions from my vector change)

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): Added check for empty vector.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Ditto.

2006-09-06  David Harrison  <harrison@apple.com>

        Reviewed and tweaked by Tim H.

        <rdar://problem/4564955> WebKit doesn't trigger Auto Font Activation

        If we don't find the font in the available fonts list, call [NSFont fontWithName:size:]
        to trigger a search that will include auto activation. No PLT or iBench perf impact.
        No layout tests affected. Not testable in an automated way that will work on all systems.

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]):

2006-09-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Fix Qt/Linux build.

        * CMakeLists.txt: Take out CharacterData.cpp from build / add new Text* files to build.
        * platform/qt/BrowserExtensionQt.cpp: Add wtf/Platform.h include.
        * platform/qt/FontCacheQt.cpp: Add FontData.h include.
        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawGlyphs): Fix constness in reinterpret_cast.
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::markMisspellings): Change "SelectionController" param type to "Selection".
        (WebCore::FrameQt::respondToChangedSelection): Ditto.
        (WebCore::FrameQt::respondToChangedContents): Ditto.
        (WebCore::FrameQt::shouldChangeSelection): Ditto.
        * platform/qt/FrameQt.h: Ditto.
        * platform/qt/ImageQt.cpp:
        (WebCore::Image::supportsType): Fix String->QString conversion.
        * platform/qt/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::add): Fix String->DeprecatedString conversion.
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::handleKeyEvent): Adapt to SelectionController signature changes.
        * platform/qt/qt-encodings.txt: Removed.

2006-09-06  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - http://bugs.webkit.org/show_bug.cgi?id=10675
          tweak font-related headers and convert lists to vectors

        One major change was to greatly reduce the number of files that include Font.h.
        Another was to convert many uses of DeprecatedPtrList/DeprecatedValueList to Vector.

        * WebCore.xcodeproj/project.pbxproj: Added TextStyle.h.

        * bindings/objc/DOM.mm: (-[DOMElement _font]): Changed to not depend on
        Font::getNSFont since a WebCore::Font represents more than one NSFont.

        * bindings/objc/DOMNode.mm: (-[DOMNode lineBoxRects]): Updated to use Vector.
        * bridge/mac/FormDataMac.mm: (WebCore::arrayFromFormData): Ditto.
        * bridge/mac/FrameViewMac.mm: (WebCore::FrameView::updateDashboardRegions): Ditto.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Ditto.
        * dom/Document.cpp:
        (WebCore::Document::dashboardRegions): Ditto.
        (WebCore::Document::setDashboardRegions): Ditto.
        * dom/Document.h: Ditto.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeUnrenderedNodes): Ditto.
        * html/FormDataList.h: Ditto.
        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isFocusable): Ditto.
        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::formData): Ditto.
        * kcanvas/RenderPath.cpp: (WebCore::RenderPath::absoluteRects): Ditto.
        * kcanvas/RenderPath.h: Ditto.
        * kcanvas/RenderSVGImage.cpp: (WebCore::RenderSVGImage::absoluteRects): Ditto.
        * kcanvas/RenderSVGImage.h: Ditto.
        * kcanvas/RenderSVGText.cpp: (WebCore::RenderSVGText::absoluteRects): Ditto.
        * kcanvas/RenderSVGText.h: Ditto.
        * loader/FormData.cpp:
        (WebCore::FormData::flatten): Ditto.
        (WebCore::FormData::flattenToString): Ditto.
        * loader/FormData.h: (WebCore::FormData::elements): Ditto.
        * loader/mac/LoaderFunctionsMac.mm: (WebCore::ServeSynchronousRequest): Ditto.
        * page/Frame.cpp: (WebCore::Frame::markedTextUnderlines): Ditto.
        * page/Frame.h: Ditto.
        * page/FramePrivate.h: Ditto.
        * platform/mac/ResourceLoaderMac.mm: (WebCore::ResourceLoader::start): Ditto.
        * rendering/InlineTextBox.h: Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Ditto.
        (WebCore::InlineTextBox::paintMarkedTextUnderline): Ditto.
        * rendering/RenderContainer.h: Ditto.
        * rendering/RenderContainer.cpp: (WebCore::RenderContainer::lineBoxRects): Ditto.
        * rendering/RenderInline.h: Ditto.
        * rendering/RenderInline.cpp: (WebCore::RenderInline::absoluteRects): Ditto.
        * rendering/RenderObject.h: Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::lineBoxRects): Ditto.
        (WebCore::RenderObject::absoluteRects): Ditto.
        (WebCore::RenderObject::absoluteBoundingBoxRect): Ditto.
        (WebCore::RenderObject::addDashboardRegions): Ditto.
        (WebCore::RenderObject::collectDashboardRegions): Ditto.
        * rendering/RenderStyle.h: Ditto.
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::initialDashboardRegions): Ditto.
        (WebCore::RenderStyle::noneDashboardRegions): Ditto.
        * rendering/RenderText.h: Ditto.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects): Ditto.
        (WebCore::RenderText::lineBoxRects): Ditto.
        * rendering/RenderView.h: Ditto.
        * rendering/RenderView.cpp: (WebCore::RenderView::absoluteRects): Ditto.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::attributedString): Updated to use Vector and changed to not
        depend on getNSFont on a Font.
        (WebCore::FrameMac::fontForSelection): Changed to not depend on Font::getNSFont.
        (WebCore::FrameMac::fontAttributesForSelectionStart): Ditto.
        (WebCore::convertAttributesToUnderlines): Updated to use Vector.
        (WebCore::FrameMac::setMarkedTextRange): Ditto.
        (WebCore::FrameMac::dashboardRegionsDictionary): Ditto.

        * bridge/mac/WebCoreAXObject.mm:
        (boundingBoxRect): Updated to use Vector.
        (AXAttributeStringSetStyle): Changed to not depend on Font::getNSFont.

        * bridge/mac/WebCoreStringTruncator.mm: Updated includes.
        * page/Settings.h: Ditto.
        * platform/mac/WebCoreTextRenderer.mm: Ditto.
        * rendering/EllipsisBox.cpp: Ditto.

        * editing/BreakBlockquoteCommand.cpp: (WebCore::BreakBlockquoteCommand::doApply):
        Updated to use a Vector that we iterate in reverse order instead of a linked list
        that we reverse by prepending elements instead of adding to the end.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Ditto.

        * loader/DocLoader.h: Removed unneeded include of DeprecatedPtrList.h.

        * platform/Font.h: Moved TextStyle to a separate header. Removed Font::getNSFont.
        * platform/Font.cpp: Changed to use const instead of #define.
        (WebCore::Font::width): Overloaded this so we don't have a default parameter, which
        eliminates the need to have TextStyle defined to compiler the Font.h header.

        * platform/TextStyle.h: Added.

        * platform/FontData.h: Added a forward declaration of ATSUStyle so this header
        can stand alone.

        * platform/FontFallbackList.h: Tweaks.
        * platform/FontFallbackList.cpp: Tweaks.

        * platform/FontFamily.h: Removed unneeded NSString declaration. Simplified class by
        using Shared and RefPtr, which resulted in removing many explicit functions.
        * platform/FontFamily.cpp: More of the same.

        * platform/GlyphBuffer.h: Removed unneeded MAX_GLYPH_EXPANSION and GLYPH_BUFFER_SIZE
        macros.

        * platform/GlyphMap.h: Removed unneeded include of GlyphBuffer.h, which was included
        only for the typedef of Glyph; there's no reason to not just repeat that typedef here
        since C++ allows multiple typedefs if they match. Renamed the cGlyphPageSize constant
        to GlyphPage::size.
        * platform/GlyphMap.cpp: Changed NO_BREAK_SPACE and ZERO_WIDTH_SPACE macros into
        constants. Updated for cGlyphPageSize change.
        * platform/mac/GlyphMapMac.cpp: Updated for cGlyphPageSize change.

        * platform/GlyphWidthMap.h: Removed unneeded include of GlyphBuffer.h, which was included
        only for the typedef of Glyph; there's no reason to not just repeat that typedef here
        since C++ allows multiple typedefs if they match. Renamed the cGlyphWidthPageSize constant
        to GlyphWidthPage::size.
        * platform/GlyphWidthMap.cpp: Updated for cGlyphWidthPageSize change.

        * platform/GraphicsContext.h: Removed unneeded include of Font.h. Changed drawText
        function to use overloading instead of default parameters to allow TextStyle to be optional.
        This cuts the dependency on TextStyle.
        * platform/GraphicsContext.cpp: (WebCore::GraphicsContext::drawText): Added overload.

        * platform/Image.h: Removed unneeded forward declaration of IntSize.

        * platform/mac/FontCacheMac.mm: (WebCore::FontCache::getFontDataForCharacters):
        Changed to not depend on Font::getNSFont.
        * platform/mac/ListBoxMac.mm: (-[WebCoreTableView fontChanged]): Ditto.
        * platform/mac/TextFieldMac.mm: (-[NSSearchFieldCell _addStringToRecentSearches:]):
        Ditto.
        * rendering/RenderPopupMenuMac.mm:
        (WebCore::RenderPopupMenuMac::showPopup): Ditto.
        (WebCore::RenderPopupMenuMac::addGroupLabel): Ditto.
        (WebCore::RenderPopupMenuMac::addOption): Ditto.

        * platform/mac/FontDataMac.mm: Fixed includes. Converted a bunch of macros to be
        constants and inline functions instead.

        * platform/mac/FontMac.mm: Fixed includes.
        * platform/mac/PopUpButtonMac.mm: Ditto.
        * rendering/RenderMenuList.cpp: Ditto.
        * rendering/RenderTextControl.cpp: Ditto.

        * platform/mac/WebCoreSystemInterface.h: Fixes so this header stands alone and is
        compatible with all 4 of C, ObjC, C++, ObjC++.

2006-09-05  Darin Fisher  <darin@chromium.org>

        Reviewed/landed by aroben.

        Fixes bug 10743: Windows build is busted.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.h:
        * platform/ResourceLoaderInternal.h:
        * platform/TextEncodingRegistry.cpp:
        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        (WebCore::ResourceLoader::start):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::markMisspellings):
        (FrameWin::shouldChangeSelection):
        (FrameWin::respondToChangedSelection):
        (FrameWin::respondToChangedContents):
        (RenderThemeWin::adjustMenuListStyle):

2006-09-05  Darin Adler  <darin@apple.com>

        - some quick build fixes

        * bridge/mac/WebCoreAXObject.mm: Remove use of WebCore::UChar.
        * bridge/mac/WebCoreFrameBridge.mm: Ditto. Also remove include
        of CharsetNames.h.
        * css/CSSGrammar.y: Remove use of WebCore::UChar.
        * platform/UChar.h: Back out WebCore::UChar for now.

2006-09-05  Darin Adler  <darin@apple.com>

        Reviewed by Alexey.

        - http://bugs.webkit.org/show_bug.cgi?id=10728
          text encodings should work without a numeric ID

        - includes a fix for http://bugs.webkit.org/show_bug.cgi?id=10681
          REGRESSION: Reproducible crash at Wikipedia

        - fixed a bug where link elements would not set the charset properly for
          CSS stylesheets they loaded

        - converted DeprecatedString code paths that are related to decoding web
          pages to use String instead, to ensure that conversion back and forth won't
          hurt performance

        Test: fast/encoding/css-link-charset.html
        Test: fast/forms/form-data-encoding-normalization-overrun.html

        Coverage for encoding issues is pretty good, so we probably don't need more
        tests to land this. Our existing tests did find issues with this patch while
        it was under development. And I suppose it would be nice to have even more tests.

        * platform/TextEncoding.h:
        * platform/TextEncoding.cpp:
        (WebCore::addEncodingName): Added. Used to build up the set used by isJapanese.
        (WebCore::TextEncoding::TextEncoding): Removed boolean "eight bit only" parameter and
        added an overload for String as well as const char*. Simplified because now the only
        data member is m_name -- calls the registry's atomicCanonicalTextEncodingName function
        to make the name canonical (resolve aliases) and atomic (use a single pointer for each
        encoding name so we can compare and hash efficiently).
        (WebCore::TextEncoding::decode): Renamed from toUnicode. Just a simple wrapper on top
        of TextDecoder that can be used when the data to decode is all present at once.
        (WebCore::TextEncoding::encode): Renamed from fromUnicode. Handles the normalization and
        then uses the registry to get a codec to handle the rest.
        (WebCore::TextEncoding::usesVisualOrdering): New implementation that compares with the
        name of the only encoding that uses visual ordering. We blur the concepts a bit so that
        we treat the visual ordering and logical ordering variations as two separate encodings.
        (WebCore::TextEncoding::isJapanese): New implementation that uses a set to efficiently
        determine if an encoding is Japanese.
        (WebCore::TextEncoding::backslashAsCurrencySymbol): New implementation that compares
        with the names of the two encodings that have the strange backslash.
        (WebCore::TextEncoding::closest8BitEquivalent): Added. Replaces the old "eight bit only"
        boolean parameter to the constructor.
        (WebCore::ASCIIEncoding): Added.
        (WebCore::Latin1Encoding): Added.
        (WebCore::UTF16BigEndianEncoding): Added.
        (WebCore::UTF16LittleEndianEncoding): Added.
        (WebCore::UTF8Encoding): Added.
        (WebCore::WindowsLatin1Encoding): Added.

        * platform/TextEncodingRegistry.h: Added.
        * platform/TextEncodingRegistry.cpp: Added. Keeps a table of all the character set
        aliases and names and another of all the codecs and parameters for each name.

        * platform/TextDecoder.h: Added.
        * platform/TextDecoder.cpp: Added. Contains logic to look for a BOM and hand the data
        to the proper codec, based on code that used to be in both the ICU and Mac codecs.

        * platform/StreamingTextDecoder.h: Renamed class to TextCodec. We'll rename
        the files in a later check-in. Moved creation functions into TextEncodingRegistry.h.
        Added typedefs of the registrar function types so classes derived from this one
        can use them without including the TextEncodingRegistry header. Renamed toUnicode
        and fromUnicode to decode and encode. Changed the parameter and return types so that
        the parameters are pointers to the data and the return types are String and CString.
        * platform/StreamingTextDecoder.cpp:
        (WebCore::TextCodec::appendOmittingBOM): Added. Helper function used by multiple
        classes derived from this one.

        * platform/TextCodecLatin1.h: Added.
        * platform/TextCodecLatin1.cpp: Added. Contains logic to handle encoding and decoding
        Windows Latin-1, based on code that used to be in both the ICU and Mac codecs.

        * platform/TextCodecUTF16.h: Added.
        * platform/TextCodecUTF16.cpp: Added. Contains logic to handle encoding and decoding
        UTF-16, based on code that used to be in both the ICU and Mac codecs.

        * platform/StreamingTextDecoderICU.h: Renamed class to TextCodecICU. We'll rename
        the files in a later check-in. Removed all the functions having to do with handling
        BOM, UTF-16, and Latin-1; those are now handled elsewhere. Removed textEncodingSupported
        because that's superseded by the registry. Added registry hook functions.
        * platform/StreamingTextDecoderICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames): Added. Registers all encodings that
        ICU can handle with the "IANA" standard. Also includes a special case for a particular
        type of encoding for Hebrew that uses logical ordering. Also includes aliases that are
        not in ICU but that were historically known to WebKit for encodings that ICU handles. 
        (WebCore::newTextCodecICU): Added. Used by registerCodecs.
        (WebCore::TextCodecICU::registerCodecs): Added. Registers codecs for the same encodings
        as above.
        (WebCore::TextCodecICU::TextCodecICU): Much simplified since this now only handles the
        actual ICU encoding and decoding.
        (WebCore::TextCodecICU::~TextCodecICU): Renamed.
        (WebCore::TextCodecICU::releaseICUConverter): Changed to be a const member function.
        (WebCore::TextCodecICU::createICUConverter): Changed to be a const member function and
        to check if the cached converter can be reused in a simpler way.
        (WebCore::TextCodecICU::decode): Updated for changes to types.
        (WebCore::TextCodecICU::encode): Updated for changes to types, and removed normalization
        since this is now handled by the caller.

        * platform/mac/StreamingTextDecoderMac.h: Renamed class to TextCodecMac. We'll rename
        the files in a later check-in. Removed all the functions having to do with handling
        BOM, UTF-16, and Latin-1; those are now handled elsewhere. Removed textEncodingSupported
        because that's superseded by the registry. Added registry hook functions.
        * platform/mac/StreamingTextDecoderMac.cpp:
        (WebCore::TextCodecMac::registerEncodingNames): Added. Registers encodings based on
        the charset table generated by the make-charset-table.pl perl script.
        (WebCore::newTextCodecMac): Added. Used by registerCodecs.
        (WebCore::TextCodecMac::registerCodecs): Added. Registers codecs for the same encodings
        as above.
        (WebCore::TextCodecMac::TextCodecMac): Much simplified since this now only handles the
        actual TEC/CF encoding and decoding.
        (WebCore::TextCodecMac::~TextCodecMac): Renamed.
        (WebCore::TextCodecMac::releaseTECConverter): Changed to be a const member function.
        (WebCore::TextCodecMac::createTECConverter): Changed to be a const member function.
        (WebCore::TextCodecMac::decode): Updated for changes to types.
        (WebCore::TextCodecMac::encode): Updated for changes to types, and removed normalization
        since this is now handled by the caller.

        * platform/mac/mac-encodings.txt: Removed most of the names in this file. This now
        only includes encodings where we want to use Mac OS X Carbon Text Encoding Converter,
        which is only encodings that are not supported by ICU.
        * platform/make-charset-table.pl: Removed flags from output. We don't use them any more.
        * platform/CharsetData.h: Changed from a platform-independent header into a
        Macintosh-specific one. A later patch should move this and rename it. Also
        subsumes ExtraCFEncodings.h.

        * WebCore.xcodeproj/project.pbxproj: Added new files. Changed the prefix on the
        "make character sets" rule to be kTextEncoding instead of kCFStringEncoding.

        * loader/Decoder.h: Change the default encoding parameter to the constructor to be
        a TextEncoding object. Renamed setEncodingName to setEncoding, and made it take a
        TextEncoding for the encoding. Removed the encodingName and visuallyOrdered functions,
        since TextEncoding supports both directly in a straightforward way. Changed both
        decode and flush functions to return String instead of DeprecatedString. Added a
        number of private functions to factor this class a bit more so it's easier to read.
        Got rid of a number of redundant data members. Changed the buffer to a Vector<char>.
        * loader/Decoder.cpp:
        (WebCore::Decoder::determineContentType): Added. Used by constructor to determine
        the content type based on the passed-in MIME type.
        (WebCore::Decoder::defaultEncoding): Added. Used by constructor to determine the
        default encoding based on the passed in default and the content type.
        (WebCore::Decoder::Decoder): Changed to use the functions above. Also renamed
        m_reachedBody to m_checkedForHeadCharset.
        (WebCore::Decoder::setEncoding): Renamed and changed to take an encoding rather
        than an encoding name.
        (WebCore::Decoder::checkForBOM): Factored out of decode.
        (WebCore::Decoder::checkForCSSCharset): Factored out of decode.
        (WebCore::Decoder::checkForHeadCharset): Factored out of decode.
        (WebCore::Decoder::detectJapaneseEncoding): Factored out of decode.
        (WebCore::Decoder::decode): Refactored so it's no longer one huge function.
        Changed to use the new Vector<char> and the new API for TextDecoder.
        (WebCore::Decoder::flush): Added code to empty out the buffer. Not an issue in
        practice since we don't re-use the decoder after flushing it.

        * platform/UChar.h: Added. Has the type named WebCore::UChar that we'll be switching
        to. We'll switch away from the ICU ::UChar type, because we don't want to be so
        closely tied to ICU -- include this instead of <unicode/umachine.h>.

        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::latin1): Updated for changes to TextEncoding.
        (WebCore::String::utf8): Ditto.
        (WebCore::String::newUninitialized): Added. Gives a way to create a String and
        then write directly into its buffer.

        * platform/StringImpl.h: Changed return value for charactersWithNullTermination to
        be a const UChar*. While it's true that this function changes the underlying
        StringImpl, the characters still shouldn't be modified with the returned pointer.
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::charactersWithNullTermination): Updated for change above.
        (WebCore::StringImpl::newUninitialized): Added. Gives a way to create a StringImpl
        and then write directly into its buffer.

        * platform/CString.h:
        * platform/CString.cpp: (WebCore::CString::newUninitialized): Added. Gives a way
        to create a CString and then write directly into its buffer.

        * bridge/mac/WebCoreFrameBridge.h: Removed textEncoding method, and replaced
        +[WebCoreFrameBridge stringWithData:textEncoding:] with
        -[WebCoreFrameBridge stringWithData:] to avoid having to pass text encoding
        IDs around.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setEncoding:userChosen:]): Removed now-unneeded conversion
        to DeprecatedString.
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        Ditto.
        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]): Ditto.
        (-[WebCoreFrameBridge referrer]): Removed now-unneeded call to getNSString.
        (-[WebCoreFrameBridge stringWithData:]): Added. Asks the document's decoder
        what its encoding is, and decodes using that.
        (+[WebCoreFrameBridge stringWithData:textEncodingName:]): Simplified so it
        no longer involved a text encoding ID number.
        (-[WebCoreFrameBridge smartInsertForString:replacingRange:beforeString:afterString:]):
        Changed to use UChar instead of DeprecatedChar.
        (-[WebCoreFrameBridge documentFragmentWithMarkupString:baseURLString:]): Removed
        now-unneeded conversion to DeprecatedString.
        (-[WebCoreFrameBridge documentFragmentWithText:inContext:]): Ditto.

        * html/HTMLFormElement.cpp:
        (WebCore::encodeCString): Changed parameter to CString.
        (WebCore::HTMLFormElement::formData): Updated code for improvements to TextEncoding.

        * loader/CachedCSSStyleSheet.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet): Fixed mistake where the
        decoder was created without passing in the character set. Also changed from
        DeprecatedString to String.
        (WebCore::CachedCSSStyleSheet::setCharset): More of the same.

        * bindings/js/kjs_window.h: (KJS::ScheduledAction::ScheduledAction): Changed
        to use String instead of DeprecatedString, UChar instead of DeprecatedChar,
        CString instead of DeprecatedCString, etc.
        * bridge/mac/FormDataMac.mm: (WebCore::arrayFromFormData): Ditto.
        * bridge/mac/FrameMac.h: Ditto.
        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::isCharacterSmartReplaceExempt):
        Ditto.
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject helpText]): Ditto.
        (-[WebCoreAXObject value]): Ditto.
        (-[WebCoreAXObject accessibilityDescription]): Ditto.
        (-[WebCoreAXObject doAXStringForTextMarkerRange:]): Ditto.
        * bridge/mac/WebCoreEncodings.mm: (+[WebCoreEncodings decodeData:]): Ditto.
        Also fixed code that does a deref without a ref to use RefPtr instead.
        * bridge/mac/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame evaluateWebScript:]): Ditto.
        * bridge/mac/WebCoreSettings.mm:
        (-[WebCoreSettings setDefaultTextEncoding:]): Ditto.
        * css/CSSImportRule.cpp: (WebCore::CSSImportRule::insertedIntoParent): Ditto.
        * css/cssparser.cpp: (WebCore::CSSParser::lex): Ditto.
        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::setCharset): Ditto.
        (WebCore::Document::write): Ditto.
        (WebCore::Document::determineParseMode): Ditto.
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet): Ditto.
        * dom/XMLTokenizer.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::shouldAllowExternalLoad): Ditto.
        (WebCore::createStringParser): Ditto.
        (WebCore::XMLTokenizer::write): Ditto.
        (WebCore::toString): Ditto.
        (WebCore::handleElementAttributes): Ditto.
        (WebCore::XMLTokenizer::startElementNs): Ditto.
        (WebCore::XMLTokenizer::endElementNs): Ditto.
        (WebCore::XMLTokenizer::characters): Ditto.
        (WebCore::XMLTokenizer::processingInstruction): Ditto.
        (WebCore::XMLTokenizer::cdataBlock): Ditto.
        (WebCore::XMLTokenizer::comment): Ditto.
        (WebCore::XMLTokenizer::internalSubset): Ditto.
        (WebCore::getXHTMLEntity): Ditto.
        (WebCore::externalSubsetHandler): Ditto.
        (WebCore::XMLTokenizer::initializeParserContext): Ditto.
        (WebCore::XMLTokenizer::notifyFinished): Ditto.
        (WebCore::xmlDocPtrForString): Ditto.
        (WebCore::parseXMLDocumentFragment): Ditto.
        (WebCore::attributesStartElementNsHandler): Ditto.
        (WebCore::parseAttributes): Ditto.
        * html/FormDataList.h:
        * html/FormDataList.cpp:
        (WebCore::FormDataList::appendString): Ditto. Also changed to call the
        encoding function by its new name and with new parameters.
        (WebCore::FormDataList::appendFile): Ditto.
        * html/HTMLDocument.h:
        * html/HTMLDocument.cpp:
        (WebCore::parseDocTypePart): Ditto.
        (WebCore::containsString): Ditto.
        (WebCore::parseDocTypeDeclaration): Ditto.
        (WebCore::HTMLDocument::determineParseMode): Ditto.
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::appendFormData): Ditto.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute): Ditto.
        * html/HTMLTokenizer.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler): Ditto.
        (WebCore::HTMLTokenizer::parseTag): Ditto.
        (WebCore::HTMLTokenizer::write): Ditto.
        (WebCore::HTMLTokenizer::finish): Ditto.
        (WebCore::parseHTMLDocumentFragment): Ditto.
        * loader/Cache.h:
        * loader/Cache.cpp:
        (WebCore::Cache::requestStyleSheet): Ditto.
        (WebCore::Cache::requestScript): Ditto.
        * loader/CachedResource.h: Ditto.
        * loader/CachedScript.h:
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript): Ditto.
        (WebCore::CachedScript::ref): Ditto.
        (WebCore::CachedScript::deref): Ditto.
        (WebCore::CachedScript::setCharset): Ditto.
        (WebCore::CachedScript::data): Ditto.
        (WebCore::CachedScript::checkNotify): Ditto.
        * loader/CachedXBLDocument.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::setCharset): Ditto.
        * loader/CachedXSLStyleSheet.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::setCharset): Ditto.
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestStyleSheet): Ditto.
        (WebCore::DocLoader::requestScript): Ditto.
        * loader/DocLoader.h: Ditto.
        * loader/FormData.h:
        * loader/FormData.cpp:
        (WebCore::FormData::FormData): Ditto.
        (WebCore::FormData::appendFile): Ditto.
        (WebCore::FormData::flattenToString): Ditto.
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::setStyleSheet): Ditto.
        (WebCore::getString): Ditto.
        (WebCore::Frame::replaceContentsWithScriptResult): Ditto.
        (WebCore::Frame::executeScript): Ditto.
        (WebCore::Frame::clear): Ditto.
        (WebCore::Frame::write): Ditto.
        (WebCore::Frame::endIfNotLoading): Ditto.
        (WebCore::Frame::baseTarget): Ditto.
        (WebCore::Frame::scheduleRedirection): Ditto.
        (WebCore::Frame::scheduleLocationChange): Ditto.
        (WebCore::Frame::scheduleHistoryNavigation): Ditto.
        (WebCore::Frame::changeLocation): Ditto.
        (WebCore::Frame::redirectionTimerFired): Ditto.
        (WebCore::Frame::encoding): Ditto.
        (WebCore::Frame::submitForm): Ditto.
        (WebCore::Frame::referrer): Ditto.
        (WebCore::Frame::isCharacterSmartReplaceExempt): Ditto.
        (WebCore::Frame::setEncoding): Ditto.
        * page/Settings.h: Ditto.
        * platform/SegmentedString.h: Ditto.
        * platform/SegmentedString.cpp: Ditto.
        * xml/XSLStyleSheet.cpp: (WebCore::XSLStyleSheet::parseString): Ditto.
        * xml/XSLTProcessor.cpp:
        (WebCore::transformTextStringToXHTMLDocumentString): Ditto.
        (WebCore::XSLTProcessor::createDocumentFromSource): Ditto.
        * xml/xmlhttprequest.h:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::open): Ditto.
        (WebCore::XMLHttpRequest::send): Ditto.
        (WebCore::XMLHttpRequest::receivedData): Ditto.

        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::fromUtf8): Updated for changes to TextEncoding.
        (WebCore::DeprecatedString::utf8): Ditto.

        * platform/KURL.h:
        * platform/KURL.cpp:
        (WebCore::KURL::KURL): Updated to overload based on presence or absence of
        TextEncoding rather than having a default.
        (WebCore::KURL::init): Moved body of constructor in here. Updated to use
        the new TextEncoding interface.
        (WebCore::KURL::decode_string): Updated to overload based on presence or
        absence of TextEncoding rather than having a default. Updated to use
        the new TextEncoding interface.
        (WebCore::encodeRelativeString): Updated to use the new TextEncoding interface.

        * platform/Font.cpp: (WebCore::WidthIterator::normalizeVoicingMarks): Fixed
        code to use U_ZERO_ERROR instead of a typecast.

        * bindings/js/kjs_proxy.h: Removed unneeded declaration of DeprecatedString.
        * platform/GraphicsContext.h: Ditto.

        * platform/GraphicsContext.cpp: Removed unneeded include of "DeprecatedString.h".
        * rendering/break_lines.cpp: Ditto.
        * xml/XMLSerializer.cpp: Ditto.

        * platform/mac/FontDataMac.mm: Removed unneeded include of <unicode/unorm.h>.

        * platform/CharsetNames.h: Emptied out this file. A later patch could remove it.
        * platform/CharsetNames.cpp: Ditto.
        * platform/mac/ExtraCFEncodings.h: Ditto.

2006-09-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

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

        -> Remove all SVGAnimated* usage from ksvg2.
        This is all done using a set of macros which live in svg/SVGElement.h
        (ANIMATED_PROPERTY_DECLARATIONS / ANIMATED_PROPERTY_DEFINITIONS).
        Transform all properties to this new concept using Eric ruby script.

        -> Replace all usages of "property()->baseVal()" with "propertyBaseValue()".
        -> Replace all usages of "property()->setBaseVal()" with "setPropertyBaseValue()".

        -> Add "virtual const SVGElement* contextElement() const".
        This concept allows to access the document (needed to access the SVGDocumentExtensions)
        from lowest-base-classes like SVGURIReference / SVGExternalResourcesRequired etc.

        These classes contain this contextElement() function as pure virtual functions.
        The topmost classes (like SVGCircleElement) implement this function with "return this".

        -> Move default value initialization to constructors.
        As the lazy_create usage, which was involved in default property initialization,
        has been removed, we need to do the initialization in the constructor.
        
        This forces us to fix the SVGLength class, as calling viewportElement() from the
        constructor does not work. This SVGLength cleanup is one of the next things to fix.

        * bindings/scripts/CodeGeneratorJS.pm:
        * kcanvas/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::relativeBBox):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        (WebCore::RenderSVGImage::translationForAttributes):
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::translationForAttributes):
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::baseValueMap):
        (WebCore::SVGDocumentExtensions::baseValue):
        (WebCore::SVGDocumentExtensions::setBaseValue):
        (WebCore::SVGDocumentExtensions::hasBaseValue):
        (WebCore::String):
        (WebCore::bool):
        (WebCore::double):
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::updateFromElement):
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseMappedAttribute):
        (WebCore::SVGAElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.h:
        (WebCore::SVGAElement::contextElement):
        * ksvg2/svg/SVGAnimateColorElement.h:
        (WebCore::SVGAnimateColorElement::contextElement):
        * ksvg2/svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::contextElement):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::initialMatrix):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        (WebCore::SVGAnimateTransformElement::contextElement):
        * ksvg2/svg/SVGCircleElement.cpp:
        (SVGCircleElement::SVGCircleElement):
        (SVGCircleElement::parseMappedAttribute):
        (SVGCircleElement::toPathData):
        (SVGCircleElement::pushAttributeContext):
        * ksvg2/svg/SVGCircleElement.h:
        (WebCore::SVGCircleElement::contextElement):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::SVGClipPathElement):
        (SVGClipPathElement::parseMappedAttribute):
        (SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::contextElement):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (SVGComponentTransferFunctionElement::parseMappedAttribute):
        (SVGComponentTransferFunctionElement::transferFunction):
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGCursorElement.cpp:
        (SVGCursorElement::SVGCursorElement):
        (SVGCursorElement::parseMappedAttribute):
        * ksvg2/svg/SVGCursorElement.h:
        (WebCore::SVGCursorElement::contextElement):
        * ksvg2/svg/SVGDefsElement.h:
        (WebCore::SVGDefsElement::contextElement):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        (WebCore::SVGEllipseElement::toPathData):
        (WebCore::SVGEllipseElement::pushAttributeContext):
        * ksvg2/svg/SVGEllipseElement.h:
        (WebCore::SVGEllipseElement::contextElement):
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::SVGExternalResourcesRequired):
        (WebCore::SVGExternalResourcesRequired::parseMappedAttribute):
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (SVGFEBlendElement::SVGFEBlendElement):
        (SVGFEBlendElement::parseMappedAttribute):
        (SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEBlendElement.h:
        (WebCore::SVGFEBlendElement::contextElement):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (SVGFEColorMatrixElement::parseMappedAttribute):
        (SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        (WebCore::SVGFEColorMatrixElement::contextElement):
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        (SVGFEComponentTransferElement::parseMappedAttribute):
        (SVGFEComponentTransferElement::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        (WebCore::SVGFEComponentTransferElement::contextElement):
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (SVGFECompositeElement::SVGFECompositeElement):
        (SVGFECompositeElement::parseMappedAttribute):
        (SVGFECompositeElement::filterEffect):
        * ksvg2/svg/SVGFECompositeElement.h:
        (WebCore::SVGFECompositeElement::contextElement):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        (WebCore::SVGFEDiffuseLightingElement::contextElement):
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (SVGFEDisplacementMapElement::parseMappedAttribute):
        (SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        (WebCore::SVGFEDisplacementMapElement::contextElement):
        * ksvg2/svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::lightSource):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (SVGFEFloodElement::parseMappedAttribute):
        (SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEFloodElement.h:
        (WebCore::SVGFEFloodElement::contextElement):
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (SVGFEGaussianBlurElement::parseMappedAttribute):
        (SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        (WebCore::SVGFEGaussianBlurElement::contextElement):
        * ksvg2/svg/SVGFEImageElement.cpp:
        (SVGFEImageElement::SVGFEImageElement):
        (SVGFEImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEImageElement.h:
        (WebCore::SVGFEImageElement::contextElement):
        * ksvg2/svg/SVGFELightElement.cpp:
        (SVGFELightElement::SVGFELightElement):
        (SVGFELightElement::parseMappedAttribute):
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (SVGFEMergeElement::SVGFEMergeElement):
        (SVGFEMergeElement::filterEffect):
        * ksvg2/svg/SVGFEMergeElement.h:
        (WebCore::SVGFEMergeElement::contextElement):
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        (SVGFEMergeNodeElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        (WebCore::SVGFEMergeNodeElement::contextElement):
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (SVGFEOffsetElement::SVGFEOffsetElement):
        (SVGFEOffsetElement::parseMappedAttribute):
        (SVGFEOffsetElement::filterEffect):
        * ksvg2/svg/SVGFEOffsetElement.h:
        (WebCore::SVGFEOffsetElement::contextElement):
        * ksvg2/svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::lightSource):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (SVGFESpecularLightingElement::parseMappedAttribute):
        (SVGFESpecularLightingElement::filterEffect):
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        (WebCore::SVGFESpecularLightingElement::contextElement):
        * ksvg2/svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource):
        * ksvg2/svg/SVGFETileElement.cpp:
        (SVGFETileElement::parseMappedAttribute):
        (SVGFETileElement::filterEffect):
        * ksvg2/svg/SVGFETileElement.h:
        (WebCore::SVGFETileElement::contextElement):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (SVGFETurbulenceElement::SVGFETurbulenceElement):
        (SVGFETurbulenceElement::parseMappedAttribute):
        (SVGFETurbulenceElement::filterEffect):
        * ksvg2/svg/SVGFETurbulenceElement.h:
        (WebCore::SVGFETurbulenceElement::contextElement):
        * ksvg2/svg/SVGFilterElement.cpp:
        (SVGFilterElement::SVGFilterElement):
        (SVGFilterElement::parseMappedAttribute):
        (SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::contextElement):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        (SVGFilterPrimitiveStandardAttributes::~SVGFilterPrimitiveStandardAttributes):
        (SVGFilterPrimitiveStandardAttributes::parseMappedAttribute):
        (SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::contextElement):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        (WebCore::SVGFitToViewBox::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        (WebCore::SVGForeignObjectElement::parseMappedAttribute):
        * ksvg2/svg/SVGForeignObjectElement.h:
        (WebCore::SVGForeignObjectElement::isValid):
        (WebCore::SVGForeignObjectElement::contextElement):
        * ksvg2/svg/SVGGElement.h:
        (WebCore::SVGGElement::contextElement):
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::SVGGradientElement):
        (SVGGradientElement::parseMappedAttribute):
        (SVGGradientElement::rebuildStops):
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGHelper.cpp:
        (WebCore::SVGHelper::PercentageOfViewport):
        * ksvg2/svg/SVGImageElement.cpp:
        (SVGImageElement::SVGImageElement):
        (SVGImageElement::parseMappedAttribute):
        (SVGImageElement::haveLoadedRequiredResources):
        * ksvg2/svg/SVGImageElement.h:
        (WebCore::SVGImageElement::contextElement):
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/SVGLength.cpp:
        * ksvg2/svg/SVGLineElement.cpp:
        (SVGLineElement::SVGLineElement):
        (SVGLineElement::parseMappedAttribute):
        (SVGLineElement::toPathData):
        (SVGLineElement::pushAttributeContext):
        * ksvg2/svg/SVGLineElement.h:
        (WebCore::SVGLineElement::contextElement):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (SVGLinearGradientElement::SVGLinearGradientElement):
        (SVGLinearGradientElement::parseMappedAttribute):
        (SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGLinearGradientElement.h:
        (WebCore::SVGLinearGradientElement::contextElement):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::setOrientToAuto):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        (WebCore::SVGMarkerElement::canvasResource):
        * ksvg2/svg/SVGMarkerElement.h:
        (WebCore::SVGMarkerElement::contextElement):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::attributeChanged):
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::drawMaskerContent):
        * ksvg2/svg/SVGMaskElement.h:
        (WebCore::SVGMaskElement::contextElement):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * ksvg2/svg/SVGPathElement.h:
        (WebCore::SVGPathElement::isValid):
        (WebCore::SVGPathElement::contextElement):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseMappedAttribute):
        (WebCore::SVGPatternElement::pushAttributeContext):
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        (WebCore::SVGPatternElement::getCTM):
        * ksvg2/svg/SVGPatternElement.h:
        (WebCore::SVGPatternElement::contextElement):
        * ksvg2/svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::contextElement):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::~SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRadialGradientElement.h:
        (WebCore::SVGRadialGradientElement::contextElement):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        (WebCore::SVGRectElement::parseMappedAttribute):
        (WebCore::SVGRectElement::toPathData):
        (WebCore::SVGRectElement::pushAttributeContext):
        * ksvg2/svg/SVGRectElement.h:
        (WebCore::SVGRectElement::contextElement):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::~SVGSVGElement):
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        (WebCore::SVGSVGElement::createRenderer):
        * ksvg2/svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::contextElement):
        * ksvg2/svg/SVGScriptElement.h:
        (WebCore::SVGScriptElement::contextElement):
        * ksvg2/svg/SVGSetElement.h:
        (WebCore::SVGSetElement::contextElement):
        * ksvg2/svg/SVGStopElement.cpp:
        (SVGStopElement::SVGStopElement):
        (SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStylable.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (SVGStyledTransformableElement::SVGStyledTransformableElement):
        (SVGStyledTransformableElement::parseMappedAttribute):
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGSwitchElement.cpp:
        * ksvg2/svg/SVGSwitchElement.h:
        (WebCore::SVGSwitchElement::contextElement):
        * ksvg2/svg/SVGSymbolElement.h:
        (WebCore::SVGSymbolElement::contextElement):
        * ksvg2/svg/SVGTRefElement.cpp:
        (SVGTRefElement::updateReferencedText):
        * ksvg2/svg/SVGTRefElement.h:
        (WebCore::SVGTRefElement::contextElement):
        * ksvg2/svg/SVGTSpanElement.h:
        (WebCore::SVGTSpanElement::contextElement):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (SVGTextContentElement::SVGTextContentElement):
        (SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        (WebCore::SVGTextElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextElement.h:
        (WebCore::SVGTextElement::contextElement):
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        (SVGTextPositioningElement::SVGTextPositioningElement):
        (SVGTextPositioningElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextPositioningElement.h:
        * ksvg2/svg/SVGTransformable.cpp:
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGURIReference.cpp:
        (SVGURIReference::parseMappedAttribute):
        * ksvg2/svg/SVGURIReference.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (SVGUseElement::SVGUseElement):
        (SVGUseElement::parseMappedAttribute):
        (SVGUseElement::closeRenderer):
        * ksvg2/svg/SVGUseElement.h:
        (WebCore::SVGUseElement::contextElement):
        * ksvg2/svg/SVGViewElement.h:
        (WebCore::SVGViewElement::contextElement):

2006-09-05  Eric Seidel  <eric@webkit.org>

        Reviewed by aroben.

        Speed up path parsing by removing string copies.
        http://bugs.webkit.org/show_bug.cgi?id=10722
        
        Tests already cover path parsing.

        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * ksvg2/svg/svgpathparser.cpp:
        (WebCore::skipOptionalSpaces): Added.
        (WebCore::skipOptionalSpacesOrComma): Added.
        (WebCore::parseCoord):
        (WebCore::SVGPolyParser::parsePoints):
        (WebCore::SVGPathParser::parseSVG):

2006-09-05  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10742
        More Objective-C DOM auto-generation cleanup
        
        - Factor out implementation type-getters into their own function 
          and standardize naming as was done for type-makers (ie. HTML 
          and CSS prefixing for method names).

        * bindings/objc/DOMCSS.mm:
        (-[DOMCSSStyleDeclaration getPropertyShorthand:]):
        (-[DOMCSSStyleDeclaration isPropertyImplicit:]):
        (-[DOMCSSStyleDeclaration _CSSStyleDeclaration]):
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLTableCaptionElement _HTMLTableCaptionElement]):
        (-[DOMHTMLTableSectionElement _HTMLTableSectionElement]):
        (-[DOMHTMLTableElement _HTMLTableElement]):
        (-[DOMHTMLTableCellElement _HTMLTableCellElement]):
        (-[DOMHTMLEmbedElement _HTMLEmbedElement]):
        (-[DOMHTMLEmbedElement align]):
        (-[DOMHTMLEmbedElement setAlign:]):
        (-[DOMHTMLEmbedElement height]):
        (-[DOMHTMLEmbedElement setHeight:]):
        (-[DOMHTMLEmbedElement name]):
        (-[DOMHTMLEmbedElement setName:]):
        (-[DOMHTMLEmbedElement src]):
        (-[DOMHTMLEmbedElement setSrc:]):
        (-[DOMHTMLEmbedElement type]):
        (-[DOMHTMLEmbedElement setType:]):
        (-[DOMHTMLEmbedElement width]):
        (-[DOMHTMLEmbedElement setWidth:]):
        * bindings/objc/DOMInternal.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setTypingStyle:withUndoAction:]):
        (-[WebCoreFrameBridge applyStyle:withUndoAction:]):
        (-[WebCoreFrameBridge applyParagraphStyle:withUndoAction:]):
        (-[WebCoreFrameBridge selectionStartHasStyle:]):
        (-[WebCoreFrameBridge selectionHasStyle:]):

2006-09-05  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Removed dead code for password field.

        * platform/mac/TextFieldMac.mm: (-[NSSearchFieldCell _addStringToRecentSearches:]):
        * platform/mac/WebCoreTextField.h:
        * platform/mac/WebCoreTextField.mm:

2006-09-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher
        
        Setup for <rdar://problem/4344550> Misspellings aren't marked after undo delete
        
        Fixes:
        <http://bugs.webkit.org/show_bug.cgi?id=6498>
        SelectionController's setters should notify delegates of selection changes
        
        Moved setSelection from Frame to SelectionController.
        I haven't moved any of the work that's done as a result of a 
        Selection change to SelectionController yet.
        Make fewer uses of SelectionControllers.  They're now only used for 
        the Frame's selection, the Page's drag caret, and functions that
        need to do Selection expansion.

        * bindings/js/kjs_window.cpp:
        (KJS::Selection::getValueProperty):
        (KJS::Selection::toString):
        (KJS::SelectionFunc::callAsFunction):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        (WebCore::FrameMac::dispatchCPPEvent):
        (WebCore::FrameMac::fontForSelection):
        (WebCore::FrameMac::baseWritingDirectionForSelectionStart):
        (WebCore::FrameMac::markMisspellingsInAdjacentWords):
        (WebCore::FrameMac::markMisspellings):
        (WebCore::FrameMac::respondToChangedSelection):
        (WebCore::FrameMac::shouldChangeSelection):
        (WebCore::FrameMac::shouldDeleteSelection):
        (WebCore::FrameMac::respondToChangedContents):
        * bridge/mac/PageMac.mm:
        (WebCore::Page::Page):
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        (-[WebCoreAXObject doAXTextMarkerRangeForLine:]):
        (-[WebCoreAXObject doAXBoundsForTextMarkerRange:]):
        (-[WebCoreAXObject doAXTextMarkerRangeForUnorderedTextMarkers:]):
        (-[WebCoreAXObject doSetAXSelectedTextMarkerRange:]):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge isSelectionEditable]):
        (-[WebCoreFrameBridge isSelectionRichlyEditable]):
        (-[WebCoreFrameBridge selectionState]):
        (-[WebCoreFrameBridge deselectText]):
        (-[WebCoreFrameBridge selectedAttributedString]):
        (-[WebCoreFrameBridge rangeByExpandingSelectionWithGranularity:]):
        (-[WebCoreFrameBridge rangeByAlteringCurrentSelection:direction:granularity:]):
        (-[WebCoreFrameBridge alterCurrentSelection:direction:granularity:]):
        (-[WebCoreFrameBridge rangeByAlteringCurrentSelection:verticalDistance:]):
        (-[WebCoreFrameBridge alterCurrentSelection:verticalDistance:]):
        (-[WebCoreFrameBridge setSelectedDOMRange:affinity:closeTyping:]):
        (-[WebCoreFrameBridge selectedDOMRange]):
        (-[WebCoreFrameBridge selectNSRange:]):
        (-[WebCoreFrameBridge selectedNSRange]):
        (-[WebCoreFrameBridge selectionAffinity]):
        (-[WebCoreFrameBridge replaceSelectionWithText:selectReplacement:smartReplace:]):
        (-[WebCoreFrameBridge setSelectionToDragCaret]):
        (-[WebCoreFrameBridge moveSelectionToDragCaret:smartMove:]):
        (-[WebCoreFrameBridge moveDragCaretToPoint:]):
        (-[WebCoreFrameBridge removeDragCaret]):
        (-[WebCoreFrameBridge dragCaretDOMRange]):
        (-[WebCoreFrameBridge isDragCaretRichlyEditable]):
        (-[WebCoreFrameBridge editableDOMRangeForPoint:]):
        (-[WebCoreFrameBridge ensureSelectionVisible]):
        (-[WebCoreFrameBridge rangeOfCharactersAroundCaret]):
        * bridge/win/PageWin.cpp:
        (WebCore::Page::Page):
        * dom/Document.cpp:
        (WebCore::Document::updateSelection):
        (WebCore::Document::clearSelectionIfNeeded):
        (WebCore::Document::notifyBeforeNodeRemoval):
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        * editing/JSEditor.cpp:
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::canIncreaseSelectionListLevel):
        (WebCore::DecreaseSelectionListLevelCommand::canDecreaseSelectionListLevel):
        * editing/Selection.cpp:
        (WebCore::Selection::setBase):
        (WebCore::Selection::setExtent):
        * editing/Selection.h:
        (WebCore::Selection::extent):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::moveTo):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::nodeWillBeRemoved):
        (WebCore::SelectionController::modify):
        (WebCore::SelectionController::clear):
        (WebCore::SelectionController::setBase):
        (WebCore::SelectionController::setExtent):
        * editing/SelectionController.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::caretRect):
        * editing/VisiblePosition.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * page/Frame.cpp:
        (WebCore::Frame::selectedText):
        (WebCore::Frame::hasSelection):
        (WebCore::Frame::selectionController):
        (WebCore::Frame::dragCaretController):
        (WebCore::Frame::notifyRendererOfSelectionChange):
        (WebCore::Frame::invalidateSelection):
        (WebCore::Frame::clearCaretRectIfNeeded):
        (WebCore::Frame::setFocusNodeIfNeeded):
        (WebCore::Frame::selectionLayoutChanged):
        (WebCore::Frame::caretBlinkTimerFired):
        (WebCore::Frame::paintCaret):
        (WebCore::Frame::paintDragCaret):
        (WebCore::Frame::isPointInsideSelection):
        (WebCore::Frame::selectClosestWordFromMouseEvent):
        (WebCore::Frame::handleMousePressEventDoubleClick):
        (WebCore::Frame::handleMousePressEventTripleClick):
        (WebCore::Frame::handleMousePressEventSingleClick):
        (WebCore::Frame::handleMouseMoveEvent):
        (WebCore::Frame::handleMouseReleaseEvent):
        (WebCore::Frame::selectAll):
        (WebCore::Frame::selectContentsOfNode):
        (WebCore::Frame::shouldChangeSelection):
        (WebCore::Frame::shouldDeleteSelection):
        (WebCore::Frame::isSelectionInPasswordField):
        (WebCore::Frame::appliedEditing):
        (WebCore::Frame::unappliedEditing):
        (WebCore::Frame::reappliedEditing):
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::applyStyle):
        (WebCore::Frame::applyParagraphStyle):
        (WebCore::Frame::selectionListState):
        (WebCore::Frame::selectionHasStyle):
        (WebCore::Frame::selectionComputedStyle):
        (WebCore::Frame::selectFrameElementInParentIfFullySelected):
        (WebCore::Frame::currentForm):
        (WebCore::Frame::revealSelection):
        (WebCore::Frame::centerSelectionInVisibleArea):
        (WebCore::Frame::styleForSelectionStart):
        (WebCore::Frame::setSelectionFromNone):
        (WebCore::Frame::findString):
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        * page/FrameView.cpp:
        (WebCore::FrameView::clear):
        * page/Page.cpp:
        (WebCore::Page::dragCaretController):
        * page/Page.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selectionStart):
        (WebCore::RenderTextControl::selectionEnd):
        (WebCore::RenderTextControl::setSelectionRange):
        (WebCore::RenderTextControl::selectionChanged):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeSelection):

2006-09-05  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Let the engine draw the focus ring for styled menu lists.

        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::supportsFocusRing): Added case for MenulistButtonAppearance.

2006-09-05  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        - Fix for <rdar://problem/4706463> REGRESSION: Must click twice on <select> elements for menu to show

        * rendering/RenderPopupMenuMac.h:
        * rendering/RenderPopupMenuMac.mm:
        (WebCore::RenderPopupMenuMac::showPopup): Moved call to dismiss popup into hidePopup method.
         Now calls RenderMenuList::hidePopup which will update the m_popupIsVisible flag on the menu list before hiding the popup.
        (WebCore::RenderPopupMenuMac::hidePopup): Added.

2006-09-05  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10738
        Consolidate the Objective-C DOM Bindings Internal files into DOMInternal.h

        - Consolidate DOMHTMLInternal.h, DOMCSSInternal.h, DOMEventsInternal.h,
          DOMViewsInternal.h and DOMXPathInternal.h into DOMInternal.h.

        - Rename the "type-makers" (used to make a binding from an implementation 
          type) so that all the HTML ones begin with the prefix HTML.  Did the same
          for the CSS.

        - Auto-generate a couple more methods from DOMExtensions.h.

        - Various cleanups of the Objective-C auto-generation code.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMDocument createCSSStyleDeclaration]):
        * bindings/objc/DOMCSS.mm:
        (+[DOMCSSRuleList _CSSRuleListWith:]):
        (+[DOMCSSRule _CSSRuleWith:]):
        (+[DOMCSSStyleDeclaration _CSSStyleDeclarationWith:]):
        (+[DOMCSSValue _CSSValueWith:]):
        (+[DOMCSSPrimitiveValue _CSSPrimitiveValueWith:]):
        (-[DOMDocument getComputedStyle::]):
        (-[DOMDocument getMatchedCSSRules::]):
        * bindings/objc/DOMCSSInternal.h: Removed.
        * bindings/objc/DOMEvents.mm:
        * bindings/objc/DOMEventsInternal.h: Removed.
        * bindings/objc/DOMEventsNonstandard.mm:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.mm:
        (+[DOMHTMLCollection _HTMLCollectionWith:]):
        (+[DOMHTMLOptionsCollection _HTMLOptionsCollectionWith:]):
        (+[DOMHTMLElement _HTMLElementWith:]):
        (+[DOMHTMLFormElement _HTMLFormElementWith:]):
        (+[DOMHTMLTableCaptionElement _HTMLTableCaptionElementWith:]):
        (+[DOMHTMLTableSectionElement _HTMLTableSectionElementWith:]):
        (+[DOMHTMLTableElement _HTMLTableElementWith:]):
        (+[DOMHTMLTableCellElement _HTMLTableCellElementWith:]):
        * bindings/objc/DOMHTMLAppletElement.mm:
        * bindings/objc/DOMHTMLDocument.mm:
        (-[DOMHTMLDocument body]):
        (-[DOMHTMLDocument images]):
        (-[DOMHTMLDocument applets]):
        (-[DOMHTMLDocument links]):
        (-[DOMHTMLDocument forms]):
        (-[DOMHTMLDocument anchors]):
        * bindings/objc/DOMHTMLInternal.h: Removed.
        * bindings/objc/DOMHTMLOptionElement.mm:
        (-[DOMHTMLOptionElement form]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMRGBColor.mm:
        (setWrapperForRGB):
        (-[DOMRGBColor red]):
        (-[DOMRGBColor green]):
        (-[DOMRGBColor blue]):
        (-[DOMRGBColor alpha]):
        * bindings/objc/DOMUtility.mm:
        (KJS::ScriptInterpreter::createObjcInstanceForValue):
        * bindings/objc/DOMViews.mm:
        (-[DOMAbstractView WebCore::]):
        (-[DOMAbstractView _initWithAbstractView:WebCore::]):
        (+[DOMAbstractView _abstractViewWith:WebCore::]):
        * bindings/objc/DOMViewsInternal.h: Removed.
        * bindings/objc/DOMXPath.mm:
        * bindings/objc/DOMXPathInternal.h: Removed.
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge typingStyle]):
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLLinkElement.idl:

2006-09-05  Steve Falkenburg  <sfalken@apple.com>

        Conditionalize new DOM headers for ObjC only

        * DerivedSources.make:

2006-09-04  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10716
        XMLHttpRequest.responseText is null if HTTP response is empty

        Extended existing tests:
        - http/tests/xmlhttrequest/zero-length-response.html
        - http/tests/xmlhttrequest/zero-length-response-sync.html

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): Initialize responseText to an empty string.
        (WebCore::XMLHttpRequest::open): Reset responseText to an empty string.
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::getValueProperty): Return null rather than undefined
        for nil responseXML.

2006-09-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Bug 10714: ObjC autogeneration needs safe-guards against easily modifying the public API
        http://bugs.webkit.org/show_bug.cgi?id=10714
        
        - New PublicDOMInterfaces.h file is consulted when generating
          the ObjC DOM files. All public DOM class interfaces, properties
          and methods need to be in this file. Anything not in the file will
          be generated into the appropriate private header file. During
          generation if something changed or is missing in the public API
          a build error will occur. New interfaces added to the IDLs files
          will now not automatically be reflected in the public ObjC API.
          Methods commented out in PublicDOMInterfaces.h are pending public
          and will be uncommented once approved.

        - Removed most of the Exclude=ObjC uses from the IDL files. This
          attribute was mostly used to prevent changes to the public headers.

        - Make a new parameter name if the original conflicts with a property name.

        - Simplified the generation code for dealing with exceptions.

        - Moved file opens to WriteData. Files are unlinked before
          being opened to work around a Leopard file truncation bug.

        - Fixed #imports for DOMImplementation to be DOMDOMImplementation.h

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMCSS.h:
        * bindings/objc/DOMCore.h:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTMLInternal.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/PublicDOMInterfaces.h: Added.
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/NamedNodeMap.idl:
        * dom/ProcessingInstruction.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTextAreaElement.idl:

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Continue fixing the build, I forgot this in my previous patch!

        * platform/qt/PathQt.cpp:
        (WebCore::Path::apply):

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fix build on Qt/Linux.

        * CMakeLists.txt:
        * platform/qt/PathQt.cpp:
        (WebCore::Path::transform):

2006-09-04  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10676
        @charset rules not accessible via DOM

        Test: fast/encoding/css-charset-dom.html

        * WebCore.xcodeproj/project.pbxproj: Added CSSCharsetRule.cpp
        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleSheet::getValueProperty):
        Separated Rules and CssRules, since now they behave differently.

        * css/CSSCharsetRule.h: Make the constructor take an encoding.
        * css/CSSCharsetRule.cpp: Added.

        * css/CSSGrammar.y: Create CSSStylesheetRules as necessary.

        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::CSSRuleList):
        * css/CSSRuleList.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):
        * css/CSSStyleSheet.h:
        Skip charset rules in IE compatibility mode.

        * css/StyleBase.h:
        (WebCore::StyleBase::isCharsetRule): Fixed a typo.

        * css/cssparser.cpp:
        (WebCore::CSSParser::createCharsetRule):
        * css/cssparser.h:
        Added createCharsetRule().

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10644
        Let FrameQt operate on a FrameQtClient, just like Win/Mac handle it.

        * CMakeLists.txt:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::~FrameQt):
        (WebCore::FrameQt::openURL):
        (WebCore::FrameQt::submitForm):
        (WebCore::FrameQt::urlSelected):
        * platform/qt/FrameQt.h:
        * platform/qt/FrameQtClient.cpp: Added.
        (WebCore::FrameQtClientDefault::FrameQtClientDefault):
        (WebCore::FrameQtClientDefault::~FrameQtClientDefault):
        (WebCore::FrameQtClientDefault::setFrame):
        (WebCore::FrameQtClientDefault::openURL):
        (WebCore::FrameQtClientDefault::submitForm):
        (WebCore::FrameQtClientDefault::receivedResponse):
        (WebCore::FrameQtClientDefault::receivedData):
        (WebCore::FrameQtClientDefault::receivedAllData):
        * platform/qt/FrameQtClient.h: Added.
        (WebCore::FrameQtClient::~FrameQtClient):

2006-09-04  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Clean-up style and spacing.
        http://bugs.webkit.org/show_bug.cgi?id=10724
        No tests needed, no functional changes.

        * ksvg2/svg/svgpathparser.cpp:
        (WebCore::parseCoord):
        (WebCore::SVGPolyParser::parsePoints):
        (WebCore::SVGPathParser::parseSVG):
        (WebCore::SVGPathParser::calculateArc):
        (WebCore::SVGPathParser::svgLineToHorizontal):
        (WebCore::SVGPathParser::svgLineToVertical):
        (WebCore::SVGPathParser::svgCurveToCubicSmooth):
        (WebCore::SVGPathParser::svgCurveToQuadratic):
        (WebCore::SVGPathParser::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathParser::svgArcTo):

2006-09-04  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=6546
        clipPath data does not respect transforms

        Get the transform from the dom element and adjust
        the clip path with it.

        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::canvasResource):

2006-09-04  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        This code should have gone in as part of:
        http://bugs.webkit.org/show_bug.cgi?id=10696
        It addresses the comments there, also we use double instead
        of float now in calculations.

        * platform/Path.cpp:
        (WebCore::Path::createRoundedRectangle):
        (WebCore::Path::createRectangle):
        (WebCore::Path::createEllipse):
        (WebCore::Path::createCircle):

2006-09-03  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin and Tim H.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10711
          Auto-generate the Objective-C DOM Stylesheet bindings

          Auto-generates DOMMediaList, DOMStyleSheet, and DOMStyleSheetList.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMCSS.mm:
        (+[DOMStyleSheet _styleSheetWith:]):
        (+[DOMCSSStyleSheet _CSSStyleSheetWith:]):
        * bindings/objc/DOMCSSInternal.h:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMObject.mm:
        (-[DOMObject sheet]):
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMStylesheets.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::ScriptInterpreter::createObjcInstanceForValue):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/StyleSheet.idl: Added.
        * css/StyleSheetList.idl: Added.

2006-09-03  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10696
        RenderPathQuartz and RenderPathQt should not be needed

        Cleanup of code related to RenderPath.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasCreator.cpp:
        * kcanvas/KCanvasCreator.h:
        * kcanvas/RenderPath.cpp:
        (WebCore::):
        (WebCore::DrawMarkersData::DrawMarkersData):
        (WebCore::drawMarkerWithData):
        (WebCore::updateMarkerDataForElement):
        (WebCore::drawStartAndMidMarkers):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * kcanvas/RenderPath.h:
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
        * kcanvas/device/qt/KRenderingDeviceQt.h:
        * kcanvas/device/qt/RenderPathQt.cpp:
        (WebCore::RenderPath::strokeContains):
        (WebCore::RenderPath::strokeBBox):
        * kcanvas/device/qt/RenderPathQt.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (WebCore::RenderPath::strokeBBox):
        (WebCore::RenderPath::strokeContains):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        * kcanvas/device/quartz/QuartzSupport.h:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGCircleElement.cpp:
        (SVGCircleElement::toPathData):
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::toPathData):
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGGElement.cpp:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGLineElement.cpp:
        (SVGLineElement::toPathData):
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGPathElement.cpp:
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGPolygonElement.cpp:
        * ksvg2/svg/SVGPolylineElement.cpp:
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::toPathData):
        * ksvg2/svg/SVGSVGElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::createRenderer):
        * ksvg2/svg/SVGSwitchElement.cpp:
        * ksvg2/svg/SVGTextElement.cpp:
        * ksvg2/svg/SVGUseElement.cpp:
        * platform/Path.h:
        (WebCore::):
        * platform/cg/PathCG.cpp:
        (WebCore::CGPathToCFStringApplierFunction):
        (WebCore::CGPathApplierToPathApplier):
        (WebCore::Path::apply):
        (WebCore::Path::transform):
        * platform/qt/PathQt.cpp:
        (WebCore::Path::apply):

2006-09-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Bug 10685: ObjC DOM should have no unnamed parameters
        http://bugs.webkit.org/show_bug.cgi?id=10685

        - The ObjC code generation script now outputs parameter prefixes
          for methods that have more than 1 parameter. This prefix is simply
          the parameter name. Some parameter names have been changed in the IDL
          files to produce better prefixes. If an extended attribute of "ObjCPrefix"
          exists on a parameter we will use that for the prefix.

        - A backwards compatible version of the method is placed in a
          category with a deprecation macro for 10.5 and later. This step only
          happens if the IDL extended attribute "OldStyleObjC" is defined.
          All new functions in IDL should not get this attribute.

        - Made the $interfaceMethodSelector regex in IDLStructure.pm allow "=" so 
          parameter extended attributes can have values.

        - Moved RemoveExcludedAttributesAndFunctions to CodeGenerator.pm
          so it can be shared between the two generators.
          
        - Removed the die when we encounter a getter that uses exceptions.
          Sam Weinig added support for this in an earlier change.

        - Check if $ENV{"MACOSX_DEPLOYMENT_TARGET"} is defined before we compare.
          This caused a perl warning when generating on other platforms.

        - The ObjC generation will not happen on platforms other than Mac OS.
          This is determined by the "OS" env variable Xcode sets. This check
          is in the DerivedSources.make.

        - Added a way to skip generation if the constructor of the specific
          generator returns undef. Not used yet.

        - Many cleanup tweaks in CodeGeneratorObjC.pm.

        - Removed IDL and CSS files from the project's resource copy phase,
          these do no need to be in WebCore's resources. 

        * DerivedSources.make
        * WebCore.xcodeproj/project.pbxproj
        * bindings/scripts/CodeGenerator.pm
        * bindings/scripts/CodeGeneratorJS.pm
        * bindings/scripts/CodeGeneratorObjC.pm
        * bindings/scripts/IDLStructure.pm
        * css/CSSMediaRule.idl
        * css/CSSPrimitiveValue.idl
        * css/CSSStyleDeclaration.idl
        * css/CSSStyleSheet.idl
        * dom/CharacterData.idl
        * dom/DOMImplementation.idl
        * dom/Document.idl
        * dom/Element.idl
        * dom/KeyboardEvent.idl
        * dom/MouseEvent.idl
        * dom/MutationEvent.idl
        * dom/NamedNodeMap.idl
        * dom/UIEvent.idl
        * html/HTMLCanvasElement.idl
        * html/HTMLSelectElement.idl
        * ksvg2/bindings/idl/svg/SVGLengthList.idl
        * ksvg2/bindings/idl/svg/SVGNumberList.idl
        * ksvg2/bindings/idl/svg/SVGPointList.idl
        * ksvg2/bindings/idl/svg/SVGStringList.idl
        * ksvg2/bindings/idl/svg/SVGTextContentElement.idl
        * ksvg2/bindings/idl/svg/SVGTransformList.idl
        * ksvg2/svg/SVGSVGElement.idl
        * page/DOMWindow.idl

2006-09-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=10693
        Convert JavaScript arrays to AppleScript lists

        Test: fast/AppleScript/array.html

        * bridge/mac/WebCoreFrameBridge.mm:
        (aeDescFromJSValue): Added a case for ArrayInstance.

2006-09-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10697
        REGRESSION (r16175): Errors in incremental decoding of UTF-8

        Tests:
        - http/tests/incremental/slow-utf8-html.pl
        - fast/encoding/charset-invalid.html

        * loader/Decoder.cpp:
        (Decoder::Decoder): Ensure that we have a valid encoding. Get its name via TextEncoding, to match
        the logic in setEncodingName().
        (Decoder::setEncodingName): Only set m_encodingName if the encoding is valid. Rely on TextEncoding
        constructor to lowercase it if necessary.
        (Decoder::decode): Use setEncodingName() to apply encoding from BOM. Don't try to ensure the
        validity of encoding - it is enforced by class constructor and setEncodingName().

2006-09-02  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10684
          Auto-generate the Objective-C DOM CSS bindings

          Auto-generates DOMCSSCharsetRule, DOMCSSFontFaceRule, DOMCSSImportRule,
          DOMCSSMediaRule, DOMCSSPageRule, DOMCSSPrimitiveValue, DOMCSSRule,
          DOMCSSRuleList, DOMCSSStyleDeclaration, DOMCSSStyleRule, DOMCSSStyleSheet,
          DOMCSSUnknownRule, DOMCSSValue, DOMCSSValueList, DOMCounter, and DOMRect.

          Splits DOMRGBColor into its own files.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMCSS.h:
        * bindings/objc/DOMCSS.mm:
        (+[DOMCSSStyleSheet _CSSStyleSheetWith:]):
        (+[DOMCSSPrimitiveValue _valueWith:]):
        * bindings/objc/DOMCSSInternal.h:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMRGBColor.h: Added.
        * bindings/objc/DOMRGBColor.mm: Added.
        (getWrapperForRGB):
        (setWrapperForRGB):
        (removeWrapperForRGB):
        (-[DOMRGBColor dealloc]):
        (-[DOMRGBColor finalize]):
        (-[DOMRGBColor red]):
        (-[DOMRGBColor green]):
        (-[DOMRGBColor blue]):
        (-[DOMRGBColor alpha]):
        (-[DOMRGBColor color]):
        (-[DOMRGBColor _initWithRGB:WebCore::]):
        (+[DOMRGBColor _RGBColorWithRGB:WebCore::]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSCharsetRule.idl: Added.
        * css/CSSFontFaceRule.idl: Added.
        * css/CSSImportRule.idl: Added.
        * css/CSSMediaRule.idl: Added.
        * css/CSSPageRule.idl: Added.
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl: Added.
        * css/CSSStyleSheet.idl: Added.
        * css/CSSUnknownRule.idl: Added.
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/RGBColor.idl: Added.
        * css/Rect.idl:
        * css/RectImpl.h:

2006-09-02  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Justin.
        
        http://bugs.webkit.org/show_bug.cgi?id=10579
        AppleStyleCommand::applyBlockStyle crash

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): Prevent a crash by
        making sure that the 'beyondEnd' node is after the start node.

2006-09-02  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Tim H.

        Bug 10454: Unix bakefile fixes
        http://bugs.webkit.org/show_bug.cgi?id=10454

        * WebCoreSources.bkl:
        * platform/gdk/RenderPopupMenuGdk.cpp:
        (WebCore::RenderPopupMenuGdk::RenderPopupMenuGdk):
        * platform/gdk/RenderPopupMenuGdk.h:
        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::createPopupMenu):
        (WebCore::RenderThemeGdk::systemFont):
        * platform/gdk/RenderThemeGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * webcore-base.bkl:

2006-09-02  Adele Peterson  <adele@apple.com>

        Reviewed by Anders.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=10667
          Password: Double-click should select-all to avoid exposing word boundaries

        Test: fast/forms/password-doubleclick-selection.html

        * editing/visible_units.cpp:
        (WebCore::previousBoundary): When searching for boundaries in renderers that use the textSecurity property, 
         convert characters in strings to alpha-numeric characters (in this case, all 'x's) so that every character
         isn't treated as a punctuation boundary.
        (WebCore::nextBoundary): ditto.
        * editing/TextIterator.cpp: (WebCore::SimplifiedBackwardsTextIterator::handleTextNode): Updated to use the renderer's 
          string instead of the node value.  This matches the base class implementation of handleTextNode.

        Code cleanup.
        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplaceSelectionCommand::doApply): 
          Avoid unnecessary check for password field case if the smart replace condition is false.
        * page/Frame.cpp: (WebCore::Frame::mayCopy): Removed duplicate code.  Calls isSelectionInPasswordField now.
        * rendering/RenderText.cpp: (WebCore::RenderText::setText): Updated formatting.

2006-09-01  David Hyatt  <hyatt@apple.com>

        Fix for 10682, refine the FOUC paint suppression logic so that it
        is only triggered when FOUC would really have occurred.

        Reviewed by aroben

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::updateStyleSelector):
        * dom/Document.h:
        (WebCore::Document::haveStylesheetsLoaded):
        (WebCore::Document::):
        (WebCore::Document::didLayoutWithPendingStylesheets):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):

2006-09-01  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin. Updated/landed by Adam.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=10553
        Windows build fixes

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * bridge/win/FrameWin.h:
        * bridge/win/PageWin.cpp:
        (WebCore::Page::Page):
        * platform/win/FontWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::registerCommandForUndo):
        (FrameWin::canPaste):
        (FrameWin::issuePasteAndMatchStyleCommand):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (FrameWin::overrideMediaType):
        (FrameWin::saveDocumentState):
        (FrameWin::respondToChangedContents):
        (FrameWin::handledOnloadEvents):
        (FrameWin::createPlugin):
        (FrameWin::objectContentType):
        (Path::contains):
        (TextField::TextField):
        (RenderPopupMenuWin::hidePopup):
        (RenderThemeWin::paintMenuList):
        (RenderThemeWin::adjustMenuListStyle):
        (CString::CString):
        (CString::data):
        * platform/win/WidgetWin.cpp:
        * rendering/RenderPopupMenuWin.h:

2006-09-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Omernick

        Added an SQLDatabase logging channel.  Changed all SQLDatabase and SQLStatement errors to use this new channel.
        Also, as a popular request from other contributers, added a log for all prepare(), step(), finalize(), and reset()s
        Also, fixed a grammar error in my previous ChangeLog entry.

        * bridge/mac/WebCorePageBridge.mm:
        (initializeLoggingChannelsIfNecessary): Initialize the new channel
        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::setBusyTimeout): Use SQLDatabase logging channel
        (WebCore::SQLDatabase::setBusyHandler): ditto
        (WebCore::SQLDatabase::clearAllTables): ditto
        (WebCore::SQLDatabase::runVacuumCommand): ditto
        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::prepare): Added a log
        (WebCore::SQLStatement::step): ditto
        (WebCore::SQLStatement::finalize): ditto
        (WebCore::SQLStatement::reset): ditto
        (WebCore::SQLStatement::getColumnBlob): Use SQLDatabase logging channel
        (WebCore::SQLStatement::returnTextResults): ditto
        (WebCore::SQLStatement::returnTextResults16): ditto
        (WebCore::SQLStatement::returnIntResults): ditto
        (WebCore::SQLStatement::returnInt64Results): ditto
        (WebCore::SQLStatement::returnDoubleResults): ditto
        * platform/Logging.cpp:
        (WebCore::): Added new logging channel
        * platform/Logging.h: ditto

2006-09-01  Adele Peterson  <adele@apple.com>

        Reviewed by Tim Omernick.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=6990
        Switch to use new text field implementation for <input type="password">

        * css/html4.css: Give input[password] the same style properties as normal text fields.
        * html/HTMLInputElement.cpp: Removed checks for TextFieldAppearance.
        (WebCore::HTMLInputElement::selectionStart):
        (WebCore::HTMLInputElement::selectionEnd):
        (WebCore::HTMLInputElement::setSelectionStart):
        (WebCore::HTMLInputElement::setSelectionEnd):
        (WebCore::HTMLInputElement::select):
        (WebCore::HTMLInputElement::setSelectionRange):
        (WebCore::HTMLInputElement::createRenderer):
        * html/HTMLInputElement.h: (WebCore::HTMLInputElement::isNonWidgetTextField):

2006-09-01  Brady Eidson  <beidson@apple.com>

        Reviewed by John (though Sarge reviewed a previous patch of mine in an attempt to review this one)

        Added some constants for SQL Result Codes to SQLDatabase.h
        This way, users of SQLDatabase can access all necessary SQLite functionality
        without having access to sqlite3.h.
        Also reordered some files in the xcodeproj and some #includes

        * WebCore.xcodeproj/project.pbxproj:  Reordered some files 
        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::writeToDatabase): Use our new result codes
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::sharedIconDatabase): Use our new result codes
        (WebCore::IconDatabase::retainIconForPageURL): Use our new result codes
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup): Use our new result codes
        (WebCore::IconDatabase::addIconForIconURLQuery): Use our new result codes
        (WebCore::IconDatabase::hasIconForIconURLQuery): Use our new result codes
        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::lastError): Moved from header to eliminate dependency on sqlite3.h in header
        (WebCore::SQLDatabase::lastErrorMsg): Ditto
        * loader/icon/SQLDatabase.h: Removed #include <sqlite3.h>
        * loader/icon/SQLStatement.cpp: Added #include <sqlite3.h>
        * loader/icon/SQLStatement.h: Removed #include <sqlite3.h>

2006-09-01  David Hyatt  <hyatt@apple.com>

        Fix for 10680, contrained flexbox is not shrinking flexible children
        properly.  (Fixing in case it's hit by the file upload control.)

        Reviewed by aroben

        Adding 026.html to fast/flexbox.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::allowedChildFlex):

2006-09-01  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Implement support for multiple parents in the SVG idls.

        For class "FooBar" go through all parents recursively,
        collect their attributes & functions & constants and
        add them directly into the class "FooBar".

        (Note: It is NOT enabled by default for now - still some things related to SVGAnimated* need to be solved first)

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/generate-bindings.pl:

2006-09-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by hyatt.  Landed by eseidel.

        Fix build on Linux.

        * CMakeLists.txt: Add platform/CString.cpp.
        * platform/qt/FrameQt.cpp: Correct repsondToChangedContents() signature
        * platform/qt/FrameQt.h:: Correct respondToChangedContents() signature

2006-09-01  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - a few small tweaks to the icon database bridge

        * bridge/mac/WebCoreIconDatabaseBridge.h: Removed unnecessary declarations.
        Renamed sharedBridgeInstance to sharedInstance.
        * bridge/mac/WebCoreIconDatabaseBridge.mm: Put functions inside WebCore namespace.
        (WebCore::IconDatabase::loadIconFromURL): Updated for sharedInstance namespace.

2006-09-01  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4651318> REGRESSION: can't drag library items to widget in Dashcode
        <rdar://problem/4701626> REGRESSION: Unit Converter widget doesn't work convert data in its fields

        jsNull should not be returned as NSNull because existing applications do not
        expect that return value. Return as nil for backwards compatibility.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):

2006-09-01  Alexey Proskuryakov  <ap@nypop.com>

        Release build fix.

        * loader/Decoder.cpp:
        (Decoder::Decoder): Use String::latin1().

2006-09-01  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=5620
        Should only honor encoding from <meta> in HTML

        - http://bugs.webkit.org/show_bug.cgi?id=9783
        An XML declaration without an explicit encoding incorrectly triggers
        UTF-8 encoding in an HTML document

        - http://bugs.webkit.org/show_bug.cgi?id=10155
        CSS2: @charset is not supported
        
        * loader/Decoder.cpp:
        (Decoder::Decoder): Decoder now knows what kind of content it is decoding.
        Also, the browser default encoding can now be passed directly to the constructor,
        to streamline the logic.
        (Decoder::decode): Add support for @charset, differentiate between HTML and XML.
        (Decoder::setEncodingName): Style cleanup.
        (Decoder::encodingName): Ditto.
        (Decoder::flush): Ditto.
        * loader/Decoder.h:
        (WebCore::Decoder::):

        * bridge/mac/WebCoreEncodings.mm: Pass a content type of text/html to Decoder.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        (WebCore::CachedCSSStyleSheet::setCharset):
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedCSSStyleSheet.h:
        Use Decoder instead of TextEncoding::toUnicode() to enable @charset support.

        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::CachedXBLDocument): Pass a content type.
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet): Ditto.
        (WebCore::CachedXSLStyleSheet::data): Flush the decoder to be safe.

        * page/Frame.cpp:
        (WebCore::Frame::write): Pass a content type and a default encoding to 
        the Decoder.
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Pass the output document
        MIME type.
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::receivedData): Ditto.

2006-09-01  Adele Peterson  <adele@apple.com>

        Reviewed by John.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=10580
          Password: New secure text field allows non-Roman text entry

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::setSecureKeyboardEntry): Enable and disable Roman keyboards when switching in and out of this mode.
        (WebCore::FrameMac::isSecureKeyboardEntry): Changed secureKeyboardEntry to isSecureKeyboardEntry.
        * bridge/mac/FrameMac.h: ditto.
        * page/Frame.cpp: (WebCore::Frame::setIsActive): ditto.
        * page/Frame.h: (WebCore::Frame::isSecureKeyboardEntry): ditto.

2006-09-01  Adele Peterson  <adele@apple.com>

        Reviewed by John.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=10665
          Password: Disable smartReplace for new password fields

        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplaceSelectionCommand::doApply):
          Don't smart replace when the selection being replaced is in a password field.

2006-08-31  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10669
          Auto-generate the remaining Objective-C HTML DOM bindings
          
          Auto-generates DOMHTMLAnchorElement, DOMHTMLAreaElement,
          DOMHTMLBaseFontElement, DOMHTMLFontElement, DOMHTMLFrameElement,
          DOMHTMLFrameSetElement, DOMHTMLHRElement, DOMHTMLIFrameElement,
          DOMHTMLImageElement, DOMHTMLMapElement, DOMHTMLModElement,
          DOMHTMLObjectElement, DOMHTMLParamElement, DOMHTMLScriptElement,
          DOMHTMLTableCaptionElement, DOMHTMLTableCellElement,
          DOMHTMLTableColElement, DOMHTMLTableElement, DOMHTMLTableRowElement,
          and DOMHTMLTableSectionElement.  

          Splits DOMHTMLAppletElement and DOMHTMLOptionElement into their own 
          files.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLAnchorElement absoluteLinkURL]):
        (-[DOMHTMLImageElement altDisplayString]):
        (-[DOMHTMLImageElement absoluteImageURL]):
        (-[DOMHTMLImageElement WebCore::]):
        (-[DOMHTMLObjectElement absoluteImageURL]):
        (-[DOMHTMLObjectElement WebCore::]):
        (+[DOMHTMLTableCaptionElement _tableCaptionElementWith:]):
        (-[DOMHTMLTableCaptionElement _tableCaptionElement]):
        (+[DOMHTMLTableSectionElement _tableSectionElementWith:]):
        (-[DOMHTMLTableSectionElement _tableSectionElement]):
        (+[DOMHTMLTableElement _tableElementWith:]):
        (-[DOMHTMLTableElement _tableElement]):
        (+[DOMHTMLTableCellElement _tableCellElementWith:]):
        (-[DOMHTMLTableCellElement _tableCellElement]):
        * bindings/objc/DOMHTMLAppletElement.h: Added.
        * bindings/objc/DOMHTMLAppletElement.mm: Added.
        (-[DOMHTMLAppletElement WebCore::]):
        (-[DOMHTMLAppletElement align]):
        (-[DOMHTMLAppletElement setAlign:]):
        (-[DOMHTMLAppletElement alt]):
        (-[DOMHTMLAppletElement setAlt:]):
        (-[DOMHTMLAppletElement archive]):
        (-[DOMHTMLAppletElement setArchive:]):
        (-[DOMHTMLAppletElement code]):
        (-[DOMHTMLAppletElement setCode:]):
        (-[DOMHTMLAppletElement codeBase]):
        (-[DOMHTMLAppletElement setCodeBase:]):
        (-[DOMHTMLAppletElement height]):
        (-[DOMHTMLAppletElement setHeight:]):
        (-[DOMHTMLAppletElement hspace]):
        (-[DOMHTMLAppletElement setHspace:]):
        (-[DOMHTMLAppletElement name]):
        (-[DOMHTMLAppletElement setName:]):
        (-[DOMHTMLAppletElement object]):
        (-[DOMHTMLAppletElement setObject:]):
        (-[DOMHTMLAppletElement vspace]):
        (-[DOMHTMLAppletElement setVspace:]):
        (-[DOMHTMLAppletElement width]):
        (-[DOMHTMLAppletElement setWidth:]):
        * bindings/objc/DOMHTMLInternal.h:
        * bindings/objc/DOMHTMLOptionElement.h: Added.
        * bindings/objc/DOMHTMLOptionElement.mm: Added.
        (-[DOMHTMLOptionElement WebCore::]):
        (-[DOMHTMLOptionElement form]):
        (-[DOMHTMLOptionElement defaultSelected]):
        (-[DOMHTMLOptionElement setDefaultSelected:]):
        (-[DOMHTMLOptionElement text]):
        (-[DOMHTMLOptionElement index]):
        (-[DOMHTMLOptionElement disabled]):
        (-[DOMHTMLOptionElement setDisabled:]):
        (-[DOMHTMLOptionElement label]):
        (-[DOMHTMLOptionElement setLabel:]):
        (-[DOMHTMLOptionElement selected]):
        (-[DOMHTMLOptionElement setSelected:]):
        (-[DOMHTMLOptionElement value]):
        (-[DOMHTMLOptionElement setValue:]):
        * bindings/objc/DOMPrivate.h:
        * bindings/scripts/CodeGeneratorObjC.pm:

2006-08-31  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        Fixed <rdar://problem/4463870> Switch to use new text field implementation for <isindex>

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isTextField]):
        moved isindex from the list of nonTextInputTypes to the list of textInputTypes
        * css/html4.css:
        added isindex to certain rules that applied to input fields
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::canHaveSelection):
        (WebCore::HTMLInputElement::selectionStart):
        (WebCore::HTMLInputElement::selectionEnd):
        (WebCore::HTMLInputElement::setSelectionStart):
        (WebCore::HTMLInputElement::setSelectionEnd):
        (WebCore::HTMLInputElement::select):
        (WebCore::HTMLInputElement::setSelectionRange):
        (WebCore::HTMLInputElement::createRenderer):
        for the 8 methods above, moved the case for isindex to the same case as text
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isNonWidgetTextField):
        added isindex to this test
        * html/HTMLIsIndexElement.idl:
        HTMLIsIndexElement inherits from HTMLInputElement
        * rendering/RenderLineEdit.cpp:
        (WebCore::RenderLineEdit::RenderLineEdit):
        removed the case for isindex since we changed the renderer type from a RenderLineEdit
        to a RenderTextControl in WebCore::HTMLInputElement::createRenderer()

2006-08-31  David Harrison  <harrison@apple.com>

        Reviewed by Adele.

        <rdar://problem/4708119> REGRESSION: Cannot observe an AXTextField element directly

        ... and most of
        <rdar://problem/4708022> REGRESSION: TextRange-based attributes are missing from text fields
        <rdar://problem/4709515> REGRESSION: Expose text areas

        Remaining work for those two bugs in new bugs:

        <rdar://problem/4712101> Support NSAccessibilityVisibleCharacterRangeAttribute for AXTextField and AXTextArea elements
        <rdar://problem/4712111> Support NSAccessibilityInsertionPointLineNumberAttribute for AXTextArea elements
        <rdar://problem/4712125> Support setting NSAccessibilitySelectedTextAttribute for AXTextField and AXTextArea elements

        * bridge/AXObjectCache.h:
        (WebCore::AXObjectCache::postNotificationToElement):
        * bridge/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postNotificationToElement):
        Removed postNotificationToTopWebArea.
        postNotification now posts to input element or top web area, as appropriate.
        postNotificationToElement posts to the specified element itself.
        
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::respondToChangedContents):
        Take a selection.  Pass the starting position's renderer to postNotification so that postNotification can post to the appropriate input element, if any.
        
        * bridge/mac/WebCoreAXObject.h:
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject isWebArea]):
        (-[WebCoreAXObject isAnchor]):
        (-[WebCoreAXObject isTextRange]):
        New convenience methods.
        
        (-[WebCoreAXObject role]):
        (-[WebCoreAXObject roleDescription])        
        (-[WebCoreAXObject value]):
        (-[WebCoreAXObject accessibilityDescription]):
        Support AXTextField and AXTextArea.

        (-[WebCoreAXObject accessibilityShouldUseUniqueId]):
        Register AXTextField and AXTextArea elements so notifications to them can be observed.
        
        (-[WebCoreAXObject accessibilityIsIgnored]):
        Use new convenience method isWebArea.

        (-[WebCoreAXObject accessibilityAttributeNames]):
        Simplify the array creation.
        Add text range support.
       
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Add text range support.
       
        (-[WebCoreAXObject canSetFocusAttribute]):
        (-[WebCoreAXObject canSetValueAttribute]):
        (-[WebCoreAXObject canSetTextRangeAttributes]):
        New convenience methods.
        
        (-[WebCoreAXObject accessibilityIsAttributeSettable:]):
        (-[WebCoreAXObject accessibilitySetValue:forAttribute:]):
        Add text range support.

        (-[WebCoreAXObject observableObject]):
        New to locate text field or text area to notify.
        
        * dom/Document.cpp:
        (WebCore::Document::updateSelection):
        Post AXSelectedTextChanged notification with new selection's start node.
        postNotification will send it to the input element, if there is one, or the top WebArea.
        
        (WebCore::Document::implicitClose):
        Use postNotificationToElement now that it acts like the old postNotification.
        
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::appliedEditing):
        (WebCore::Frame::unappliedEditing):
        (WebCore::Frame::reappliedEditing):
        Pass the selection of interest to respondToChangedContents.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        Use postNotificationToElement now that it acts like the old postNotification.

2006-08-31  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebCore part of fix for http://bugs.webkit.org/show_bug.cgi?id=10666
        Password: Disallow Spelling, Font, Speech, and Writing Direction context menu

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge isSelectionInPasswordField]): Added.
        * page/Frame.cpp: (WebCore::Frame::isSelectionInPasswordField): Added.
        * page/Frame.h:

2006-08-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O, Hyatt.

        * WebCore.xcodeproj/project.pbxproj:
        Add KURLCFNet.cpp
        
        * platform/KURL.h:
        Get rid of include, add KURL constructor that takes a CFURLRef.
        
        * platform/PlatformString.h:
        * platform/StringImpl.h:
        Get rid of include.
        
        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::KURL):
        Add constructor.
        
        * platform/cf/ResourceLoaderCFNet.cpp:
        Fix includes.
        
        * platform/cf/StringCF.cpp:
        (WebCore::String::createCFString):
        Move this here from PlatformString.h
        
        * platform/cf/StringImplCF.cpp:
        (WebCore::StringImpl::createCFString):
        Fix cast.
        
        * platform/mac/KURLMac.mm:
        Move createCFURL() to KURLCFNet.cpp

2006-08-31 Dave Hyatt <hyatt@apple.com>

        Make ScrollBar.cpp suitable for compiling on Windows by removing the #import.

        Reviewed by adam

        * platform/ScrollBar.cpp:

2006-08-31  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        Cleaned up my last patch after further considerations

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup): Uses the new checkForDanglingPageURLs to check
          for and fix danglers.  Does so in all builds (changed from debug only in my last patch)
        (WebCore::IconDatabase::syncDatabase): Uses the new checkForDanglingPageURLs to check for danglers
        (WebCore::IconDatabase::checkForDanglingPageURLs): This checks and, if asked via an arg, prunes the dangling pageURLs
        * loader/icon/IconDatabase.h:

2006-08-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Add CString. CString is a simple, null-terminated byte buffer that supports data
        sharing. Its main use is to be a better const char*.
        
        Also add latin1 and utf8 methods to String which returns CStrings.
        
        * platform/CString.cpp: Added.
        (WebCore::CString::CString):
        (WebCore::CString::init):
        (WebCore::CString::data):
        (WebCore::CString::length):
        (WebCore::CString::deprecatedCString):
        * platform/CString.h: Added.
        (WebCore::CStringBuffer::CStringBuffer):
        (WebCore::CStringBuffer::data):
        (WebCore::CStringBuffer::length):
        (WebCore::CString::CString):
        (WebCore::CString::operator const char*):
        (WebCore::CString::isNull):
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::latin1):
        (WebCore::String::utf8):

2006-08-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Hyatt

        Previously mentioned ASSERT was hit right away by folks, as we first need to bring their old icon.db into consistency
        Changed the ASSERT to a LOG_ERROR and added a method for debug builds to bring a DB back together.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup): Check for the danglers and prune them out
        (WebCore::IconDatabase::syncDatabase): Check for the danglers and log the error
        (WebCore::IconDatabase::pruneDanglingPageURLs): Prune the danglers
        * loader/icon/IconDatabase.h:

2006-08-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Hyatt

        Fixed an error where an Icon's IconID could change without the change being reflected in the PageURL table,
        causing icons to be pruned before their time and pages to lose their icons.  This is because I misunderstood
        how SQLite handles the "ON CONFLICT REPLACE" condition, which is to delete the row and re-insert instead of 
        perform an update.  Also added an assertion to make sure this doesn't happen again.

        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::writeToDatabase): Instead of one INSERT relying on SQLites conflict handling, broke
          this into an UPDATE attempt followed by the initial INSERT
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::createDatabaseTables): Slight tweak to the database schema to prevent this from happening
          in the future.  Note this change will not cause incompatibility with the current schema, therefore I didn't update
          the official database version number
        (WebCore::IconDatabase::syncDatabase): Added an ASSERT to look for this condition in the future
        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::lastChanges): Added this SQLite accessor to see if an UPDATE command actually changed a row
        * loader/icon/SQLDatabase.h: Ditto

2006-08-31  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10653
          Auto-generate another 20 Objective-C DOM HTML bindings

          Auto-generates DOMHTMLBRElement, DOMHTMLButtonElement, DOMHTMLDListElement, 
          DOMHTMLDirectoryElement, DOMHTMLDivElement, DOMHTMLFieldSetElement, 
          DOMHTMLHeadingElement, DOMHTMLInputElement, DOMHTMLLIElement, DOMHTMLLabelElement,
          DOMHTMLLegendElement, DOMHTMLMenuElement, DOMHTMLOListElement, DOMHTMLOptGroupElement,
          DOMHTMLParagraphElement, DOMHTMLPreElement, DOMHTMLQuoteElement, DOMHTMLSelectElement,
          DOMHTMLTextAreaElement, and DOMHTMLUListElement.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement altDisplayString]):
        (-[DOMHTMLInputElement absoluteImageURL]):
        (-[DOMHTMLInputElement WebCore::]):
        (-[DOMHTMLInputElement _rectOnScreen]):
        (-[DOMHTMLInputElement _replaceCharactersInRange:withString:selectingFromIndex:]):
        (-[DOMHTMLInputElement _selectedRange]):
        (-[DOMHTMLInputElement _setAutofilled:]):
        * bindings/objc/DOMHTMLInternal.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/scripts/CodeGeneratorObjC.pm:

2006-08-31  Adele Peterson  <adele@apple.com>

        Reviewed by John Sullivan.

        Removing use of SPI in favor of Carbon API to enable and disable secure event input.

        * WebCore.exp: Removed wkSecureEventInput and wkSetSecureEventInput.
        * platform/mac/WebCoreSystemInterface.h: ditto.
        * platform/mac/WebCoreSystemInterface.mm: ditto.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::setSecureKeyboardEntry): Uses EnableSecureEventInput and DisableSecureEventInput.
        (WebCore::FrameMac::secureKeyboardEntry): Uses IsSecureEventInputEnabled.

2006-08-30  Brady Eidson  <beidson@apple.com>

        Reviewed by "common sense" (and Maciej)

        Fixed two logging typos

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::syncDatabase):

2006-08-30  Adele Peterson  <adele@apple.com>

        Adding missing nil check for focus node.

        * page/Frame.cpp: (WebCore::Frame::setIsActive):

2006-08-30  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        WebCore part of fix for  http://bugs.webkit.org/show_bug.cgi?id=10575
        Enable secure input mode for new password fields

        * WebCore.exp: Added wkSetSecureEventInput and wkSecureEventInput.
        * platform/mac/WebCoreSystemInterface.h: ditto.
        * platform/mac/WebCoreSystemInterface.mm: ditto.

        * page/Frame.cpp: (WebCore::Frame::setIsActive): Enables and disables secure keyboard entry based on whether the frame becomes active.
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::setSecureKeyboardEntry): Added. Calls wkSetSecureEventInput.
        (WebCore::FrameMac::secureKeyboardEntry): Added. Calls wkSecureEventInput.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dispatchFocusEvent): For password fields, enable secure keyboard entry.
        (WebCore::HTMLInputElement::dispatchBlurEvent): For password fields, disable secure keyboard entry.
        * page/Frame.h:
        (WebCore::Frame::setSecureKeyboardEntry):
        (WebCore::Frame::secureKeyboardEntry):

2006-08-30  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - eliminated the need for UsesPassRefPtr in IDL files
        - got rid of the category mechanism for ObjC generated DOM headers
          (after discussions with Tim H where we decided it's not needed)
        - simplified use of macro inside ObjC generated code

        * ForwardingHeaders/wtf/GetPtr.h: Added.

        * bindings/scripts/CodeGeneratorObjC.pm: Removed code to handle
        categories. Eliminated use of DOM_cast since that's for the protection
        of human programmers -- the script won't make mistakes that it needs
        to catch. Changed macro to always be named IMPL instead of incorporating
        the class name. Use WTF::getPtr to extract the pointer, and removed the
        code that uses .get() to extract the pointer in the PassRefPtr case.

        * dom/Attr.idl: Removed all uses of UsesPassRefPtr and ObjCCatagory.
        * dom/DOMImplementation.idl: Ditto.
        * dom/Document.idl: Ditto.
        * dom/Element.idl: Ditto.
        * dom/NamedNodeMap.idl: Ditto.
        * html/HTMLDocument.idl: Ditto.
        * html/HTMLElement.idl: Ditto.
        * html/HTMLFormElement.idl: Ditto.
        * html/HTMLMapElement.idl: Ditto.
        * html/HTMLSelectElement.idl: Ditto.
        * html/HTMLTableElement.idl: Ditto.
        * html/HTMLTableRowElement.idl: Ditto.
        * html/HTMLTableSectionElement.idl: Ditto.

2006-08-30  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        <rdar://problem/4707718> - Instead of faking the user out with an in-memory icon database if their 
        ~/Library/Safari/Icons is unwritable, we'll actually fail to open the icon database and the app will
        run as if it was disabled via a preference.
        Also took the opportunity to change some ASSERTS() to reasonable behavior

        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (-[WebCoreIconDatabaseBridge openSharedDatabaseWithPath:]): NSLog on failure so the user has a chance to figure 
          out there's a problem.
        (-[WebCoreIconDatabaseBridge closeSharedDatabase]):
        (-[WebCoreIconDatabaseBridge iconForPageURL:withSize:]): From here on, just replaced ASSERTS() with reasonable behavior
        (-[WebCoreIconDatabaseBridge iconURLForPageURL:]):
        (-[WebCoreIconDatabaseBridge defaultIconWithSize:]):
        (-[WebCoreIconDatabaseBridge retainIconForURL:]):
        (-[WebCoreIconDatabaseBridge releaseIconForURL:]):
        (-[WebCoreIconDatabaseBridge _setIconData:forIconURL:]):
        (-[WebCoreIconDatabaseBridge _setHaveNoIconForIconURL:]):
        (-[WebCoreIconDatabaseBridge _setIconURL:forPageURL:]):
        (-[WebCoreIconDatabaseBridge _hasEntryForIconURL:]):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open): If we fail to open, return false 
        (WebCore::IconDatabase::~IconDatabase): cleanup better
        * loader/icon/IconDatabase.h:

2006-08-30  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4708007> REGRESSION: text field inside a webpage no longer has settable AXValueAttribute
        <rdar://problem/4707479> REGRESSION: controls inside a webpage no longer have settable AXFocusedAttribute

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject canSetFocusAttribute]):
        (-[WebCoreAXObject canSetValueAttribute]):
        New utility methods.  Text fields and buttons are focusable.
        Text fields can have their value set. We need not make
        popupbutton value settable because AppKit does not.
        
        (-[WebCoreAXObject accessibilityIsAttributeSettable:]):
        Call new utility methods.
        
        (-[WebCoreAXObject accessibilitySetValue:forAttribute:]):
        Set focus for text field or button.
        Set value for text field.
        
2006-08-30  David Hyatt  <hyatt@apple.com>

        Fix for bugs 9000 and 10606.  Add code to suppress painting when
        a FOUC situation would otherwise occur.  There will still typically be
        a flash to white, but at least the wrong content won't show.

        Reviewed by darin

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::preferredStylesheetSet):
        (WebCore::Document::selectedStylesheetSet):
        (WebCore::Document::setSelectedStylesheetSet):
        (WebCore::Document::stylesheetLoaded):
        (WebCore::Document::updateStyleSelector):
        * dom/Document.h:
        (WebCore::Document::haveStylesheetsLoaded):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::isSubframe):
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):

2006-08-31  Nikolas Zimmermann  <zimmermann@kde.org>
 
         Reviewed by Eric. Landed by rwlbuis.
 
         Apply Rob's fixes in RenderPathQt too -> unbreak build.
 
         * kcanvas/RenderPath.h: Some style cleanups.
         * kcanvas/device/qt/RenderPathQt.cpp:
         (WebCore::RenderPathQt::strokeContains):
         * kcanvas/device/qt/RenderPathQt.h:

2006-08-30  Sam Weinig  <sam.weinig@gmail.com>
        Reviewed by Tim H.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10640
          Auto-generate 10 more Objective-C DOM HTML bindings

          Auto-generates DOMHTMLBaseElement, DOMHTMLBodyElement, DOMHTMLHeadElement,
          DOMHTMLHtmlElement, DOMHTMLIsIndexElement, DOMHTMLLinkElement,
          DOMHTMLMetaElement, DOMHTMLStyleElement and DOMHTMLTitleElement.

          Splits DOMHTMLDocument into it's own files.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMHTMLDocument.h: Added.
        * bindings/objc/DOMHTMLDocument.mm: Added.
        (-[DOMHTMLDocument WebCore::]):
        (-[DOMHTMLDocument title]):
        (-[DOMHTMLDocument setTitle:]):
        (-[DOMHTMLDocument referrer]):
        (-[DOMHTMLDocument domain]):
        (-[DOMHTMLDocument URL]):
        (-[DOMHTMLDocument body]):
        (-[DOMHTMLDocument setBody:]):
        (-[DOMHTMLDocument images]):
        (-[DOMHTMLDocument applets]):
        (-[DOMHTMLDocument links]):
        (-[DOMHTMLDocument forms]):
        (-[DOMHTMLDocument anchors]):
        (-[DOMHTMLDocument cookie]):
        (-[DOMHTMLDocument setCookie:]):
        (-[DOMHTMLDocument open]):
        (-[DOMHTMLDocument close]):
        (-[DOMHTMLDocument write:]):
        (-[DOMHTMLDocument writeln:]):
        (-[DOMHTMLDocument getElementById:]):
        (-[DOMHTMLDocument getElementsByName:]):
        (-[DOMHTMLDocument createDocumentFragmentWithMarkupString:baseURL:]):
        (-[DOMHTMLDocument createDocumentFragmentWithText:]):
        * bindings/objc/DOMHTMLInternal.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * html/HTMLDocument.idl:

2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.

        Use QColor <-> Color conversion operator, instead of faking it.

        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRect):

2006-08-30  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10586
        pointer-events has issues when things are not stroked/filled

        Add a param to fillContains/strokeContains to indicate
        whether we still want hit testing when there is no fill/stroke.

        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::fillContains):
        (WebCore::RenderPath::nodeAtPoint):
        * kcanvas/RenderPath.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (WebCore::KCanvasItemQuartz::strokeContains):

2006-08-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4700297>
        REGRESSION: After replacing a misspelled word in a sentence, the selection extends to end of current line

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Rebalance whitespace
        around insertionPos before insertion because the content might 
        cause a collapse, e.g. inserting <div>foo</div> at hello^ world.
        * editing/htmlediting.cpp:
        (WebCore::rebalanceWhitespaceInTextNode): Rebalance with all nbsps
        for simplicity, we can produce sequences of regular spaces and
        nbsps on serialization (10636).

2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.

        The old solution was slow & does not work correctly.
        Move the QString -> DeprecatedString conversion into
        DeprectedString.cpp, to be able to access allocateHandle().

        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::DeprecatedString):
        * platform/qt/StringQt.cpp:

2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Implement containsCharacters() / determinePitch() functions.

        * platform/qt/FontDataQt.cpp:
        (WebCore::FontData::containsCharacters):
        (WebCore::FontData::determinePitch):

2006-08-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin's rubberstamp

        We apparently have a fancy delateAllValues() helper for HashMap/Sets - I'll use that instead

        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::removeAllIcons):

2006-08-29  waylonis  <waylonis@google.com>

        Reviewed, tweaked by ggaren.
        
        - Changed to use ExecState on current context rather than global.
          Part of the fix for http://bugs.webkit.org/show_bug.cgi?id=10114
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]):
        (-[WebScriptObject setException:]):

2006-08-30  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        - WebCore part of fix for:
        http://bugs.webkit.org/show_bug.cgi?id=10576
        Disallow copy from new password fields

        * page/Frame.cpp: (WebCore::Frame::mayCopy): Added. Checks to see if the selection is within a password field.
        * page/Frame.h: Added mayCopy.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::handleMouseMoveEvent): Checks mayCopy before starting a drag.
        (WebCore::FrameMac::mayDHTMLCut): Renamed to match the bridge method.  This also checks mayCopy now.
        (WebCore::FrameMac::mayDHTMLCopy): ditto.
        (WebCore::FrameMac::tryDHTMLCut): ditto.
        (WebCore::FrameMac::tryDHTMLCopy): ditto.
        (WebCore::FrameMac::mayDHTMLPaste): Renamed to match the bridge function.
        (WebCore::FrameMac::tryDHTMLPaste): ditto.
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge mayCopy]): Calls the renamed method on frame.
        (-[WebCoreFrameBridge mayDHTMLCut]): ditto.
        (-[WebCoreFrameBridge mayDHTMLCopy]): ditto.
        (-[WebCoreFrameBridge mayDHTMLPaste]): ditto.
        (-[WebCoreFrameBridge tryDHTMLCut]): ditto.
        (-[WebCoreFrameBridge tryDHTMLCopy]): ditto.
        (-[WebCoreFrameBridge tryDHTMLPaste]): ditto.

        * css/html4.css: Added !important to the -webkit-text-security property for password fields.

2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Commit KDE related tweaks, to be able to
        differentiate between a Qt-only or a KDE build.

        * CMakeLists.txt: Move global variables up to trunk/CMakeLists.txt.
                          Also rename USE_WEBKIT_SVG_SUPPORT to WEBKIT_USE_SVG_SUPPORT.

2006-08-30  Timothy Hatcher  <timothy@apple.com>

        Rubber-stamped by Brady.

        Fix for the generated headers to make the build work
        during "installhdrs" builds. Also export DOM headers
        using the #import <WebCore/DOM*.h> syntax.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorObjC.pm:

2006-08-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Kevin Decker (Sarge)

        <rdar://problem/4678414> - New IconDB needs to delete icons when asked
        <rdar://problem/4707718> - If user's Icon directory is unwritable, Safari will crash at startup

        * bridge/mac/WebCoreIconDatabaseBridge.h:
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (-[WebCoreIconDatabaseBridge removeAllIcons]):  Added
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open): If DB file is not writeable, create an in-memory DB for this session
        (WebCore::IconDatabase::close): Use new deleteAllPreparedStatements()
        (WebCore::IconDatabase::removeAllIcons): Actually implemented
        (WebCore::IconDatabase::deleteAllPreparedStatements): Added for convinience/consistency
        (WebCore::IconDatabase::setPrivateBrowsingEnabled): Use new SQLDatabase::clearAllTables()
        * loader/icon/IconDatabase.h:
        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::clearAllTables): Moved this from IconDatabase as it actually belongs here
        (WebCore::SQLDatabase::vacuum): Added
        * loader/icon/SQLDatabase.h:
        (WebCore::SQLDatabase::path): changed name from getPath()

2006-08-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Alice

        Added a truth value to setIconURLForPageURL so WebKit can avoid sending a notification
        This is a win on the iBench

        * bridge/mac/WebCoreIconDatabaseBridge.h:
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (-[WebCoreIconDatabaseBridge _setIconURL:forPageURL:]):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconURLForPageURL):
        * loader/icon/IconDatabase.h:

2006-08-29  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady.

        Fixed <rdar://problem/4702021> REGRESSION: WebClip and Weather widgets shift downward vertically on screen after I drag them out from dashboard configure bar

        * platform/mac/ScreenMac.mm:
        (WebCore::flipScreenRect):
        reverted the one line in this method back to what it was before r15765.  This changed caused window.screenY to be incorrect.  

2006-08-29  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix <rdar://problem/4701494> REGRESSION: Scrollbar on EPSN widget doesn't scroll (also affects Widgets widget, web inspector)

        The bug was that we would return "none" for computed style properties when they were
        exactly "-1px".

        Test: fast/css/computed-style-negative-top.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForLength): Moved special case for "undefined length" out of here.
        (WebCore::valueForMaxLength): Moved it into here.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Use valueForMaxLength
        only for max-height and max-width.

2006-08-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.

        Add path-related SVG JavaScript bindings to generation.

        * CMakeLists.txt:

2006-08-29  Eric Seidel  <eric@webkit.org>

        Reviewed by kevin.

        Re-enable path-related SVG JavaScript bindings.
        http://bugs.webkit.org/show_bug.cgi?id=10623
        Split all SVGPathSeg*.idl files into Abs and Rel pieces.
        Move all SVGPath*.idl files into ksvg2/svg

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm: Special case Abs and Rel header includes
        * ksvg2/bindings/idl/svg/SVGAnimatedNumber.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathElement.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSeg.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegArc.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegClosePath.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoCubic.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoCubicSmooth.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoQuadratic.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoQuadraticSmooth.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegLineto.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegLinetoHorizontal.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegLinetoVertical.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegList.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPathSegMoveto.idl: Removed.
        * ksvg2/ksvg.h: move SVGPathSegment enum
        * ksvg2/svg/SVGPathElement.cpp: move SVGPathSegment enum
        (WebCore::SVGPathElement::toPathData):
        * ksvg2/svg/SVGPathSeg.cpp:
        (WebCore::SVGPathSeg::SVGPathSeg):
        * ksvg2/svg/SVGPathSeg.h:
        (WebCore::SVGPathSeg::):
        * ksvg2/svg/SVGPathSegArcAbs.idl: Added.
        * ksvg2/svg/SVGPathSegArcRel.idl: Added.
        * ksvg2/svg/SVGPathSegCurvetoCubicAbs.idl: Added.
        * ksvg2/svg/SVGPathSegCurvetoCubicRel.idl: Added.
        * ksvg2/svg/SVGPathSegCurvetoCubicSmoothAbs.idl: Added.
        * ksvg2/svg/SVGPathSegCurvetoCubicSmoothRel.idl: Added.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticAbs.idl: Added.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticRel.idl: Added.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl: Added.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl: Added.
        * ksvg2/svg/SVGPathSegLinetoAbs.idl: Added.
        * ksvg2/svg/SVGPathSegLinetoHorizontalAbs.idl: Added.
        * ksvg2/svg/SVGPathSegLinetoHorizontalRel.idl: Added.
        * ksvg2/svg/SVGPathSegLinetoRel.idl: Added.
        * ksvg2/svg/SVGPathSegLinetoVerticalAbs.idl: Added.
        * ksvg2/svg/SVGPathSegLinetoVerticalRel.idl: Added.
        * ksvg2/svg/SVGPathSegMovetoAbs.idl: Added.
        * ksvg2/svg/SVGPathSegMovetoRel.idl: Added.

2006-08-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric, landed by Anders.

        Fixes one chunk of: http://bugs.webkit.org/show_bug.cgi?id=10604

        Finish Unity merging. Remove libcurl usage, in favour of KIO.
        This makes the regression testing fly! IO processing is way faster now.

        * CMakeLists.txt:
        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::openURL):
        (WebCore::FrameQt::submitForm):
        (WebCore::FrameQt::urlSelected):
        (WebCore::FrameQt::createEmptyDocument):
        (WebCore::FrameQt::receivedData):
        (WebCore::FrameQt::receivedAllData):
        * platform/qt/FrameQt.h:
        * platform/qt/ResourceLoaderCurl.cpp: Removed.
        * platform/qt/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::ResourceLoaderManager):
        (WebCore::ResourceLoaderManager::~ResourceLoaderManager):
        (WebCore::ResourceLoaderManager::self):
        (WebCore::ResourceLoaderManager::slotData):
        (WebCore::ResourceLoaderManager::slotMimetype):
        (WebCore::ResourceLoaderManager::slotResult):
        (WebCore::ResourceLoaderManager::remove):
        (WebCore::ResourceLoaderManager::add):
        * platform/qt/ResourceLoaderManager.h:
        * platform/qt/ResourceLoaderQt.cpp: Added.
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        (WebCore::ResourceLoader::receivedResponse):

2006-08-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Bug 10632: Objective-C DOM should use the @property syntax for DOM attributes
        http://bugs.webkit.org/show_bug.cgi?id=10632

        Generate @property when MACOSX_DEPLOYMENT_TARGET is >= 10.5.
        This is backwards compatible with the getter/setter methods.
        Generate setter arguments with a "new" prefix to avoid the property
        name conflict warning. Also removes some whitespace and the comments
        that we added to the headers. This makes the headers look like what we ship now.

        * bindings/objc/DOMCSS.mm:
        (-[DOMDocument getComputedStyle::]): renamed a local variable to avoid the property name conflict.
        (-[DOMDocument getMatchedCSSRules::]): ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: generate @property in the headers.

2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Fix time calculation, by using a correct calculation. Calling time()
        returns a number of seconds, aka. an integer. Fix it by using gettimeofday().
        Patch originally proposed by Ronan Meneu <rmeneu@origyn.fr>

        * platform/qt/SystemTimeQt.cpp:
        (WebCore::currentTime):

2006-08-29  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10628
          Auto-generate the remaining Objective-C DOM bindings

          Auto-generates DOMHTMLCollection, DOMHTMLElement, DOMHTMLFormElement,
          and DOMHTMLOptionsCollection, and lays groundwork for the rest of the 
          HTML DOM bindings by adding/fixing the appropriate IDL's and updating
          the CodeGeneratorObjC.pm build script.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMHTMLInternal.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCollection.idl: Added.
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl: Added.
        * html/HTMLFrameSetElement.idl: Added.
        * html/HTMLIFrameElement.idl: Added.
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLObjectElement.idl: Added.
        * html/HTMLOptionsCollection.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLSelectElement.idl: Added.
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl: Added.
        * html/HTMLTableCellElement.idl: Added.
        * html/HTMLTableColElement.idl: Added.
        * html/HTMLTableElement.idl: Added.
        * html/HTMLTableRowElement.idl: Added.
        * html/HTMLTableSectionElement.idl: Added.
        * html/HTMLTextAreaElement.idl:

2006-08-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10629.
        Drawing convex polygons is broken in the Qt platform.

        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):

2006-08-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Implementing font hashing properly, fixes weird crashes in HashMap.

        * platform/qt/FontPlatformData.h:
        * platform/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):

2006-08-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by ggaren.

        Fix scrollbars to reappear after the first layouting.

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

2006-08-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin and Geoff.

        Move the CF String functions to separate files in platform/cf.
        Also, move the files in platform/cfnet to platform/cf.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/PlatformString.h:
        * platform/StringImpl.h:
        * platform/cf/StringCF.cpp: Added.
        (WebCore::String::String):
        * platform/cf/StringImplCF.cpp: Added.
        (WebCore::StringImpl::createCFString):
        * platform/cfnet/KURLCFNet.cpp: Removed.
        * platform/cfnet/ResourceLoaderCFNet.cpp: Removed.
        * platform/mac/StringImplMac.mm:
        * platform/mac/StringMac.mm:

2006-08-29  Geoffrey Garen  <ggaren@apple.com>

        Rolling out a change I included by accident in my last commit.
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::passMouseDownEventToWidget):
        * platform/mac/SharedTimerMac.cpp:
        (WebCore::setSharedTimerFireTime):

2006-08-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        Added support for experimental CFNetwork-based loader (not turned on yet).
        
        While I was there, I did the following platform cleanup:
        - Windows now uses USE(WININET) instead of PLATFORM(WIN_OS), to match the
          USE(CFNETWORK) idiom.
        - Removed some #includes of windows.h in platform-independent headers.
        - Changed #ifdef __APPLE__ to PLATFORM(MAC)
        - Fixed some build bustage, including case-sensitive filesystem bustage.

        * loader/loader.cpp:
        (WebCore::Loader::receivedAllData):
        * platform/Cursor.h:
        * platform/KURL.h:
        * platform/ResourceLoader.h:
        * platform/ResourceLoaderClient.h:
        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/cfnet/KURLCFNet.cpp: Added.
        (WebCore::KURL::createCFURL):
        * platform/cfnet/ResourceLoaderCFNet.cpp: Added.
        (WebCore::willSendRequest):
        (WebCore::didReceiveChallenge):
        (WebCore::didCancelChallenge):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::willCacheResponse):
        (WebCore::addHeadersFromString):
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::arrayFromFormData):
        (WebCore::emptyPerform):
        (WebCore::runLoaderThread):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::cancel):
        * platform/win/CursorWin.cpp:

2006-08-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4700341>
        REGRESSION: In new mail message, caret isn't placed at end of line after redoing typing

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Added a FIXME.
        * page/Frame.cpp:
        (WebCore::Frame::reappliedEditing): Restore the endingSelection(), not the startingSelection().

2006-08-28  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

        Part of <rdar://problem/4481553> NetscapeMoviePlugIn example code scripting doesn't work in Firefox (4319)
        <http://bugs.webkit.org/show_bug.cgi?id=4319>: NetscapeMoviePlugIn example code scripting doesn't work
        in Firefox

        No test cases added, since this is essentially a leak fix.

        A brief history of NPP_GetValue(), NPObjects, and reference counting.

        Earlier versions of WebKit incorrectly interpreted the NPRuntime reference counting rules.  We failed to take
        into account the fact that plug-ins are required to retain NPObjects before returning them.  This creates several
        classes of interesting plug-ins:

        1) Plug-ins tested in WebKit and other browsers.  These plug-ins may have WebKit-specific workarounds to not retain
           the returned NPObject, thus avoiding the memory leak in WebKit.

        2) Plug-ins tested only in other browsers.  These plug-ins must already retain their NPObjects, since other browsers
           implemented the NPRuntime retain/release rules correctly.  These plug-ins likely work in WebKit, but probably leak
           NPObjects since WebKit adds its own retain in addition to the plug-in's retain.

        3) Plug-ins tested only in WebKit, that fail to retain their NPObjects before returning them.
           Such plug-ins are guaranteed to crash in other browsers due to the missing expected retain.  These plug-ins
           work in older WebKits because WebKit did not expect the plug-in to retain the NPObject.  Now that our retain
           rules match other browsers, these plug-ins may crash due to the difference in retain/release behavior.  We could
           potentially detect that situation and correct it here, but I consider it a bug that the plug-in did not follow the
           documented NPRuntime reference counting rules.  Furthermore, it is extremely unlikely that someone would develop
           a Netscape plug-in and test it *only* in WebKit.  The entire purpose of creating a Netscape plugin is so that it
           works in all browsers!

        4) Plug-ins tested only in WebKit, that properly retain their NPObjects before returning them.
           These plug-ins probably work in other browsers, and leak their NPObjects in older WebKits because of WebKit's
           extra retain.  A developer of this type of plug-in is probably unaware of the NPObject leak.  A more savvy developer
           would create a plug-in that fits into category #1.
        
        I am changing our NPP_GetValue() behavior to match Firefox and other browsers -- the plug-in is now expected to retain the
        returned NPObject, and the browser is expected to release it when done.  This means that plug-ins in category #3 need to be
        changed so that they don't crash in Safari.  However, such plug-ins already crash in every other browser, so I do not feel that
        this needs to be handled specifically by WebKit.

        * bridge/mac/FrameMac.mm:
        Changed -pluginScriptableObject to -createPluginScriptableObject to make clearer the contract that the method must return a
        retained NPObject.  Also changed it to return an actual NPObject* instead of a void*.  There is only one caller of this method,
        and only one implementor.  Using void* here is a needless abstraction.  It's an NPObject*!  Admit it!
        (WebCore::getInstanceForView):
        Release the NPObject after creating the bindings instance.  This is the actual bug fix.

2006-08-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff.

        Fixed <rdar://problem/4548537> Document.domain and other attributes are blank for an iframe created with document.write

        * dom/Document.cpp:
        (WebCore::Document::open):
        set the document's url to the parent's url and re-located the code that does this to occur before calling the frame's didExplicitOpen()
        * page/Frame.cpp:
        (WebCore::Frame::didExplicitOpen):
        set the frame's url to the document's url

2006-08-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele and Adam

        Added an optimization to return early if there's no replacements to be made

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::replace):

2006-08-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Fixes one chunk of: http://bugs.webkit.org/show_bug.cgi?id=10604
        Provide stub implementation of RenderPopupMenuQt.

        * CMakeLists.txt:
        * platform/qt/RenderPopupMenuQt.cpp: Added.
        (WebCore::RenderPopupMenuQt::RenderPopupMenuQt):
        (WebCore::RenderPopupMenuQt::~RenderPopupMenuQt):
        (WebCore::RenderPopupMenuQt::clear):
        (WebCore::RenderPopupMenuQt::populate):
        (WebCore::RenderPopupMenuQt::showPopup):
        (WebCore::RenderPopupMenuQt::hidePopup):
        (WebCore::RenderPopupMenuQt::addSeparator):
        (WebCore::RenderPopupMenuQt::addGroupLabel):
        (WebCore::RenderPopupMenuQt::addOption):
        * platform/qt/RenderPopupMenuQt.h: Added.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::systemFont):
        (WebCore::RenderThemeQt::createPopupMenu):

2006-08-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Fixes one chunk of: http://bugs.webkit.org/show_bug.cgi?id=10604
        Offer QString -> DeprecatedString conversion.

        * platform/DeprecatedString.h:
        * platform/qt/StringQt.cpp:
        (WebCore::DeprecatedString::DeprecatedString):

2006-08-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim Hatcher.
        
        Fixes one chunk of: http://bugs.webkit.org/show_bug.cgi?id=10604

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::systemFont):
        Remove annoying notImplemented() usage in systemFont()

2006-08-28  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/3942647> Support AXStyleTextMarkerRangeForTextMarker parameterized attribute

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityParameterizedAttributeNames]):
        Add AXStyleTextMarkerRangeForTextMarker.
        
        (startOfStyleRange):
        (endOfStyleRange):
        Return first/last VisiblePosition in range having the same style has the specified VisiblePosition.

        (-[WebCoreAXObject doAXStyleTextMarkerRangeForTextMarker:]):
        Return AXTextMarkerRange for startOfStyleRange/endOfStyleRange of the specified AXTextMarker.
        
        (-[WebCoreAXObject accessibilityAttributeValue:forParameter:]):
        Call doAXStyleTextMarkerRangeForTextMarker for AXStyleTextMarkerRangeForTextMarker.

2006-08-28  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/4517383> Hide all images used for spacing purpose in AX

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityIsIgnored]):
        Check for one-dimensional image
        Check whether rendered image was stretched from one-dimensional file image

2006-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Rewrote StringImpl::replace(UChar, StringImpl*)

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::replace):

2006-08-27  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Tim H.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=4624
          WebCore needs autogenerated Obj-C DOM bindings

          First round of auto-generated Objective C DOM bindings, starting
          with the DOM Core.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode description]):
        (-[DOMNode KJS::Bindings::]):
        (-[DOMNode dispatchEvent:]):
        (-[DOMNamedNodeMap _initWithNamedNodeMap:]):
        (+[DOMNamedNodeMap _namedNodeMapWith:]):
        (-[DOMNodeList _initWithNodeList:]):
        (+[DOMNodeList _nodeListWith:]):
        (-[DOMImplementation _initWithDOMImplementation:]):
        (+[DOMImplementation _DOMImplementationWith:]):
        (-[DOMImplementation _DOMImplementation]):
        (+[DOMDocumentFragment _documentFragmentWith:]):
        (-[DOMDocumentFragment _fragment]):
        (-[DOMDocument createCSSStyleDeclaration]):
        (+[DOMDocument _documentWith:]):
        (-[DOMDocument _document]):
        (-[DOMDocument _ownerElement]):
        (+[DOMAttr _attrWith:]):
        (-[DOMAttr _attr]):
        (+[DOMDocumentType _documentTypeWith:WebCore::]):
        (-[DOMDocumentType WebCore::]):
        (+[DOMText _textWith:WebCore::]):
        (+[DOMComment _commentWith:WebCore::]):
        (+[DOMCDATASection _CDATASectionWith:WebCore::]):
        (+[DOMProcessingInstruction _processingInstructionWith:WebCore::]):
        (+[DOMEntityReference _entityReferenceWith:WebCore::]):
        * bindings/objc/DOMCSS.h:
        * bindings/objc/DOMCSS.mm:
        * bindings/objc/DOMCore.h:
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.mm:
        (+[DOMHTMLDocument _HTMLDocumentWith:WebCore::]):
        * bindings/objc/DOMHTMLInternal.h:
        * bindings/objc/DOMImplementationFront.h:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMNode.h: Added.
        * bindings/objc/DOMNode.mm: Added.
        (-[DOMNode dealloc]):
        (-[DOMNode finalize]):
        (-[DOMNode nodeName]):
        (-[DOMNode nodeValue]):
        (-[DOMNode setNodeValue:]):
        (-[DOMNode nodeType]):
        (-[DOMNode parentNode]):
        (-[DOMNode childNodes]):
        (-[DOMNode firstChild]):
        (-[DOMNode lastChild]):
        (-[DOMNode previousSibling]):
        (-[DOMNode nextSibling]):
        (-[DOMNode attributes]):
        (-[DOMNode ownerDocument]):
        (-[DOMNode insertBefore::]):
        (-[DOMNode replaceChild::]):
        (-[DOMNode removeChild:]):
        (-[DOMNode appendChild:]):
        (-[DOMNode hasChildNodes]):
        (-[DOMNode cloneNode:]):
        (-[DOMNode normalize]):
        (-[DOMNode isSupported::]):
        (-[DOMNode namespaceURI]):
        (-[DOMNode prefix]):
        (-[DOMNode setPrefix:]):
        (-[DOMNode localName]):
        (-[DOMNode hasAttributes]):
        (-[DOMNode isSameNode:]):
        (-[DOMNode isEqualNode:]):
        (-[DOMNode isDefaultNamespace:]):
        (-[DOMNode lookupPrefix:]):
        (-[DOMNode lookupNamespaceURI:]):
        (-[DOMNode textContent]):
        (-[DOMNode setTextContent:]):
        (-[DOMNode boundingBox]):
        (-[DOMNode lineBoxRects]):
        * bindings/objc/DOMObject.h: Added.
        * bindings/objc/DOMObject.mm: Added.
        (-[DOMObject init]):
        (-[DOMObject dealloc]):
        (-[DOMObject finalize]):
        (-[DOMObject copyWithZone:]):
        (-[DOMObject sheet]):
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMRange.h:
        * bindings/objc/DOMStylesheets.h:
        * bindings/objc/DOMTraversal.h:
        * bindings/objc/DOMViews.h:
        * bindings/objc/DOMViews.mm:
        * bindings/objc/DOMXPath.h:
        * bindings/objc/DOMXPath.mm:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm: Added.
        * dom/Attr.idl:
        * dom/CDATASection.idl: Added.
        * dom/Comment.idl: Added.
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/EntityReference.idl: Added.
        * dom/NamedNodeMap.idl: Added.
        * dom/NodeList.idl: Added.
        * dom/ProcessingInstruction.idl:

2006-08-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fix crash in LayoutTests/css1/font_properties/font.html,
        by implementing FontData::smallCapsFontData.

        * platform/qt/FontDataQt.cpp:
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):

2006-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Plugged a leak in StringImpl::replace()

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::replace):

2006-08-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Remove most annoying notImplemented() usages and
        implement some missing ScrollViewQt functions.
        Much nicer output when invoking run-webkit-tests.

        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::saveDocumentState):
        (WebCore::FrameQt::restoreDocumentState):
        (WebCore::FrameQt::clearUndoRedoOperations):
        (WebCore::FrameQt::partClearedInBegin):
        * platform/qt/ResourceLoaderManager.cpp:
        (WebCore::headerCallback):
        (WebCore::ResourceLoaderManager::downloadTimerCallback):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::suppressScrollBars):
        (WebCore::ScrollView::setStaticBackground):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::historyContains):
        (WebCore::CheckCacheObjectStatus):
        (WebCore::CheckIfReloading):
        (loadResourceIntoArray):
        (WebCore::PlugInInfoStore::supportsMIMEType):

2006-08-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Fix Qt build (add SVGMetaDataElement.cpp to build system)

        * CMakeLists.txt:

2006-08-27  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        No logic changes.  Just cleanup.

        * ksvg2/svg/SVGAngle.cpp:
        (SVGAngle::SVGAngle):
        (SVGAngle::unitType):
        (SVGAngle::valueAsString):
        (SVGAngle::newValueSpecifiedUnits):
        (SVGAngle::convertToSpecifiedUnits):
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::unitType):
        (WebCore::SVGLength::newValueSpecifiedUnits):
        (WebCore::SVGLength::convertToSpecifiedUnits):
        (WebCore::SVGLength::updateValue):
        (WebCore::SVGLength::updateValueInSpecifiedUnits):
        * ksvg2/svg/SVGLength.h:
        * platform/BitmapImage.cpp: Removed.
        * platform/BitmapImage.h: Removed.

2006-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        -Changed all of the commonly used queries to keep around pre-prepared statements and bind
        their arguments instead of constructing a new, messy, string appended statement each time
        -Changed some code in pruneUnretainedIconsOnStartup regarding transactions

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase): Initializers
        (WebCore::IconDatabase::close): Wipe all the preprepared statements
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup): Better handling of transactions
        (WebCore::readySQLStatement): Make sure a preprepared statement is ready to go for a fooQuery()
        (WebCore::IconDatabase::pageURLTableIsEmptyQuery): Added a comment
        (WebCore::IconDatabase::imageDataForIconURLQuery): Use preprepared statement + binding
        (WebCore::IconDatabase::timeStampForIconURLQuery): ditto
        (WebCore::IconDatabase::iconURLForPageURLQuery): ditto
        (WebCore::IconDatabase::forgetPageURLQuery): ditto
        (WebCore::IconDatabase::setIconIDForPageURLQuery): ditto
        (WebCore::IconDatabase::getIconIDForIconURLQuery): ditto
        (WebCore::IconDatabase::addIconForIconURLQuery): ditto
        (WebCore::IconDatabase::hasIconForIconURLQuery): ditto
        * loader/icon/IconDatabase.h: Added fooQuery() and *m_fooStatements
        * loader/icon/SQLStatement.h:
        (WebCore::SQLStatement::database): Added

2006-08-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fix switch logic.

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

2006-08-27  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10557
        KCanvasPath should be replace by platform/Path

        Refactoring out the KCanvasPath class.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasCreator.cpp:
        (WebCore::KCanvasCreator::createRoundedRectangle):
        (WebCore::KCanvasCreator::createRectangle):
        (WebCore::KCanvasCreator::createEllipse):
        (WebCore::KCanvasCreator::createCircle):
        (WebCore::KCanvasCreator::createLine):
        * kcanvas/KCanvasCreator.h:
        * kcanvas/KCanvasPath.cpp: Removed.
        * kcanvas/KCanvasPath.h: Removed.
        * kcanvas/KCanvasResources.cpp:
        (WebCore::operator<<):
        (WebCore::KCanvasResource::clients):
        (WebCore::KCanvasResource::invalidate):
        (WebCore::KCanvasClipper::addClipData):
        * kcanvas/KCanvasResources.h:
        (WebCore::KCClipData::windRule):
        (WebCore::KCClipDataList::KCClipDataList):
        (WebCore::KCClipDataList::addPath):
        * kcanvas/KCanvasTreeDebug.cpp:
        (WebCore::operator<<):
        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::fillContains):
        (WebCore::RenderPath::relativeBBox):
        (WebCore::RenderPath::setPath):
        (WebCore::RenderPath::path):
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::nodeAtPoint):
        * kcanvas/RenderPath.h:
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingFillPainter.cpp:
        (WebCore::KRenderingFillPainter::fillRule):
        (WebCore::KRenderingFillPainter::setFillRule):
        * kcanvas/device/KRenderingFillPainter.h:
        * kcanvas/device/qt/KCanvasClipperQt.cpp:
        (WebCore::KCanvasClipperQt::applyClip):
        * kcanvas/device/qt/KCanvasPathQt.cpp: Removed.
        * kcanvas/device/qt/KCanvasPathQt.h: Removed.
        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
        (WebCore::KRenderingDeviceContextQt::addPath):
        (WebCore::KRenderingDeviceContextQt::setFillRule):
        (WebCore::KRenderingDeviceQt::createItem):
        * kcanvas/device/qt/KRenderingDeviceQt.h:
        * kcanvas/device/qt/RenderPathQt.cpp:
        (WebCore::RenderPathQt::drawMarkersIfNeeded):
        (WebCore::RenderPathQt::strokeContains):
        (WebCore::getPathStroke):
        (WebCore::RenderPathQt::strokeBBox):
        * kcanvas/device/qt/RenderPathQt.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (WebCore::KCanvasItemQuartz::drawMarkersIfNeeded):
        (WebCore::KCanvasItemQuartz::strokeBBox):
        (WebCore::KCanvasItemQuartz::strokeContains):
        * kcanvas/device/quartz/KCanvasPathQuartz.h: Removed.
        * kcanvas/device/quartz/KCanvasPathQuartz.mm: Removed.
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (WebCore::KCanvasClipperQuartz::applyClip):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceContextQuartz::addPath):
        (WebCore::KRenderingDeviceQuartz::createItem):
        * kcanvas/device/quartz/QuartzSupport.h:
        * kcanvas/device/quartz/QuartzSupport.mm:
        (WebCore::scratchContext):
        (WebCore::strokeBoundingBox):
        (WebCore::pathContainsPoint):
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::):
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::fillPainter):
        * ksvg2/svg/SVGCircleElement.cpp:
        (SVGCircleElement::toPathData):
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::toPathData):
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::notifyAttributeChange):
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGLineElement.cpp:
        (SVGLineElement::toPathData):
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::toPathData):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::notifyClientsToRepaint):
        * ksvg2/svg/SVGPolygonElement.cpp:
        (SVGPolygonElement::toPathData):
        * ksvg2/svg/SVGPolygonElement.h:
        * ksvg2/svg/SVGPolylineElement.cpp:
        (SVGPolylineElement::toPathData):
        * ksvg2/svg/SVGPolylineElement.h:
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::toPathData):
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::createRenderer):
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::toPathData):
        * ksvg2/svg/SVGTextContentElement.cpp:
        * ksvg2/svg/SVGTextElement.cpp:
        * platform/Path.h:
        (WebCore::):
        (WebCore::Path::setWindingRule):
        (WebCore::Path::windingRule):
        * platform/cg/PathCG.cpp:
        (WebCore::Path::contains):
        (WebCore::Path::isEmpty):
        (WebCore::CGPathToCFStringApplierFunction):
        (WebCore::CFStringFromCGPath):
        (WebCore::Path::debugString):
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::openURL):
        * platform/qt/PathQt.cpp:
        (WebCore::Path::contains):
        (WebCore::Path::isEmpty):
        (WebCore::Path::debugString):

2006-08-26  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        pointer-events attribute does not work.
        http://bugs.webkit.org/show_bug.cgi?id=10415

        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::pointerEventsHitRules): new function to contain pointer-events hit logic
        (WebCore::RenderPath::nodeAtPoint): respect pointer-events property
        * kcanvas/RenderPath.h:
        (WebCore::RenderPath::PointerEventsHitRules::PointerEventsHitRules):
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/svg/SVGPaint.cpp: Fix this to use a real enum value
        (WebCore::SVGPaint::SVGPaint):
        (WebCore::SVGPaint::paintType):
        (WebCore::SVGPaint::uri):
        (WebCore::SVGPaint::setUri):
        (WebCore::SVGPaint::setPaint):
        * ksvg2/svg/SVGPaint.h:

2006-08-27  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10558
        SVG should have support for <metadata> element

        Add support for metadata tag.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/bindings/js/JSSVGElementWrapperFactory.cpp:
        * ksvg2/svg/SVGMetadataElement.cpp: Added.
        (SVGMetadataElement::SVGMetadataElement):
        (SVGMetadataElement::~SVGMetadataElement):
        * ksvg2/svg/SVGMetadataElement.h: Added.
        * ksvg2/svg/SVGMetadataElement.idl: Added.
        * ksvg2/svg/svgtags.in:

2006-08-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Daily Qt build fixes :-)

        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):
        * platform/qt/ImageQt.cpp:
        (WebCore::Image::initPlatformData):
        (WebCore::Image::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):

2006-08-26  David Hyatt  <hyatt@apple.com>

        Fix the ifdef in Path.h to be CG.

        * platform/Path.h:

2006-08-26  David Hyatt  <hyatt@apple.com>

        Fix Mac build bustage (lots of float/int confusion).  I am not sure
        whether rounding was desired or not... this is just a band-aid to get
        the build working again.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle):

2006-08-25  David Hyatt  <hyatt@apple.com>

        More refactoring of image to disentangle graphics (e.g., Cairo) from
        platform (e.g., Windows).

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        Add ImageWin to project.

        * loader/Cache.cpp:
        (WebCore::Cache::init):
        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::loadImageFromResource):
        Renamed loadResource to loadPlatformResource to try to make it more clear
        that this call is implemented on each OS (and not by graphics libraries).

        * platform/Image.cpp:
        (WebCore::Image::Image):
        (WebCore::Image::~Image):
        (WebCore::Image::invalidateData):
        (WebCore::Image::size):
        (WebCore::Image::setData):
        (WebCore::Image::setNativeData):
        Fix up the PDF code to not be considered platform data any more, since
        PDF rendering is not for a specific OS.

        Renamed the methods that set OS-specific data (like NSImage) to PlatformData
        instead of NativeData.

        * platform/Image.h:
        Shifted the PDF members into CG defines.  Made CGImageRef a CG define.
        Renamed methods to reflect that they are OS-specific and not
        graphics-library-specific.
       
        * platform/cairo/ImageCairo.cpp:
        Removed the platform data methods.  Other platforms besides Windows that
        use Cairo will need to account for this change by adding these methods
        to their OS Image***.cpp file.

        * platform/cg/ImageCG.cpp:
        (WebCore::Image::drawTiled):
        Add FIXMEs to the wkpattern stuff.

        * platform/cg/PDFDocumentImage.cpp:
        Shouldn't have #imports in .cpp.

        * platform/mac/ImageMac.mm:
        (WebCore::Image::initPlatformData):
        (WebCore::Image::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::getTIFFRepresentation):
        Add the platform data initializers to the Mac Image file.   Move the
        TIFF representation there as well, since this is only used by Mac code.

        * platform/win/ImageWin.cpp: Added.
        (WebCore::Image::initPlatformData):
        (WebCore::Image::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::supportsType):
        Similar work for Windows.  Add stubs for possible future HBITMAP returns
        in the platform data methods.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizeControl):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintResizeControl):
        loadResource -> loadPlatformResource

2006-08-26  Adam Roben  <aroben@apple.com>

        Rubber-stamped by Adele.

        Fixed build.

        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):

2006-08-25  Adele Peterson  <adele@apple.com>

        Patch by Francisco, Reviewed by me.

        Preparation for switch to new text field implementation of password field.

        Added -webkit-text-security property.

        Tests: updated fast/css/computed-style-expected.txt

        * css/CSSPropertyNames.in: Added -webkit-text-security.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Added cases for textSecurity.
        * css/cssparser.cpp: (WebCore::CSSParser::parseValue): ditto.
        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::applyProperty): ditto.
        * css/html4.css: Added style for password field to use -webkit-text-security.

        * html/HTMLInputElement.cpp: Check appearance property to decide which renderer to use.
        (WebCore::HTMLInputElement::selectionStart):
        (WebCore::HTMLInputElement::selectionEnd):
        (WebCore::HTMLInputElement::setSelectionStart):
        (WebCore::HTMLInputElement::setSelectionEnd):
        (WebCore::HTMLInputElement::select):
        (WebCore::HTMLInputElement::setSelectionRange):
        (WebCore::HTMLInputElement::createRenderer):
        * html/HTMLInputElement.h: (WebCore::HTMLInputElement::isNonWidgetTextField): Added check for password.

        * platform/StringImpl.cpp: (WebCore::StringImpl::secure): Added. Converts a string to replace 
         characters with one character, like a bullet.
        * platform/StringImpl.h:

        * rendering/RenderStyle.cpp:
        (WebCore::StyleCSS3InheritedData::StyleCSS3InheritedData): Initialize textSecurity.
        (WebCore::RenderStyle::diff): Added case for textSecurity.
        * rendering/RenderStyle.h:
        (WebCore::):
        (WebCore::RenderStyle::textSecurity): Added.
        (WebCore::RenderStyle::setTextSecurity): Added.
        (WebCore::RenderStyle::initialTextSecurity): Added.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setStyle): Added case for textSecurity.
        (WebCore::RenderText::setText): ditto.

2006-08-25  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Enable styling for popup menus. Also fixed baseline calculation for buttons and selects.

        Tests:   fast/forms/select-baseline.html
                 fast/borders/borderRadiusInvalidColor.html
        updated: fast/forms/select-style-expected.txt and more...

        * css/html4.css: Added style rules for styled select elements.

        * platform/GraphicsContext.h: Added argument for antialiasing.
        * platform/cg/GraphicsContextCG.cpp: (WebCore::GraphicsContext::drawConvexPolygon): ditto.
        * platform/cairo/GraphicsContextCairo.cpp: (WebCore::GraphicsContext::drawConvexPolygon): ditto.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorderArc): Added textColor argument so this can be used when the border color is invalid.
        (WebCore::RenderObject::drawBorder): Removed invalidisInvert since its dead code 
         (any callers that set this to true were already ensuring that their color was valid).
         Updated drawConvexPolygon call to use FloatPoints instead of IntPoints.
        (WebCore::RenderObject::paintBorder): Updated to remove invalidisInvert argument from drawBorder call.
        (WebCore::RenderObject::paintOutline): ditto.
        * rendering/RenderFlow.cpp: (WebCore::RenderFlow::paintOutlineForLine): ditto.
        * rendering/RenderObject.h: Updated arguments for drawBorder and drawBorderArc.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::getBaselineOfLastLineBox): Changed isRootLineBox argument to true when setting line height.
          Added case for when there's no children to check for hasLineIfEmpty.
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp: (WebCore::RenderBlock::layoutInlineChildren): Changed isRootLineBox argument to true when setting line height.
        * rendering/RenderButton.h: (WebCore::RenderButton::hasLineIfEmpty): Added so buttons always get a line height.
        * rendering/RenderMenuList.h: (WebCore::RenderMenuList::hasLineIfEmpty): ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox): Added code to check hasLineIfEmpty to give flex boxes line height.
        (WebCore::RenderFlexibleBox::layoutVerticalBox): ditto.

        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::adjustRenderStyle): Moved the appearance adjustment code into adjust style.
        * rendering/RenderBox.cpp: (WebCore::RenderBox::paintBoxDecorations): Lets the theme paint "decorations", like the arrow control and gradients
         immediately after painting the background.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): This now checks whether the control is styled, and adjusts the appearance property appropriately.
        For styled selects, instead of setting the appearance to none, which is what we do for other styled controls, we set the appearance
        to MenulistButtonAppearance, which indicates that we will draw the arrow controls and button appearance in the engine.
        (WebCore::RenderTheme::paintDecorations): Added. Paints MenulistButtonAppearance in a different function, 
         so the arrow control will draw at the right time (after the background).
        (WebCore::RenderTheme::paint): Added case for MenulistButtonAppearance.
        (WebCore::RenderTheme::paintBorderOnly): ditto.
        (WebCore::RenderTheme::isControlContainer): Removed cases for MenuListAppearance and MenulistButtonAppearance since the baseline is no longer provided by the theme.
        (WebCore::RenderTheme::adjustMenuListButtonStyle): Added.
        * rendering/RenderTheme.h: (WebCore::RenderTheme::paintMenuListButton): Added.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled): Removed code that made selects unstyle-able.
        (WebCore::RenderThemeMac::baselinePosition): Removed cases for MenuListAppearance and MenulistButtonAppearance.
        (WebCore::RenderThemeMac::popupButtonPadding): Added top and bottom padding so empty popups have the right baseline.
        (WebCore::TopGradientInterpolate): Added.
        (WebCore::BottomGradientInterpolate): Added.
        (WebCore::MainGradientInterpolate): Added.
        (WebCore::RenderThemeMac::paintMenuListButtonGradients): Added.  Draws gradients for styled popup menu button appearance.
        (WebCore::RenderThemeMac::paintMenuListButton): Calls paintMenuListButtonGradients, and draws arrow control.
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle): Added to set padding and border radius to account for the arrow control size and font size.

2006-08-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Changed some time()-related code to be more platform independent

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::isIconExpiredForIconURL):
        (WebCore::IconDatabase::getOrCreateIconDataCache):
        (WebCore::IconDatabase::setIconDataForIconURL):

2006-08-25  David Harrison  <harrison@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4416432> Radio buttons and Checkboxes in AXWebAreas don't fill in their AXTitle attribute

        * bridge/mac/WebCoreAXObject.mm:
        (labelForElement):
        New. Returns the HTMLLabelElement, if any, for the specified Element.
        
        (-[WebCoreAXObject title]):
        For input elements, return the innerHTML() of the labelForElement().

2006-08-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Changed some debugging-only code to be more platform independent

        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup):
        (WebCore::IconDatabase::syncDatabase):

2006-08-25  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10561
        Qt platform build fixes.

        * platform/qt/FrameQt.h:
        * platform/qt/ScreenQt.cpp:
        (WebCore::qwidgetForPage):
        (WebCore::screenRect):
        (WebCore::screenDepth):
        (WebCore::usableScreenRect):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        * platform/qt/WidgetQt.cpp:

2006-08-25  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Finally fix font caching. WebKit+Qt now works
        out of the box without any further patches :-)

        * platform/qt/FontDataQt.cpp:
        (WebCore::FontData::platformDestroy):
        * platform/qt/FontPlatformData.h:
        * platform/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::isFixedPitch):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::fontPtr):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):

2006-08-25  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10559
        Confirm to WebKit style guide - last fixes :-)

        * platform/ResourceLoaderClient.h:
        * platform/qt/ComboBoxQt.cpp:
        * platform/qt/FrameQt.cpp:
        (WebCore::doScroll):
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::openURL):
        (WebCore::FrameQt::submitForm):
        (WebCore::FrameQt::setTitle):
        (WebCore::FrameQt::passSubframeEventToSubframe):
        (WebCore::FrameQt::registerCommandForUndo):
        (WebCore::FrameQt::registerCommandForRedo):
        (WebCore::FrameQt::keyEvent):
        (WebCore::FrameQt::setFrameGeometry):
        * platform/qt/GlyphMapQt.cpp:
        (WebCore::GlyphMap::fillPage):
        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::toQtCompositionMode):
        (WebCore::toQtLineCap):
        (WebCore::toQtLineJoin):
        (WebCore::TextShadow::TextShadow):
        (WebCore::GraphicsContextPlatformPrivate::p):
        * platform/qt/ImageQt.cpp:
        (WebCore::FrameData::clear):
        (WebCore::Image::supportsType):
        * platform/qt/IntSizeQt.cpp:
        * platform/qt/LineEditQt.cpp:
        * platform/qt/ListBoxQt.cpp:
        * platform/qt/PageQt.cpp:
        (WebCore::Page::windowRect):
        * platform/qt/PathQt.cpp:
        (WebCore::Path::~Path):
        * platform/qt/ResourceLoaderCurl.cpp:
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        (WebCore::ResourceLoader::receivedResponse):
        * platform/qt/ResourceLoaderManager.cpp:
        (WebCore::headerCallback):
        (WebCore::ResourceLoaderManager::downloadTimerCallback):
        (WebCore::ResourceLoaderManager::add):
        * platform/qt/ScreenQt.cpp:
        (WebCore::screenRect):
        (WebCore::usableScreenRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::setParentWidget):
        (WebCore::ScrollView::addChild):
        * platform/qt/SharedTimerQt.cpp:
        (WebCore::setSharedTimerFiredFunction):
        * platform/qt/SharedTimerQt.h:
        (WebCore::SharedTimerQt::SharedTimerQt):
        (WebCore::SharedTimerQt::fire):
        * platform/qt/SystemTimeQt.cpp:
        (WebCore::currentTime):
        * platform/qt/TextEditQt.cpp:
        (WebCore::PlatformTextEdit::setParentWidget):
        (WebCore::PlatformTextEdit::text):
        (WebCore::PlatformTextEdit::sizeWithColumnsAndRows):

2006-08-24  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        Follow up for...
        <rdar://problem/4471481> Represent misspellings in AXAttributedStringForTextMarkerRange

        Fix bug I introduced in r15959.
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Use topDocument in case we are in a subframe (we want the start/end of the overall page).

2006-08-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Alice

        Fixed my previous checkin, which was pruning the users entire icon db on startup everytime

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::retainIconForPageURL): Bind the PageURL to argument 1, as SQL bindings
          are indexed to 1, not 0

2006-08-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Frame refactoring: changed FrameView clients so they no longer assume that
        FrameViews are Widgets that can tell you things about the platform, in 
        preparation for divorcing FrameViews from heavy-weight Widgets altogether.

        This patch makes Page, rather than Widget, responsible for answering
        questions about the screen (scale factor, color depth, etc.). Refactoring 
        aside, I think this makes more sense, since (a) the screen has nothing to do 
        with any particular widget and (b) Page was already half-responsible for
        answering those questions, anyway.

        Plus some random Windows build fix goodness.

        Layout tests still pass.

2006-08-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Hyatt.

        Allow changing the background color WebCore draws under transparent page backgrounds.
        No automated way to test. All tests pass, no performance regression.

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setBaseBackgroundColor:]):
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameView::baseBackgroundColor):
        (WebCore::FrameView::setBaseBackgroundColor):
        * page/FrameView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2006-08-24  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10169
          REGRESSION: NativeTextArea: Text dragged from <input type=text> to textarea disappears
        - eliminate the EditCommandPtr class from editing; use PassRefPtr and RefPtr instead
        - other editing-related cleanup

        Test: fast/forms/drag-into-textarea.html

        * bridge/mac/FrameMac.h: Changed EditCommandPtr parameters to use PassRefPtr<EditCommand> instead.
        * bridge/win/FrameWin.h: Ditto.
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::registerCommandForUndoOrRedo): Ditto.
        (WebCore::FrameMac::registerCommandForUndo): Ditto.
        (WebCore::FrameMac::registerCommandForRedo): Ditto.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        Use applyCommand instead of EditCommandPtr. Also remove now-unneeded document parameter.
        (-[WebCoreFrameBridge moveSelectionToDragCaret:smartMove:]): Ditto.
        (-[WebCoreFrameBridge deleteSelectionWithSmartDelete:]): Ditto.

        * editing/AppendNodeCommand.h: Removed document parameter from constructor. Changed new child
        parameter to be a PassRefPtr. Reversed order of child and parent parameters.
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand): Ditto.
        (WebCore::AppendNodeCommand::doApply): Ditto.
        (WebCore::AppendNodeCommand::doUnapply): Ditto.

        * editing/ApplyStyleCommand.h: Removed document parameter from constructor.
        * editing/ApplyStyleCommand.cpp: (WebCore::ApplyStyleCommand::ApplyStyleCommand): Ditto.

        * editing/BreakBlockquoteCommand.h: Removed unneeded include of DeprecatedPtrList.h.
        * editing/BreakBlockquoteCommand.cpp: Moved the include of DeprecatedPtrList.h here.
        (WebCore::BreakBlockquoteCommand::doApply): Changed code to construct a Selection explicitly
        since setEndingSelection is no longer overloaded for Position.

        * editing/CompositeEditCommand.h: Added isFirstCommand function. Changed m_cmds from
        a DeprecatedValueList<EditCommandPtr> to a Vector<RefPtr<EditCommand>> and renamed it
        m_commands and made both doUnapply and doReapply private.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::doUnapply): Rewrote to use m_commands.
        (WebCore::CompositeEditCommand::doReapply): Ditto.
        (WebCore::CompositeEditCommand::applyCommandToComposite): Removed code to explicitly set up
        starting and ending selection -- now done inside setParent. Rewrote to use m_commands.
        (WebCore::CompositeEditCommand::applyStyle): Changed to not use EditCommandPtr.
        (WebCore::CompositeEditCommand::applyStyledElement): Ditto.
        (WebCore::CompositeEditCommand::removeStyledElement): Ditto.
        (WebCore::CompositeEditCommand::insertParagraphSeparator): Ditto.
        (WebCore::CompositeEditCommand::insertNodeBefore): Ditto.
        (WebCore::CompositeEditCommand::appendNode): Ditto.
        (WebCore::CompositeEditCommand::removeNode): Ditto.
        (WebCore::CompositeEditCommand::removeNodePreservingChildren): Ditto.
        (WebCore::CompositeEditCommand::splitTextNode): Ditto.
        (WebCore::CompositeEditCommand::splitElement): Ditto.
        (WebCore::CompositeEditCommand::mergeIdenticalElements): Ditto.
        (WebCore::CompositeEditCommand::wrapContentsInDummySpan): Ditto.
        (WebCore::CompositeEditCommand::splitTextNodeContainingElement): Ditto.
        (WebCore::CompositeEditCommand::joinTextNodes): Ditto.
        (WebCore::CompositeEditCommand::inputText): Ditto.
        (WebCore::CompositeEditCommand::insertTextIntoNode): Ditto.
        (WebCore::CompositeEditCommand::deleteTextFromNode): Ditto.
        (WebCore::CompositeEditCommand::replaceTextInNode): Ditto.
        (WebCore::CompositeEditCommand::deleteSelection): Ditto.
        (WebCore::CompositeEditCommand::removeCSSProperty): Ditto.
        (WebCore::CompositeEditCommand::removeNodeAttribute): Ditto. Also fixed a bug where the code
        would not remove an empty attribute -- will not come up in practice, but wrong in theory.
        (WebCore::CompositeEditCommand::setNodeAttribute): Changed to not use EditCommandPtr.
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt): Ditto.
        (WebCore::CompositeEditCommand::deleteInsignificantText): Rewrote to use a for loop.
        (WebCore::CompositeEditCommand::moveParagraphs): Changed to not use EditCommandPtr.
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Changed code to construct a
        Selection explicitly since setEndingSelection is no longer overloaded for Position.
        (WebCore::createBlockPlaceholderElement): Collapsed this code so that the
        block placeholder class string is no longer spread across multiple functions.
        Perhaps we can get rid of this altogether at some point.

        * editing/DeleteFromTextNodeCommand.h: Removed unneeded document parameter from one constructor.
        Also removed unneeded destructor.
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::DeleteFromTextNodeCommand): Ditto.

        * editing/DeleteSelectionCommand.h: Removed unneeded document parameter from one constructor.
        * editing/DeleteSelectionCommand.cpp: (WebCore::DeleteSelectionCommand::DeleteSelectionCommand): Ditto.

        * editing/EditCommand.h: Removed ECommandState, isCompositeStep(), parent(), state(), setState(),
        and most overloads of setStartingSelection() and setEndingSelection(). Made document() protected
        and non-virtual. Made setStartingSelection() setEndingSelection(), and styleAtPosition() protected.
        Made doApply(), doUnapply(), and doReapply() private. Added startingRootEditableElement(),
        endingRootEditableElement(), m_startingRootEditableElement, and m_endingRootEditableElement, which
        are needed so we can determine which editable elements an editing operation affects. Changed setParent()
        and m_parent to use CompositeEditCommand instead of EditCommand. Removed EditCommandPtr. Added
        applyCommand() function that's convenient to use on a newly-created command.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand): Removed initialization for m_state, and added it for starting
        and ending root editable elements.
        (WebCore::EditCommand::apply): Simplified check for top level by just checking m_parent. Removed
        code to assert and set m_start. Eliminated use of EditCommandPtr.
        (WebCore::EditCommand::unapply): Ditto.
        (WebCore::EditCommand::reapply): Ditto.
        (WebCore::EditCommand::setStartingSelection): Changed to set root editable element too. Also made this
        not change the starting selection of the parent unless this is the first command in the parent -- didn't
        make sense the way it was.
        (WebCore::EditCommand::setEndingSelection): Changed to set root editable element too.
        (WebCore::EditCommand::setParent): Added code to set the starting and ending selection on the child
        based on the ending selection of the parent, formerly done by callers.
        (WebCore::applyCommand): Added.

        * editing/FormatBlockCommand.h: Tweaked formatting.
        * editing/FormatBlockCommand.cpp: (WebCore::FormatBlockCommand::FormatBlockCommand): Ditto.
        * editing/InsertLineBreakCommand.h: Ditto.
        * editing/InsertLineBreakCommand.cpp: (WebCore::InsertLineBreakCommand::doApply):

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::splitTreeToNode): Removed use of EditCommandPtr.
        (WebCore::IndentOutdentCommand::outdentParagraph): Updated for change to list type enum.
        (WebCore::IndentOutdentCommand::outdentRegion): Removed use of EditCommandPtr.

        * editing/InsertIntoTextNodeCommand.h: Removed unneeded document parameter to constructor.
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::InsertIntoTextNodeCommand): Ditto.

        * editing/InsertListCommand.h: Renamed EListType to EList, and took the "Type" suffix off
        the constants.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::InsertListCommand): Ditto.
        (WebCore::InsertListCommand::doApply): Ditto.

        * editing/InsertNodeBeforeCommand.h: Removed unneeded document parameter from constructor
        and changed the parameter of the node to insert to a PassRefPtr.
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand): Ditto.

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Remvoed use of EditCommandPtr.

        * editing/InsertTextCommand.h: Changed insertTab to take const Position&.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Ditto.
        (WebCore::InsertTextCommand::insertTab): Ditto.

        * editing/JSEditor.h: Tweaked formatting and names.
        * editing/JSEditor.cpp: Ditto. Also changed places that use EditCommandPtr.

        * editing/JoinTextNodesCommand.h: Removed unneeeded document pointer
        * editing/JoinTextNodesCommand.cpp:
        (WebCore::JoinTextNodesCommand::JoinTextNodesCommand): Ditto.
        * editing/MergeIdenticalElementsCommand.h: Ditto.
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::MergeIdenticalElementsCommand): Ditto.

        * editing/ModifySelectionListLevel.h: Changed EListType to be named Type and be a member of
        IncreaseSelectionListLevelCommand. Also changed m_listElement to be a RefPtr<Node>.
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::getStartEndListChildren): Changed parameters to be references instead of pointers.
        (WebCore::IncreaseSelectionListLevelCommand::IncreaseSelectionListLevelCommand):
        Changed to use Type instead of EListType.
        (WebCore::canIncreaseListLevel): Changed parameters to be references instead of pointers.
        (WebCore::IncreaseSelectionListLevelCommand::doApply): Updated for change to canIncreaseListLevel.
        (WebCore::IncreaseSelectionListLevelCommand::canIncreaseSelectionListLevel): Ditto.
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelWithType):
        Changed to not use EditCommandPtr.
        (WebCore::canDecreaseListLevel): Changed parameters to be references instead of pointers.
        (WebCore::DecreaseSelectionListLevelCommand::doApply): Updated for change to canDecreaseListLevel.
        (WebCore::DecreaseSelectionListLevelCommand::canDecreaseSelectionListLevel): Ditto.
        (WebCore::DecreaseSelectionListLevelCommand::decreaseSelectionListLevel): Changed to not use
        EditCommandPtr.

        * editing/MoveSelectionCommand.h: Removed unnecessary document parameter and changed the fragment
        parameter to be a PassRefPtr.
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::MoveSelectionCommand): Ditto.
        (WebCore::MoveSelectionCommand::doApply): Got rid of use of EditCommandPtr.

        * editing/RebalanceWhitespaceCommand.h: Removed unnecessary document parameter.
        * editing/RebalanceWhitespaceCommand.cpp:
        (WebCore::RebalanceWhitespaceCommand::RebalanceWhitespaceCommand): Ditto.
        (WebCore::RebalanceWhitespaceCommand::doApply): Got rid of use of EditCommandPtr.

        * editing/RemoveCSSPropertyCommand.h: Tweaked formatting.

        * editing/RemoveNodeAttributeCommand.h: Removed unnecessary document parameter.
        * editing/RemoveNodeAttributeCommand.cpp:
        (WebCore::RemoveNodeAttributeCommand::RemoveNodeAttributeCommand): Ditto.

        * editing/RemoveNodeCommand.h: Removed unnecessary document parameter.
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::RemoveNodeCommand): Ditto.

        * editing/RemoveNodePreservingChildrenCommand.h: Removed unnecessary document parameter.
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::RemoveNodePreservingChildrenCommand): Ditto.

        * editing/ReplaceSelectionCommand.h: Change fragment parameter to a PassRefPtr.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Ditto.
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand): Ditto.
        (WebCore::ReplaceSelectionCommand::doApply): Ditto.
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement): Ditto.

        * editing/Selection.h: Changed SEL_DEFAULT_AFFINITY to be a constant rather than
        a macro. Added constructors that take visible positions. Changed setBase and
        setExtent to take const Position& for better efficiency.
        * editing/Selection.cpp:
        (WebCore::Selection::Selection): Removed unnecessary double initialization of m_state
        and m_baseIsFirst in existing constructors. Added VisiblePosition-based constructors.

        * editing/SetNodeAttributeCommand.h: Removed unnneeded document parameter.
        * editing/SetNodeAttributeCommand.cpp:
        (WebCore::SetNodeAttributeCommand::SetNodeAttributeCommand): Ditto.

        * editing/SplitElementCommand.h: Removed unnneeded document parameter.
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::SplitElementCommand): Ditto.

        * editing/SplitTextNodeCommand.h: Removed unnneeded document parameter.
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::SplitTextNodeCommand): Ditto.

        * editing/SplitTextNodeContainingElementCommand.h: Removed unnneeded document parameter.
        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::SplitTextNodeContainingElementCommand): Ditto.

        * editing/TypingCommand.h: Replaced uses of EditCommandPtr with EditCommand*.
        Renamed openForMoveTyping() with isOpenForMoreTyping().
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Updated to remove use of EditCommandPtr.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.
        (WebCore::TypingCommand::insertText): Ditto.
        (WebCore::TypingCommand::insertLineBreak): Ditto.
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent): Ditto.
        (WebCore::TypingCommand::insertParagraphSeparator): Ditto.
        (WebCore::TypingCommand::isOpenForMoreTypingCommand): Ditto.
        (WebCore::TypingCommand::closeTyping): Ditto.
        (WebCore::TypingCommand::typingAddedToOpenCommand): Ditto.
        (WebCore::TypingCommand::insertTextRunWithoutNewlines): Ditto.

        * editing/WrapContentsInDummySpanCommand.h: Removed unnneeded document parameter.
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::WrapContentsInDummySpanCommand): Ditto.

        * editing/htmlediting.h: Changed type of NON_BREAKING_SPACE to UChar instead of
        unsigned short.

        * page/Frame.h: Changed lastEditCommand() to return an EditCommand* and changed
        appliedEditing(), unappliedEditing(), reappliedEditing(), registerCommandForUndo(),
        and registerCommandForRedo() to take PassRefPtr<EditCommand>.
        * page/FramePrivate.h: Changed m_lastEditCommand to be a RefPtr<EditCommand>.
        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL): Fixed for change to m_lastEditCommand.
        (WebCore::Frame::setFocusNodeIfNeeded): Call the rootEditableElement function
        from Selection to simplify the code.
        (WebCore::Frame::selectAll): Ditto.
        (WebCore::Frame::lastEditCommand): Updated for change to m_lastEditCommand.
        (WebCore::dispatchEditableContentChangedEvents): Added. This sends an event to
        both of the root editable elements involved in a change -- the start selection
        might be in a different element than the end selection.
        (WebCore::Frame::appliedEditing): Changed to call dispatchEditableContentChangedEvents,
        and to do it before setting the ending selection. Also update to use PassRefPtr instead
        of EditCommandPtr and change the order of setting m_lastEditCommand since passing it
        to registerCommandForUndo will take ownership and set it to 0.
        (WebCore::Frame::unappliedEditing): Ditto.
        (WebCore::Frame::reappliedEditing): Ditto.
        (WebCore::Frame::computeAndSetTypingStyle): Updated for removal of EditCommandPtr.
        (WebCore::Frame::applyStyle): Ditto.
        (WebCore::Frame::applyParagraphStyle): Ditto.

        * platform/gdk/FrameGdk.h: Updated for above changes.
        * platform/gdk/TemporaryLinkStubs.cpp: Updated for above changes.
        * platform/win/TemporaryLinkStubs.cpp: Updated for above changes.

2006-08-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Alice

        <rdar://problem/4697973> - Unacceptable delay on startup
        <rdar://problem/4690949> - Need to correctly prune unretained pageurls and icons on startup

        This patch was started by me and finished by Mark Rowe - we now special case all retains during
        startup into one huge sql transaction.  Also we track PageURL retains instead of IconURLs so pruning works right.
        Testing with reasonable sets of bookmarks/history (3000), startup time is neglibile.  Testing with a huge set of 
        bookmarks (40,000), startup has a noticable delay, but reasonable, and is inline with shipping safari which also 
        has a noticeable delay.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::open): adding an initialStartupTransaction and pageRetainStatement
        (WebCore::IconDatabase::close): do cleanup on the initialStartupSQL stuff
        (WebCore::IconDatabase::retainIconForPageURL): Track initial PageURL retains in the temporary table
        (WebCore::IconDatabase::releaseIconForPageURL): Ditto
        (WebCore::IconDatabase::retainIconURL): We no longer special case this on startup
        (WebCore::IconDatabase::releaseIconURL): We no longer special case this on startup
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup): Handle the big transaction correctly and quickly
        (WebCore::IconDatabase::syncDatabase): Change the timing log message
        * loader/icon/IconDatabase.h:
        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::bindText16): Added this - for reusing commonly used statements by just rebinding parameters.
        * loader/icon/SQLStatement.h:

2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support

        * CMakeLists.txt:
            Remove KCanvasMatrix.cpp because it no longer exists
            Remove platform/qt/test
        * platform/FloatSize.h:
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        * platform/image-decoders/xbm/XBMImageDecoder.cpp:
            Added PLATFORM(QT) hooks in the image-decoders/, as they also need
            to work for Qt, not only for Cairo.
        * platform/qt/qt-encodings.txt: Added (required for build).

2006-08-24  Adam Roben  <aroben@apple.com>

        Fixing a typo from last patch.

        * kcanvas/device/qt/KRenderingPaintServerQt.cpp:
        (WebCore::KRenderingPaintServerQt::setPenProperties):

2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Final cleanup to conform to WebKit coding style!

        * kcanvas/device/qt/KCanvasClipperQt.cpp:
        (WebCore::KCanvasClipperQt::applyClip):
        * kcanvas/device/qt/KCanvasClipperQt.h:
        * kcanvas/device/qt/KCanvasPathQt.cpp:
        * kcanvas/device/qt/KCanvasPathQt.h:
        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
        * kcanvas/device/qt/KRenderingDeviceQt.h:
        * kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp:
        (WebCore::KRenderingPaintServerLinearGradientQt::KRenderingPaintServerLinearGradientQt):
        (WebCore::KRenderingPaintServerRadialGradientQt::KRenderingPaintServerRadialGradientQt):
        * kcanvas/device/qt/KRenderingPaintServerGradientQt.h:
        * kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp:
        (WebCore::KRenderingPaintServerPatternQt::KRenderingPaintServerPatternQt):
        * kcanvas/device/qt/KRenderingPaintServerPatternQt.h:
        * kcanvas/device/qt/KRenderingPaintServerQt.cpp:
        (WebCore::KRenderingPaintServerQt::setPenProperties):
        * kcanvas/device/qt/KRenderingPaintServerQt.h:
        * kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp:
        (WebCore::KRenderingPaintServerSolidQt::KRenderingPaintServerSolidQt):
        (WebCore::KRenderingPaintServerSolidQt::renderPath):
        * kcanvas/device/qt/KRenderingPaintServerSolidQt.h:
        * kcanvas/device/qt/RenderPathQt.cpp:
        * kcanvas/device/qt/RenderPathQt.h:
        * platform/qt/AffineTransformQt.cpp:
        * platform/qt/BrowserExtensionQt.cpp:
        * platform/qt/BrowserExtensionQt.h:
        * platform/qt/ColorQt.cpp:
        (WebCore::Color::Color):
        * platform/qt/ComboBoxQt.cpp:
        (WebCore::PlatformComboBox::PlatformComboBox):
        (WebCore::PlatformComboBox::~PlatformComboBox):
        (WebCore::PlatformComboBox::setParentWidget):
        (WebCore::PlatformComboBox::appendGroupLabel):
        * platform/qt/CookieJarQt.cpp:
        * platform/qt/CursorQt.cpp:
        (WebCore::Cursors::Cursors::self):
        * platform/qt/FloatPointQt.cpp:
        * platform/qt/FloatRectQt.cpp:
        * platform/qt/FontCacheQt.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::createFontPlatformData):
        * platform/qt/FontDataQt.cpp:
        * platform/qt/FontPlatformData.h:
        * platform/qt/FontPlatformDataQt.cpp:
        * platform/qt/FontQt.cpp:
        (WebCore::Font::operator QFont):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::openURL):
        (WebCore::FrameQt::submitForm):
        (WebCore::FrameQt::urlSelected):
        (WebCore::FrameQt::keyEvent):
        * platform/qt/FrameQt.h:
        * platform/qt/GlyphMapQt.cpp:
        * platform/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::setFocusRingClip):
        (WebCore::GraphicsContext::clip):
        * platform/qt/ImageQt.cpp:
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        * platform/qt/ImageSourceQt.cpp:
        * platform/qt/IntPointQt.cpp:
        * platform/qt/IntRectQt.cpp:
        * platform/qt/IntSizeQt.cpp:
        * platform/qt/LineEditQt.cpp:
        (WebCore::PlatformLineEdit::PlatformLineEdit):
        (WebCore::PlatformLineEdit::~PlatformLineEdit):
        (WebCore::PlatformLineEdit::setParentWidget):
        (WebCore::PlatformLineEdit::addSearchResult):
        * platform/qt/ListBoxQt.cpp:
        (WebCore::ListBox::ListBox):
        (WebCore::ListBox::~ListBox):
        (WebCore::ListBox::setParentWidget):
        * platform/qt/PageQt.cpp:
        (WebCore::Page::windowRect):
        (WebCore::Page::setWindowRect):
        * platform/qt/PathQt.cpp:
        (WebCore::Path::addArc):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/qt/PlatformMouseEventQt.cpp:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::getStylePainterAndWidgetFromPaintInfo):
        (WebCore::RenderThemeQt::applyTheme):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        * platform/qt/ResourceLoaderCurl.cpp:
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        (WebCore::ResourceLoader::receivedResponse):
        * platform/qt/ResourceLoaderManager.cpp:
        (WebCore::ResourceLoaderManager::add):
        * platform/qt/ResourceLoaderManager.h:
        * platform/qt/ScreenQt.cpp:
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::handleKeyEvent):
        * platform/qt/ScrollViewCanvasQt.h:
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/SharedTimerQt.cpp:
        * platform/qt/SharedTimerQt.h:
        (WebCore::SharedTimerQt::inst):
        * platform/qt/StringQt.cpp:
        * platform/qt/SystemTimeQt.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/qt/TextEditQt.cpp:
        (WebCore::PlatformTextEdit::PlatformTextEdit):
        (WebCore::PlatformTextEdit::~PlatformTextEdit):
        (WebCore::PlatformTextEdit::setParentWidget):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setQWidget):

2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support

        * CMakeLists.txt:
        * platform/qt/FrameQt.cpp: Added.
        (WebCore::doScroll):
        (WebCore::FrameView::isFrameView):
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::init):
        (WebCore::FrameQt::~FrameQt):
        (WebCore::FrameQt::openURL):
        (WebCore::FrameQt::submitForm):
        (WebCore::FrameQt::urlSelected):
        (WebCore::FrameQt::userAgent):
        (WebCore::FrameQt::runJavaScriptAlert):
        (WebCore::FrameQt::runJavaScriptConfirm):
        (WebCore::FrameQt::locationbarVisible):
        (WebCore::FrameQt::setTitle):
        (WebCore::FrameQt::createFrame):
        (WebCore::FrameQt::passWheelEventToChildWidget):
        (WebCore::FrameQt::passSubframeEventToSubframe):
        (WebCore::FrameQt::objectContentType):
        (WebCore::FrameQt::createPlugin):
        (WebCore::FrameQt::passMouseDownEventToWidget):
        (WebCore::FrameQt::menubarVisible):
        (WebCore::FrameQt::personalbarVisible):
        (WebCore::FrameQt::statusbarVisible):
        (WebCore::FrameQt::toolbarVisible):
        (WebCore::FrameQt::createEmptyDocument):
        (WebCore::FrameQt::markedTextRange):
        (WebCore::FrameQt::incomingReferrer):
        (WebCore::FrameQt::mimeTypeForFileName):
        (WebCore::FrameQt::markMisspellingsInAdjacentWords):
        (WebCore::FrameQt::markMisspellings):
        (WebCore::FrameQt::lastEventIsMouseUp):
        (WebCore::FrameQt::saveDocumentState):
        (WebCore::FrameQt::restoreDocumentState):
        (WebCore::FrameQt::openURLRequest):
        (WebCore::FrameQt::scheduleClose):
        (WebCore::FrameQt::unfocusWindow):
        (WebCore::FrameQt::focusWindow):
        (WebCore::FrameQt::overrideMediaType):
        (WebCore::FrameQt::addMessageToConsole):
        (WebCore::FrameQt::runJavaScriptPrompt):
        (WebCore::FrameQt::getEmbedInstanceForWidget):
        (WebCore::FrameQt::getObjectInstanceForWidget):
        (WebCore::FrameQt::getAppletInstanceForWidget):
        (WebCore::FrameQt::registerCommandForUndo):
        (WebCore::FrameQt::registerCommandForRedo):
        (WebCore::FrameQt::clearUndoRedoOperations):
        (WebCore::FrameQt::issueUndoCommand):
        (WebCore::FrameQt::issueRedoCommand):
        (WebCore::FrameQt::issueCutCommand):
        (WebCore::FrameQt::issueCopyCommand):
        (WebCore::FrameQt::issuePasteCommand):
        (WebCore::FrameQt::issuePasteAndMatchStyleCommand):
        (WebCore::FrameQt::issueTransposeCommand):
        (WebCore::FrameQt::respondToChangedSelection):
        (WebCore::FrameQt::respondToChangedContents):
        (WebCore::FrameQt::shouldChangeSelection):
        (WebCore::FrameQt::partClearedInBegin):
        (WebCore::FrameQt::canGoBackOrForward):
        (WebCore::FrameQt::handledOnloadEvents):
        (WebCore::FrameQt::canPaste):
        (WebCore::FrameQt::canRedo):
        (WebCore::FrameQt::canUndo):
        (WebCore::FrameQt::print):
        (WebCore::FrameQt::shouldInterruptJavaScript):
        (WebCore::FrameQt::keyEvent):
        (WebCore::FrameQt::receivedResponse):
        (WebCore::FrameQt::receivedData):
        (WebCore::FrameQt::receivedAllData):
        (WebCore::FrameQt::setFrameGeometry):
        * platform/qt/FrameQt.h: Added.
        * platform/qt/ScrollViewCanvasQt.cpp: Added.
        (WebCore::ScrollViewCanvasQt::ScrollViewCanvasQt):
        (WebCore::ScrollViewCanvasQt::paintEvent):
        (WebCore::ScrollViewCanvasQt::sizeHint):
        (WebCore::ScrollViewCanvasQt::mouseMoveEvent):
        (WebCore::ScrollViewCanvasQt::mousePressEvent):
        (WebCore::ScrollViewCanvasQt::mouseReleaseEvent):
        (WebCore::ScrollViewCanvasQt::keyPressEvent):
        (WebCore::ScrollViewCanvasQt::keyReleaseEvent):
        (WebCore::ScrollViewCanvasQt::handleKeyEvent):
        * platform/qt/ScrollViewCanvasQt.h: Added.
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setParentWidget):

2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by ap.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support

        * platform/qt/FontCacheQt.cpp: Added.
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::createFontPlatformData):
        * platform/qt/FontDataQt.cpp: Added.
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::containsCharacters):
        (WebCore::FontData::determinePitch):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/qt/FontPlatformData.h: Added.
        * platform/qt/FontPlatformDataQt.cpp: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::isFixedPitch):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/qt/FontQt.cpp: Added.
        (WebCore::Font::operator QFont):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        * platform/qt/GlyphMapQt.cpp: Added.
        (WebCore::GlyphMap::fillPage):

2006-08-24  David Harrison  <harrison@apple.com>

        Reinstate r15966 because layout test changes are correct.

        <rdar://problem/4522205> Represent controls in AXAttributedStringForTextMarkerRange

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):

2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by ap.

        http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support (Part II)

        Adapt the KCanvas Qt device to Rob's KCanvasMatrix removal.
        Use AffineTransform everywhere instead.

        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
        (WebCore::KRenderingDeviceContextQt::KRenderingDeviceContextQt):
        (WebCore::KRenderingDeviceContextQt::concatCTM):
        (WebCore::KRenderingDeviceContextQt::ctm):
        * kcanvas/device/qt/KRenderingDeviceQt.h:
        * kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp:
        (WebCore::KRenderingPaintServerLinearGradientQt::setup):
        (WebCore::KRenderingPaintServerRadialGradientQt::setup):

2006-08-24  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10524
        svg transform: comma delimiting breaks display

        Properly parse transforms which use ',' as seperators.

        * ksvg2/svg/SVGTransformable.cpp:
        (SVGTransformable::parseTransformAttribute):

2006-08-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - added an assert to make it slightly easier to debug the common case of
          calling document() on a node of 0

        * dom/Node.h: (WebCore::Node::document): ASSERT(this).

2006-08-23  David Hyatt  <hyatt@apple.com>

        Refactor Cairo and CoreGraphics to use platform ifdefs.  This patch
        separates the graphics engines from their respective platforms and replaces
        #ifdef PLATFORM(MAC) and PLATFORM(WIN) with PLATFORM(CG) and PLATFORM(CAIRO).

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * platform/AffineTransform.h:
        * platform/Color.h:
        * platform/Cursor.h:
        * platform/FloatPoint.h:
        * platform/FloatRect.h:
        * platform/FloatSize.h:
        * platform/Font.h:
        * platform/FontData.h:
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        * platform/GraphicsContext.h:
        * platform/Image.h:
        * platform/ImageSource.h:
        * platform/IntPoint.h:
        * platform/IntRect.h:
        * platform/IntSize.h:
        * platform/ResourceLoader.h:
        * platform/ResourceLoaderClient.h:
        * platform/Widget.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        * platform/cairo/ImageCairo.cpp:
        * platform/cairo/ImageSourceCairo.cpp:
        * platform/cg/AffineTransformCG.cpp:
        * platform/cg/FloatPointCG.cpp: Added.
        * platform/cg/FloatRectCG.cpp: Added.
        * platform/cg/FloatSizeCG.cpp: Added.
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::setFocusRingClip):
        (WebCore::GraphicsContext::clearFocusRingClip):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        * platform/cg/GraphicsContextPlatformPrivate.h: Added.
        (WebCore::GraphicsContextPlatformPrivate:::m_cgContext):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        * platform/cg/ImageCG.cpp: Added.
        (WebCore::Image::drawTiled):
        * platform/cg/ImageSourceCG.cpp: Added.
        * platform/cg/IntPointCG.cpp: Added.
        * platform/cg/IntRectCG.cpp: Added.
        * platform/cg/IntSizeCG.cpp: Added.
        * platform/cg/PDFDocumentImage.cpp: Added.
        (WebCore::PDFDocumentImage::adjustCTM):
        * platform/cg/PDFDocumentImage.h: Added.
        * platform/cg/PathCG.cpp:
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        * platform/image-decoders/xbm/XBMImageDecoder.cpp:
        * platform/mac/FloatPointMac.mm:
        * platform/mac/FloatRectMac.mm:
        * platform/mac/FloatSizeMac.mm:
        * platform/mac/GraphicsContextMac.mm:
        * platform/mac/ImageMac.mm:
        * platform/mac/ImageSourceMac.cpp: Removed.
        * platform/mac/IntPointMac.mm:
        * platform/mac/IntRectMac.mm:
        * platform/mac/IntSizeMac.mm:
        * platform/mac/PDFDocumentImage.h: Removed.
        * platform/mac/PDFDocumentImage.mm: Removed.

2006-08-23  David Hyatt  <hyatt@apple.com>

        Remove the ifdef for platform scrollbars vs. engine scrollbars until
        engine scrollbars actually exist.

        * platform/ScrollBar.h:
        (WebCore::ScrollBar::hasPlatformScrollBars):

2006-08-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        Removed the poorly named next/previousVisiblePosition
        and use next/previousCandidate and next/previousVisuallyDistinctCandidate.
        Removed the unused VisiblePosition::maxOffset()

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):
        (WebCore::VisiblePosition::canonicalPosition):
        * editing/VisiblePosition.h: 

2006-08-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Alexey. Landed by rwlbuis.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support (Part II)

        * platform/qt/GraphicsContextQt.cpp: Added.
        (WebCore::toQtCompositionMode):
        (WebCore::toQtLineCap):
        (WebCore::toQtLineJoin):
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::TransparencyLayer::cleanup):
        (WebCore::TextShadow::TextShadow):
        (WebCore::TextShadow::isNull):
        (WebCore::GraphicsContextPlatformPrivate::p):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::adjustLineToPixelBounderies):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::addClip):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::setFocusRingClip):
        (WebCore::GraphicsContext::clearFocusRingClip):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForMisspelling):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineWidth):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::createRenderingDeviceContext):
        * platform/qt/ImageQt.cpp: Added.
        (WebCore::FrameData::clear):
        (WebCore::Image::initNativeData):
        (WebCore::Image::destroyNativeData):
        (WebCore::Image::invalidateNativeData):
        (WebCore::Image::loadResource):
        (WebCore::Image::supportsType):
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        (WebCore::Image::checkForSolidColor):
        * platform/qt/ImageSourceQt.cpp: Added.
        (WebCore::createDecoder):
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::initialized):
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::frameCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):

2006-08-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele

        Moved default URL icon from WebKit to WebCore

        * Resources/urlIcon.tiff: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::loadImageFromResource):
        * loader/icon/IconDataCache.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::defaultIcon):
        * loader/icon/IconDatabase.h:

2006-08-23  Adam Roben  <aroben@apple.com>

        Reviewed by Darin, Adele.

        Some popup refactoring/cleanup.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::defaultEventHandler):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList):
        (WebCore::RenderMenuList::~RenderMenuList):
        (WebCore::RenderMenuList::showPopup):
        (WebCore::RenderMenuList::hidePopup):
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::popup):
        (WebCore::RenderMenuList::popupIsVisible):
        * rendering/RenderPopupMenu.h:
        * rendering/RenderPopupMenuMac.h:
        (WebCore::RenderPopupMenuMac::hidePopup):

2006-08-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Anders. Landed by rwlbuis.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support

        * platform/qt/ResourceLoaderCurl.cpp: Added.
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        (WebCore::ResourceLoader::receivedResponse):
        * platform/qt/ResourceLoaderManager.cpp: Added.
        (WebCore::ResourceLoaderManager::ResourceLoaderManager):
        (WebCore::ResourceLoaderManager::get):
        (WebCore::ResourceLoaderManager::useSimpleTransfer):
        (WebCore::writeCallback):
        (WebCore::headerCallback):
        (WebCore::ResourceLoaderManager::downloadTimerCallback):
        (WebCore::ResourceLoaderManager::remove):
        (WebCore::ResourceLoaderManager::add):
        (WebCore::ResourceLoaderManager::cancel):
        * platform/qt/ResourceLoaderManager.h: Added.
        * platform/qt/StringQt.cpp: Added.
        (WebCore::String::String):
        (WebCore::String::operator QString):
        (WebCore::DeprecatedString::operator QString):

2006-08-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Added escapeSQLString() - a helper to escape strings to be used in textual SQL queries

        * WebCore.xcodeproj/project.pbxproj: Reordered some files
        * loader/icon/IconDataCache.cpp: Use the new escapeSQLString()
        (WebCore::IconDataCache::writeToDatabase):
        * loader/icon/IconDatabase.cpp: Use the new escapeSQLString() throughout
        (WebCore::IconDatabase::retainIconURL):
        (WebCore::IconDatabase::releaseIconURL):
        (WebCore::IconDatabase::forgetIconForIconURLFromDatabase):
        (WebCore::IconDatabase::establishIconIDForIconURL):
        (WebCore::imageDataForIconURLQuery):
        (WebCore::timeStampForIconURLQuery):
        (WebCore::iconURLForPageURLQuery):
        (WebCore::forgetPageURLQuery):
        (WebCore::setIconIDForPageURLQuery):
        (WebCore::getIconIDForIconURLQuery):
        (WebCore::addIconForIconURLQuery):
        (WebCore::hasIconForIconURLQuery):
        * loader/icon/SQLDatabase.h:
        (WebCore::escapeSQLString): Added

2006-08-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady.

        - assorted style cleanup of icon loader code:
        
        - wrapped all implementation files in namespace WebCore {} instead of "using namespace WebCore;" at top
        - split headers to be one per class, to match impl files
        - made files that are purely local in IconDatabase.cpp static
        - make each impl file include config.h as first header (and no config.h includes in other headers)
        - avoid multiple copies of Vector<unsigned char> for image data

        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/IconDataCache.cpp:
        * loader/icon/IconDataCache.h: Added.
        (WebCore::):
        (WebCore::IconDataCache::getTimestamp):
        (WebCore::IconDataCache::setTimestamp):
        (WebCore::IconDataCache::getIconURL):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::imageDataForIconURL):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::pageURLTableIsEmptyQuery):
        (WebCore::imageDataForIconURLQuery):
        (WebCore::timeStampForIconURLQuery):
        (WebCore::iconURLForPageURLQuery):
        (WebCore::forgetPageURLQuery):
        (WebCore::setIconIDForPageURLQuery):
        (WebCore::getIconIDForIconURLQuery):
        (WebCore::addIconForIconURLQuery):
        (WebCore::hasIconForIconURLQuery):
        * loader/icon/IconDatabase.h:
        * loader/icon/SQLDatabase.cpp:
        * loader/icon/SQLDatabase.h:
        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::getColumnBlobAsVector):
        * loader/icon/SQLStatement.h: Added.
        (WebCore::SQLStatement::isPrepared):
        (WebCore::SQLStatement::prepareAndStep):
        (WebCore::SQLStatement::lastError):
        (WebCore::SQLStatement::lastErrorMsg):
        * loader/icon/SQLTransaction.cpp:
        * loader/icon/SQLTransaction.h: Added.

2006-08-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        The role of the SiteIcon is now the original intention - to be a cache of data relating to an Icon
        As such, I'm renaming it to IconDataCache.
        Also, the IconDatabase has to manually set the image data on the IconDataCache and also sets the 
        TimeStamp when an icon is created or the data is changed.
        IconDataCache now has a method to write itself *to* a given database, instead of read itself from one.
        IconDatabase schema changes to have the timestamp set manually instead of via a trigger.
        The overall purpose of this change is to cache the timestamp, killing off a very common SQL query.

        * WebCore.xcodeproj/project.pbxproj: Renamed a file
        * loader/icon/IconDataCache.cpp: Added.
        (IconDataCache::IconDataCache):
        (IconDataCache::getImage): Now either returns the stored image, or 0 - no attempt to grab data
        (IconDataCache::manuallySetImageData): Delete the old image and create the new one
        (IconDataCache::writeToDatabase): Write the current iconURL, data, and timestamp to the given DB
        (IconDataCache::imageDataStatus): Determine if an IconDataCache is new without data versus actually having null data
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::createDatabaseTables): Changed DB schema to version 5 (hopefully the final version)
        (WebCore::IconDatabase::iconForPageURL): 
        (WebCore::IconDatabase::isIconExpiredForIconURL): Uses the timestamp in the IconDataCache object instead of always querying
        (WebCore::IconDatabase::getOrCreateIconDataCache): Added, to handle creation of new IconDataCache when appropriate
        (WebCore::IconDatabase::setIconDataForIconURL): Puts data in SiteIcon then marks it for a future write
        (WebCore::IconDatabase::syncDatabase): Now syncs SiteIconsPendingUpdate
        * loader/icon/IconDatabase.h:
        (WebCore::IconDataCache::getTimestamp):
        (WebCore::IconDataCache::setTimestamp):
        * loader/icon/SiteIcon.cpp: Removed.


2006-08-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=10449>
        REGRESSION(r15918): drag-into-marker.html failing

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Don't avoid nesting
        in a list item.

2006-08-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Kevin

        Added a check in getTIFFRepresentation to not proceed if the frame count is zero
        This is an error condition that was handled gracefully before - in certain circumstances
        the call to CGImageDestinationCreateWithData will spam the Console if it is passed null/empty data
        or invalid data.  This small change bails out before that call if that call will definitely fail

        * platform/mac/ImageMac.mm:
        (WebCore::Image::getTIFFRepresentation):

2006-08-22  David Harrison  <harrison@apple.com>

        Backed out my last change (r15966) because it broke lots of layout tests.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):

2006-08-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - added some SPI indirections to support the following in WebKit/Loader:
            - pull more WebDataSource code into WebFrameLoader
            - make WebMainResourceLoader not depend on WebKit or on SPI

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2006-08-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4052343&4052343&4426622> Mail hung on paste text
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isInterchangeNewlineNode):
        (WebCore::isInterchangeConvertedSpaceSpan):
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles): Compute the redundant inheritable styles and
        remove them and remove style nodes and style spans which were only contributing redundant styles.
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:

2006-08-22  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/4077676> Inline hole line adheres to the Japanese characters in inline hole

        This happens because the underline is always 2 pixels thick, and placed 3 pixels above the bottom of the text box.

        Test case added:
        * manual-tests/inline-input-marking.html: Added.
        Check that underlining of the inline input hole does not obscure the glyphs.
        
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintMarkedTextUnderline):
        Position underline at bottom of text box.
        Height of underline is reduced to 1 px when font's descent is less than or equal to 2 px.

2006-08-22  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10402
        REPRO: SVG crashes inside gradient code

        Make sure we do not try to update the canvas resource/gradient paintserver when it is not yet built.

        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::notifyAttributeChange):
        (SVGGradientElement::resourceNotification):

2006-08-22  David Harrison  <harrison@apple.com>

        Reviewed by John.

        <rdar://problem/4523606> Represent heading elements in AXAttributedStringForTextMarkerRange

        * bridge/mac/WebCoreAXObject.mm:
        (headingLevel):
        (-[WebCoreAXObject headingLevel]):
        (-[WebCoreAXObject isHeading]):
        New. Heading level is per the tag (h1 == 1, h2 == 2, etc.)
        
        (-[WebCoreAXObject role]):
        (-[WebCoreAXObject roleDescription]):
        Add role and roleDescription for headings.
        
        (-[WebCoreAXObject value]):
        Value is the headingLevel.
        
        (AXAttributeStringSetHeadingLevel):
        (AXAttributedStringAppendText):
        Put text's heading level (if applicable) in the attributes.
        
2006-08-22  David Harrison  <harrison@apple.com>

        Reviewed by John.

        <rdar://problem/4522205> Represent controls in AXAttributedStringForTextMarkerRange

        Treat controls as replaced elements, so that AXAttributedStringForTextMarkerRange will, too.
        
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        Include controls.

2006-08-22  David Harrison  <harrison@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4407336> Some non-text elements return AXTextMarkerRangeForUIElement with equal start and end marker

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject textMarkerRange]):
        Use 0 and maxDeepOffset(), instead of caretMinOffset() and caretMaxRenderedOffset().
        Check for VisiblePositions being equal.  If so, adjust end one to its next().
        That happens with, e.g., buttons.

2006-08-22  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10491
        KCanvasMatrix removal

        Remove KCanvasMatrix from project, using AffineTransform instead.

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasMatrix.cpp: Removed.
        * kcanvas/KCanvasMatrix.h: Removed.
        * kcanvas/KCanvasResources.cpp:
        (WebCore::KCanvasMarker::draw):
        * kcanvas/KCanvasResources.h:
        * kcanvas/RenderForeignObject.cpp:
        * kcanvas/RenderPath.h:
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::viewportTransform):
        (WebCore::RenderSVGContainer::getAspectRatio):
        * kcanvas/RenderSVGContainer.h:
        * kcanvas/RenderSVGText.cpp:
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        (WebCore::KRenderingPaintServerGradient::gradientTransform):
        (WebCore::KRenderingPaintServerGradient::setGradientTransform):
        (WebCore::KRenderingPaintServerGradient::externalRepresentation):
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        (WebCore::KRenderingPaintServerPattern::patternTransform):
        (WebCore::KRenderingPaintServerPattern::setPatternTransform):
        (WebCore::KRenderingPaintServerPattern::externalRepresentation):
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceContextQuartz::concatCTM):
        (WebCore::KRenderingDeviceContextQuartz::ctm):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (WebCore::KRenderingPaintServerGradientQuartz::renderPath):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (WebCore::KRenderingPaintServerPatternQuartz::setup):
        * kcanvas/device/quartz/QuartzSupport.mm:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):

2006-08-22  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10405
        REPRO: SVG Maze crashes in RenderPath code

        Do not render a path when it is empty so maze15.svg does not crash anymore.
        Also get rid of a runtime warning issued by CGContextGetPathBoundingBox.

        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * kcanvas/device/quartz/KCanvasPathQuartz.mm:
        (WebCore::KCanvasPathQuartz::strokeBoundingBox):

2006-08-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        <rdar://4690949> - New IconDB: Need to prune unretained icons on startup

        Added a flag to track whether or not the initial pruning has taken place on startup
        If that flag is not set, IconURL retain counts will be tracked in a temporary db table
        in addition to the in-memory hash.  Then when the timer fires after initial retains
        are complete, we prune those icons not in the retain table, prune dangling PageURL
        references, delete the temporary table, and set the flag - and carry on as normal

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase): initialize the flag
        (WebCore::IconDatabase::open): changed the schema of the temporary table
        (WebCore::IconDatabase::retainIconURL): store the icon retain to the temp table if starting up
        (WebCore::IconDatabase::releaseIconURL): ditto
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup): remove all icons *not* in the retain table, then
          wipe all the PageURLs who no longer point to a valid IconURL
        * loader/icon/IconDatabase.h:

2006-08-21  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10419
        XSLTProcessor transformToFragment fails because of an XML declaration

        Test: fast/xsl/transformToFragment-XML-declaration.html

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::transformToString): Always inhibit XML declaration printout.

2006-08-21  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        <rdar://problem/4471481> Represent misspellings in AXAttributedStringForTextMarkerRange

        Added support for the NSAccessibilityMisspelledTextAttribute.
        
        Test cases added: None.  Manual AX testing is way too awkward, and automated testing
        is not possible.  See following bug...
            <rdar://problem/4256882> Need automated testing support for accessibility APIs

        * bridge/mac/WebCoreAXObject.mm:
        Lots of trivial formatting in many methods.
        
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Fixed AXStartTextMarker and AXEndTextMarker to use startOfDocument and endOfDocument, instead of
        of positionForCoordinates. I had seen erroneous endOfDocument results while testing the spelling
        attribute.

        (WebCore::AXAttributeStringSetSpelling): 
        New. Adds the NSAccessibilityMisspelledTextAttribute for misspelled words.

        (-[WebCoreAXObject AXAttributedStringAppendText:]):
        Added call to AXAttributeStringSetSpelling.
        
        * editing/visible_units.cpp:
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        Added for AXStartTextMarker/AXEndTextMarker fix, these forms of the familiar functions take a Node*,
        so a previously existing VisiblePosition is not required.
        
        * editing/visible_units.h:
        Declare new forms of startOfDocument and endOfDocument.

2006-08-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support

        * platform/qt/TemporaryLinkStubs.cpp: Added.
        (JavaAppletWidget::JavaAppletWidget):
        (Font::selectionRectForComplexText):
        (Font::offsetForPositionForComplexText):
        (WebCore::refreshPlugins):
        (WebCore::focusRingColor):
        (Image::drawTiled):
        (WebCore::TextField::selectAll):
        (WebCore::TextField::addSearchResult):
        (WebCore::TextField::selectionStart):
        (WebCore::TextField::hasSelectedText):
        (WebCore::TextField::selectedText):
        (WebCore::TextField::setAutoSaveName):
        (WebCore::TextField::checksDescendantsForFocus):
        (WebCore::TextField::setSelection):
        (WebCore::TextField::setMaxResults):
        (WebCore::TextField::edited):
        (WebCore::TextField::focusPolicy):
        (WebCore::TextField::TextField):
        (WebCore::TextField::~TextField):
        (WebCore::TextField::setFont):
        (WebCore::TextField::setAlignment):
        (WebCore::TextField::setWritingDirection):
        (WebCore::TextField::maxLength):
        (WebCore::TextField::setMaxLength):
        (WebCore::TextField::text):
        (WebCore::TextField::setText):
        (WebCore::TextField::cursorPosition):
        (WebCore::TextField::setCursorPosition):
        (WebCore::TextField::setEdited):
        (WebCore::TextField::setReadOnly):
        (WebCore::TextField::setPlaceholderString):
        (WebCore::TextField::setColors):
        (WebCore::TextField::sizeForCharacterWidth):
        (WebCore::TextField::baselinePosition):
        (WebCore::TextField::setLiveSearch):
        (WebCore::Slider::Slider):
        (WebCore::Slider::sizeHint):
        (WebCore::Slider::~Slider):
        (WebCore::Slider::setValue):
        (WebCore::Slider::setMaxValue):
        (WebCore::Slider::setMinValue):
        (WebCore::Slider::setFont):
        (WebCore::Slider::value):
        (WebCore::Slider::focusPolicy):
        (WebCore::ScrollBar::ScrollBar):
        (WebCore::ScrollBar::setSteps):
        (WebCore::ScrollBar::scroll):
        (WebCore::ScrollBar::setValue):
        (WebCore::ScrollBar::setKnobProportion):
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::~PlatformScrollBar):
        (WebCore::PlatformScrollBar::width):
        (WebCore::PlatformScrollBar::height):
        (WebCore::PlatformScrollBar::setEnabled):
        (WebCore::PlatformScrollBar::paint):
        (WebCore::PlatformScrollBar::setScrollBarValue):
        (WebCore::PlatformScrollBar::setKnobProportion):
        (WebCore::PlatformScrollBar::setRect):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::CheckCacheObjectStatus):
        (WebCore::CheckIfReloading):
        (WebCore::ServeSynchronousRequest):
        (WebCore::historyContains):
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):
        (Frame::setNeedsReapplyStyles):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::searchableIndexIntroduction):
        (WebCore::setFocusRingColorChangeFunction):
        (FrameView::updateBorder):
        (loadResourceIntoArray):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (FileButton::FileButton):
        (FileButton::click):
        (FileButton::sizeForCharacterWidth):
        (FileButton::focusPolicy):
        (FileButton::frameGeometry):
        (FileButton::setFilename):
        (FileButton::baselinePosition):
        (FileButton::setFrameGeometry):
        (FileButton::setDisabled):
        (WebCore::supportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):

2006-08-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support

        * platform/qt/CursorQt.cpp: Added.
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::Cursors::Cursors::self):
        (WebCore::moveCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        * platform/qt/RenderThemeQt.cpp: Added.
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::supportsHover):
        (WebCore::RenderThemeQt::paintCheckbox):
        (WebCore::RenderThemeQt::paintRadio):
        (WebCore::theme):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::controlSupportsTints):
        (WebCore::RenderThemeQt::systemFont):
        (WebCore::RenderThemeQt::createPopupMenu):
        (WebCore::RenderThemeQt::addIntrinsicMargins):
        (WebCore::RenderThemeQt::stylePainterAndWidgetForPaintInfo):
        (WebCore::RenderThemeQt::setCheckboxSize):
        (WebCore::RenderThemeQt::setRadioSize):
        (WebCore::RenderThemeQt::supportsFocus):
        (WebCore::RenderThemeQt::applyTheme):
        (WebCore::RenderThemeQt::adjustButtonStyle):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::paintTextField):

2006-08-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support

        * platform/qt/SharedTimerQt.cpp: Added.
        (WebCore:setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):
        * platform/qt/SharedTimerQt.h: Added.
        (WebCore::SharedTimerQt::SharedTimerQt):
        (WebCore::SharedTimerQt::~SharedTimerQt):
        (WebCore::SharedTimerQt::inst):
        (WebCore::SharedTimerQt::fire):
        * platform/qt/SystemTimeQt.cpp: Added.
        (WebCore::currentTime):

2006-08-21  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        -Defers writing to the database via a timer and handles starting the timer
         intelligently

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::open): Don't start the update timer by default
        (WebCore::IconDatabase::close): Call syncDatabase()
        (WebCore::IconDatabase::setPrivateBrowsingEnabled): Call syncDatabase()
        (WebCore::IconDatabase::setIconURLForPageURL): Setup the cached url, but defer the DB call
        (WebCore::IconDatabase::setIconURLForPageURLInDatabase): Actually commit the url to the DB
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup):
        (WebCore::IconDatabase::updateDatabase): The updateTimer calls this, which just calls syncDatabase()
        (WebCore::IconDatabase::syncDatabase): Add and remove pending pageURLs and iconURLs, and stop the updateTimer
        * loader/icon/IconDatabase.h:

2006-08-21  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=10429
          XSLTProcessor.transformToFragment crashes if the owner document is empty

        Test: fast/js/xslt-fragment-in-empty-doc.html

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer): Don't iterate over the element stack if it's empty.

2006-08-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        -Added timer-based, deferred deletion of database records - PageURLs and Icons handled seperately
         In the near future, we'll also have timer-based deferred *addition* of database records
        -Keep retain/release counts in a hash instead of a DB table
        -Keep only one hash record for the SiteIcons
        -Renamed some methods for clarity

        * bridge/mac/WebCoreIconDatabaseBridge.h: Renamed method for clarity
        * bridge/mac/WebCoreIconDatabaseBridge.mm: Ditto
        (-[WebCoreIconDatabaseBridge _hasEntryForIconURL:]): Ditto
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::open): Added new timer setup
        (WebCore::IconDatabase::iconForPageURL): Only work with one hash of the SiteIcons
        (WebCore::IconDatabase::retainIconForPageURL): Keep count in a hash
        (WebCore::IconDatabase::releaseIconForPageURL): Keep count in a hash, use deferred deletion
        (WebCore::IconDatabase::retainIconURL): Added
        (WebCore::IconDatabase::releaseIconURL): Added
        (WebCore::IconDatabase::forgetPageURL):  Added
        (WebCore::IconDatabase::isIconURLRetained): New and improved simplicity
        (WebCore::IconDatabase::setIconDataForIconURL): Cleanup
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup): Renamed
        (WebCore::IconDatabase::pruneIconsPendingDeletion): Added
        (WebCore::IconDatabase::hasEntryForIconURL): Renamed for clarity
        * loader/icon/IconDatabase.h: Added multiple stuffs

2006-08-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej's rubberstamp

        Removed stale file references from the Xcode.proj

        * WebCore.xcodeproj/project.pbxproj:

2006-08-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej. Landed by rwlbuis.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10463
        WebKit should have Qt platform support

        Removing HelperQt.h usage by creating appropriate operators
        constructor in some of the platform classes, as suggested by Darin.

        * CMakeLists.txt:
        * platform/DeprecatedString.h:
        * platform/Font.h:
        * platform/PlatformString.h:
        * platform/qt/ComboBoxQt.cpp:
        (WebCore::PlatformComboBox::appendItem):
        (WebCore::PlatformComboBox::appendGroupLabel):
        (WebCore::PlatformComboBox::setFont):
        * platform/qt/LineEditQt.cpp:
        (WebCore::PlatformLineEdit::setFont):
        (WebCore::PlatformLineEdit::setText):
        (WebCore::PlatformLineEdit::text):
        (WebCore::PlatformLineEdit::selectedText):
        * platform/qt/ListBoxQt.cpp:
        (WebCore::ListBox::setFont):
        (WebCore::ListBox::appendItem):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/StringQt.cpp: Added.
        (WebCore::String::String):
        (WebCore::String::operator QString):
        (WebCore::DeprecatedString::operator QString):
        * platform/qt/TextEditQt.cpp:
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setFont):

2006-08-18  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by adele.
        
        Fix call to WebFormDelegate's textFieldDidBeginEditing.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::subtreeHasChanged):

2006-08-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        Next chunk of the implementation for:
        http://bugs.webkit.org/show_bug.cgi?id=10467

        WebKit should have Qt platform support

        * platform/qt/KeyboardCodes.h: Added.
        * platform/qt/PlatformKeyboardEventQt.cpp: Added.
        (WebCore::keyIdentifierForQtKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/qt/PlatformMouseEventQt.cpp: Added.
        (WebCore::):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2006-08-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        Next chunk of the implementation for:
        http://bugs.webkit.org/show_bug.cgi?id=10467

        WebKit should have Qt platform support

        * platform/qt/AffineTransformQt.cpp: Added.
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::mapRect):
        (WebCore::AffineTransform::isIdentity):
        (WebCore::AffineTransform::m11):
        (WebCore::AffineTransform::m12):
        (WebCore::AffineTransform::m21):
        (WebCore::AffineTransform::m22):
        (WebCore::AffineTransform::dx):
        (WebCore::AffineTransform::dy):
        (WebCore::AffineTransform::reset):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::rotate):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::shear):
        (WebCore::AffineTransform::det):
        (WebCore::AffineTransform::invert):
        (WebCore::AffineTransform::operator QMatrix):
        (WebCore::AffineTransform::operator==):
        (WebCore::AffineTransform::operator*=):
        (WebCore::AffineTransform::operator*):
        * platform/qt/BrowserExtensionQt.cpp: Added.
        (WebCore::BrowserExtensionQt::BrowserExtensionQt):
        (WebCore::BrowserExtensionQt::canRunModal):
        (WebCore::BrowserExtensionQt::createNewWindow):
        (WebCore::BrowserExtensionQt::canRunModalNow):
        (WebCore::BrowserExtensionQt::runModal):
        (WebCore::BrowserExtensionQt::goBackOrForward):
        (WebCore::BrowserExtensionQt::historyURL):
        (WebCore::BrowserExtensionQt::setTypedIconURL):
        (WebCore::BrowserExtensionQt::setIconURL):
        (WebCore::BrowserExtensionQt::getHistoryLength):
        * platform/qt/BrowserExtensionQt.h: Added.
        * platform/qt/CookieJarQt.cpp: Added.
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/qt/PageQt.cpp: Added.
        (WebCore::rootWindowForFrame):
        (WebCore::Page::windowRect):
        (WebCore::Page::setWindowRect):
        * platform/qt/PathQt.cpp: Added.
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::contains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::clear):
        * platform/qt/ScreenQt.cpp: Added.
        (WebCore::screenRect):
        (WebCore::screenDepth):
        (WebCore::usableScreenRect):


2006-08-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        First chunk of the implementation for:
        http://bugs.webkit.org/show_bug.cgi?id=10467

        WebKit should have Qt platform support

        * platform/qt/ComboBoxQt.cpp: Added.
        (WebCore::PlatformComboBox::PlatformComboBox):
        (WebCore::PlatformComboBox::~PlatformComboBox):
        (WebCore::PlatformComboBox::setParentWidget):
        (WebCore::PlatformComboBox::clear):
        (WebCore::PlatformComboBox::appendItem):
        (WebCore::PlatformComboBox::appendGroupLabel):
        (WebCore::PlatformComboBox::appendSeparator):
        (WebCore::PlatformComboBox::setCurrentItem):
        (WebCore::PlatformComboBox::sizeHint):
        (WebCore::PlatformComboBox::frameGeometry):
        (WebCore::PlatformComboBox::setFrameGeometry):
        (WebCore::PlatformComboBox::baselinePosition):
        (WebCore::PlatformComboBox::setFont):
        (WebCore::PlatformComboBox::focusPolicy):
        (WebCore::PlatformComboBox::itemSelected):
        (WebCore::PlatformComboBox::setWritingDirection):
        (WebCore::PlatformComboBox::populate):
        (WebCore::PlatformComboBox::populateMenu):
        * platform/qt/LineEditQt.cpp: Added.
        (WebCore::PlatformLineEdit::PlatformLineEdit):
        (WebCore::PlatformLineEdit::~PlatformLineEdit):
        (WebCore::PlatformLineEdit::setParentWidget):
        (WebCore::PlatformLineEdit::setColors):
        (WebCore::PlatformLineEdit::setAlignment):
        (WebCore::PlatformLineEdit::setCursorPosition):
        (WebCore::PlatformLineEdit::cursorPosition):
        (WebCore::PlatformLineEdit::setEdited):
        (WebCore::PlatformLineEdit::edited):
        (WebCore::PlatformLineEdit::setFont):
        (WebCore::PlatformLineEdit::setMaxLength):
        (WebCore::PlatformLineEdit::maxLength):
        (WebCore::PlatformLineEdit::setReadOnly):
        (WebCore::PlatformLineEdit::isReadOnly):
        (WebCore::PlatformLineEdit::setText):
        (WebCore::PlatformLineEdit::text):
        (WebCore::PlatformLineEdit::setWritingDirection):
        (WebCore::PlatformLineEdit::selectAll):
        (WebCore::PlatformLineEdit::hasSelectedText):
        (WebCore::PlatformLineEdit::selectionStart):
        (WebCore::PlatformLineEdit::selectedText):
        (WebCore::PlatformLineEdit::setSelection):
        (WebCore::PlatformLineEdit::sizeForCharacterWidth):
        (WebCore::PlatformLineEdit::baselinePosition):
        (WebCore::PlatformLineEdit::focusPolicy):
        (WebCore::PlatformLineEdit::checksDescendantsForFocus):
        (WebCore::PlatformLineEdit::setLiveSearch):
        (WebCore::PlatformLineEdit::setAutoSaveName):
        (WebCore::PlatformLineEdit::setMaxResults):
        (WebCore::PlatformLineEdit::setPlaceholderString):
        (WebCore::PlatformLineEdit::addSearchResult):
        * platform/qt/ListBoxQt.cpp: Added.
        (WebCore::ListBox::ListBox):
        (WebCore::ListBox::~ListBox):
        (WebCore::ListBox::setParentWidget):
        (WebCore::ListBox::sizeForNumberOfLines):
        (WebCore::ListBox::setSelectionMode):
        (WebCore::ListBox::clear):
        (WebCore::ListBox::doneAppendingItems):
        (WebCore::ListBox::setSelected):
        (WebCore::ListBox::isSelected):
        (WebCore::ListBox::setEnabled):
        (WebCore::ListBox::isEnabled):
        (WebCore::ListBox::setWritingDirection):
        (WebCore::ListBox::focusPolicy):
        (WebCore::ListBox::checksDescendantsForFocus):
        (WebCore::ListBox::clearCachedTextRenderers):
        (WebCore::ListBox::setFont):
        (WebCore::ListBox::appendItem):
        * platform/qt/ScrollViewQt.cpp: Added.
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::setParentWidget):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::setContentsPos):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::hScrollBarMode):
        (WebCore::ScrollView::vScrollBarMode):
        (WebCore::ScrollView::suppressScrollBars):
        (WebCore::ScrollView::setHScrollBarMode):
        (WebCore::ScrollView::setVScrollBarMode):
        (WebCore::ScrollView::setScrollBarsMode):
        (WebCore::ScrollView::setStaticBackground):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::scrollPointRecursively):
        (WebCore::ScrollView::inWindow):
        * platform/qt/TextEditQt.cpp: Added.
        (WebCore::PlatformTextEdit::PlatformTextEdit):
        (WebCore::PlatformTextEdit::~PlatformTextEdit):
        (WebCore::PlatformTextEdit::setParentWidget):
        (WebCore::PlatformTextEdit::setColors):
        (WebCore::PlatformTextEdit::setAlignment):
        (WebCore::PlatformTextEdit::setLineHeight):
        (WebCore::PlatformTextEdit::setCursorPosition):
        (WebCore::PlatformTextEdit::getCursorPosition):
        (WebCore::PlatformTextEdit::setFont):
        (WebCore::PlatformTextEdit::setReadOnly):
        (WebCore::PlatformTextEdit::isReadOnly):
        (WebCore::PlatformTextEdit::setDisabled):
        (WebCore::PlatformTextEdit::isDisabled):
        (WebCore::PlatformTextEdit::hasSelectedText):
        (WebCore::PlatformTextEdit::setText):
        (WebCore::PlatformTextEdit::text):
        (WebCore::PlatformTextEdit::textWithHardLineBreaks):
        (WebCore::PlatformTextEdit::focusPolicy):
        (WebCore::PlatformTextEdit::setWordWrap):
        (WebCore::PlatformTextEdit::wordWrap):
        (WebCore::PlatformTextEdit::setScrollBarModes):
        (WebCore::PlatformTextEdit::setWritingDirection):
        (WebCore::PlatformTextEdit::selectionStart):
        (WebCore::PlatformTextEdit::selectionEnd):
        (WebCore::PlatformTextEdit::setSelectionStart):
        (WebCore::PlatformTextEdit::setSelectionEnd):
        (WebCore::PlatformTextEdit::selectAll):
        (WebCore::PlatformTextEdit::setSelectionRange):
        (WebCore::PlatformTextEdit::sizeWithColumnsAndRows):
        (WebCore::PlatformTextEdit::checksDescendantsForFocus):
        * platform/qt/WidgetQt.cpp: Added.
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::setClient):
        (WebCore::Widget::client):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::clearFocus):
        (WebCore::Widget::font):
        (WebCore::Widget::setFont):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::qwidget):
        (WebCore::Widget::setParentWidget):
        (WebCore::Widget::parentWidget):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::mapFromGlobal):
        (WebCore::Widget::scaleFactor):
        (WebCore::Widget::lockDrawingFocus):
        (WebCore::Widget::unlockDrawingFocus):
        (WebCore::Widget::paint):
        (WebCore::Widget::enableFlushDrawing):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::disableFlushDrawing):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::focusPolicy):

2006-08-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        First chunk of the implementation for:
        http://bugs.webkit.org/show_bug.cgi?id=10467

        WebKit should have Qt platform support

        * platform/qt/ColorQt.cpp: Added.
        (WebCore::Color::Color):
        (WebCore::Color::operator QColor):
        * platform/qt/FloatPointQt.cpp: Added.
        (WebCore::FloatPoint::FloatPoint):
        (WebCore::FloatPoint::operator QPointF):
        * platform/qt/FloatRectQt.cpp: Added.
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::operator QRectF):
        * platform/qt/IntPointQt.cpp: Added.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator QPoint):
        * platform/qt/IntRectQt.cpp: Added.
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator QRect):
        * platform/qt/IntSizeQt.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator QSize):

 2006-08-18  Nikolas Zimmermann  <zimmermann@kde.org>
 
         Reviewed by Eric. Landed by rwlbuis.
 
         Fixes: http://bugs.webkit.org/show_bug.cgi?id=10470
         The Qt platform needs a KCanvas device.
 
         * kcanvas/device/qt/KCanvasClipperQt.cpp: Added.
         (WebCore::KCanvasClipperQt::applyClip):
         * kcanvas/device/qt/KCanvasClipperQt.h: Added.
         (WebCore::KCanvasClipperQt::KCanvasClipperQt):
         * kcanvas/device/qt/KCanvasPathQt.cpp: Added.
         (WebCore::KCanvasPathQt::KCanvasPathQt):
         (WebCore::KCanvasPathQt::~KCanvasPathQt):
         (WebCore::KCanvasPathQt::isEmpty):
         (WebCore::KCanvasPathQt::moveTo):
         (WebCore::KCanvasPathQt::lineTo):
         (WebCore::KCanvasPathQt::curveTo):
         (WebCore::KCanvasPathQt::closeSubpath):
         (WebCore::KCanvasPathQt::boundingBox):
         (WebCore::KCanvasPathQt::strokeBoundingBox):
         (WebCore::KCanvasPathQt::strokeContainsPoint):
         (WebCore::KCanvasPathQt::containsPoint):
         * kcanvas/device/qt/KCanvasPathQt.h: Added.
         (WebCore::KCanvasPathQt::qtPath):
         * kcanvas/device/qt/KRenderingDeviceQt.cpp: Added.
         (WebCore::KRenderingDeviceContextQt::KRenderingDeviceContextQt):
         (WebCore::KRenderingDeviceContextQt::~KRenderingDeviceContextQt):
         (WebCore::KRenderingDeviceContextQt::concatCTM):
         (WebCore::KRenderingDeviceContextQt::ctm):
         (WebCore::KRenderingDeviceContextQt::mapFromVisual):
         (WebCore::KRenderingDeviceContextQt::mapToVisual):
         (WebCore::KRenderingDeviceContextQt::clearPath):
         (WebCore::KRenderingDeviceContextQt::addPath):
         (WebCore::KRenderingDeviceContextQt::createGraphicsContext):
         (WebCore::KRenderingDeviceContextQt::painter):
         (WebCore::KRenderingDeviceContextQt::pathBBox):
         (WebCore::KRenderingDeviceContextQt::setFillRule):
         (WebCore::KRenderingDeviceContextQt::fillPath):
         (WebCore::KRenderingDeviceContextQt::strokePath):
         (WebCore::KRenderingDeviceQt::KRenderingDeviceQt):
         (WebCore::KRenderingDeviceQt::~KRenderingDeviceQt):
         (WebCore::KRenderingDeviceQt::popContext):
         (WebCore::KRenderingDeviceQt::pushContext):
         (WebCore::KRenderingDeviceQt::qtContext):
         (WebCore::KRenderingDeviceQt::contextForImage):
         (WebCore::KRenderingDeviceQt::stringForPath):
         (WebCore::KRenderingDeviceQt::createResource):
         (WebCore::KRenderingDeviceQt::createPaintServer):
         (WebCore::KRenderingDeviceQt::createFilterEffect):

2006-08-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10466
        WebKit should have Qt platform support.

        * platform/Color.h:
        * platform/Cursor.h:
        (WebCore::Cursor::Cursor):
        * platform/FloatPoint.h:
        * platform/FloatRect.h:
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        * platform/GraphicsContext.h:
        * platform/ImageSource.h:
        * platform/IntPoint.h:
        * platform/IntRect.h:
        * platform/IntSize.h:
        * platform/ListBox.h:
        * platform/Path.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMouseEvent.h:
        * platform/ResourceLoader.h:
        * platform/ResourceLoaderClient.h:
        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/ScrollView.h:
        * platform/Widget.h:

2006-08-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10465
        General WebKit Linux build fixes.

        * kcanvas/KCanvasFilters.cpp:
        (WebCore::operator<<):
        * kcanvas/RenderSVGImage.cpp:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGPatternElement.cpp:
        * page/Frame.h:
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::deleteBindingURIs):
        * xml/DOMParser.cpp:

2006-08-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10464
        Offer a cmake build system for Qt platform.

        * CMakeLists.txt: Added.

2006-08-17  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4671069> REGRESSION: Popup buttons in web pages aren't exposed as AXPopupButtons

        Accessorized RenderMenuList objects.
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject mouseButtonListener]):
        Trivial formatting.
        
        (-[WebCoreAXObject actionElement]):
        Return the HTMLSelectElement.
        
        (-[WebCoreAXObject firstChild]):
        (-[WebCoreAXObject lastChild]):
        (-[WebCoreAXObject previousSibling]):
        (-[WebCoreAXObject nextSibling]):
        (-[WebCoreAXObject parentObject]):
        (-[WebCoreAXObject parentObjectUnignored]):
        (-[WebCoreAXObject isAttachment]):
        (-[WebCoreAXObject attachmentView]):
        Trivial formatting.

        (-[WebCoreAXObject role]):
        Return NSAccessibilityPopUpButtonRole.

        (-[WebCoreAXObject subrole]):
        Trivial formatting.
        
        (-[WebCoreAXObject roleDescription]):
        Return NSAccessibilityPopUpButtonRole.
        
        (-[WebCoreAXObject textUnderElement]):
        Trivial formatting.

        (-[WebCoreAXObject value]):
        Return the RenderMenuList::text().
        
        (-[WebCoreAXObject position]):
         Trivial formatting.

        (-[WebCoreAXObject accessibilityIsIgnored]):
        - Ignore popup menu items because AppKit does.
        - Remove redundant check for buttonTag (earlier isControl() check suffices).
        
        (-[WebCoreAXObject accessibilityAttributeNames]):
        (-[WebCoreAXObject accessibilityActionNames]):
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Trivial formatting.
        
        (-[WebCoreAXObject doAXTextMarkerRangeForUnorderedTextMarkers:]):
        Removed old debugging code that is no longer needed.
        Trivial formatting.
        
        (-[WebCoreAXObject doAXSentenceTextMarkerRangeForTextMarker:]):
        (-[WebCoreAXObject doAXParagraphTextMarkerRangeForTextMarker:]):
        (-[WebCoreAXObject removeAXObjectID]):
        Trivial formatting.
        
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::accessKeyAction):
        Call click() instead of focus().
        
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::text):
        Added for easy access to popup's current text.
        
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::isMenuList):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isMenuList):
        Added so popups can be identified.

2006-08-17  David Harrison  <harrison@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4527201> REGRESSION: AXTextMarkerRangeForUnorderedTextMarkers returns out of order range

        Test cases added: None.  Manual AX testing is way too awkward, and automated testing
        is not possible.  See following bug...
            <rdar://problem/4256882> Need automated testing support for accessibility APIs

        * bridge/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::visiblePositionForTextMarker):
        Validate the marker by comparing the node and offset to those of the resulting VisiblePosition.

2006-08-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Anders.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10447
        AffineTransform should be multi-platform compatible

        * platform/AffineTransform.h:
        * platform/cg/AffineTransformCG.cpp:
        (WebCore::AffineTransform::m11):
        (WebCore::AffineTransform::m12):
        (WebCore::AffineTransform::m21):
        (WebCore::AffineTransform::m22):
        (WebCore::AffineTransform::dx):
        (WebCore::AffineTransform::dy):

2006-08-16  David Hyatt  <hyatt@apple.com>

        Fix an issue with CSS2 system fonts where they did not respect text
        zoom.  This was most visible with the new control fonts used for form
        controls (they stopped swapping between small/mini/regular as you zoomed).

        Reviewed by beth

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2006-08-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher
        
        First part of fix for:
        <rdar://problem/4384589>
        Mail hung on paste text
        
        Fixes:
        <http://bugs.webkit.org/show_bug.cgi?id=8592>
        Extra line left after deleting whitespace:pre text
        <rdar://problem/4128080> Paste as HTML does not yield equivalent style
        <rdar://problem/4046469> Box styles on first element aren't copied/pasted
        Copy/paste of arstechnica.com
        
        Here's how we avoid adding redundant style information on paste: insert 
        the fragment and do a test rendering, save away style information for 
        every node in the fragment, remove all style information from the fragment, 
        remove the fragment, insert it into the appropriate place in the document, 
        then restore only those styles gathered during the test insertion that aren't
        redundant.  Restoring the styles in this way results in an ApplyStyleCommand 
        and a layout for nearly every inserted node.  
        Instead we want to insert the fragment into the document without removing the 
        style information, then mark style nodes and inline style declarations for 
        removal if they are redundant, and sweep to remove them.  This means that we 
        can't rely on ReplacementFragment::wasBlock anymore, because blocks will now 
        have style spans around them.  This patch removes the use of wasBlock in 
        ReplaceSelectionCommand.
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Added code
        to remove the line placeholder left after a move from preserveNewline text.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply): Don't add a placeholder if 
        we're deleting a paragraph in preserveNewline text.
        * editing/JSEditor.cpp: Pass true to prevent nesting.
        * editing/ReplaceSelectionCommand.cpp: Removed wasBlock and friends.
        (WebCore::ReplacementFragment::ReplacementFragment): Ditto.
        (WebCore::ReplacementFragment::saveRenderingInfo): Ditto.
        (WebCore::RenderingInfo::RenderingInfo): Ditto.
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::shouldMergeStart): Combined the to/from
        merging rules into one method.
        (WebCore::ReplaceSelectionCommand::shouldMergeEnd):
        (WebCore::ReplaceSelectionCommand::shouldMerge):
        (WebCore::ReplaceSelectionCommand::doApply): 
        Don't do nesting prevention when pasting into an empty paragraph, this
        fixes 4046469, the common cause of paste fidelity bugs, but needs
        to be tweaked a little because this can lead to margin/border build-up
        on repeated copy/pastes.
        Don't track startPos in addition to insertionPos.  It was never used.
        Fixed a bug where a fragment starting with an interchange newline would
        cause content to be put outside of an editable region when pasting at the 
        very end of it.
        Adjust insertionPos before insertion (not during) and do not consult wasBlock
        to decide whether or not to do so.
        Changed the way we do the start merge: insert the fragment, then stich 
        paragraphs together, in the same way that we do the end merge.  This 
        doesn't require wasBlock and fixes bugs.
        Replaced some uses of insertionPos with endOfInsertedContent.
        Fixed a bug in the expansion of the last incoming br (a "collapsed" br
        is one where !isStartOfParagraph([br,0])).
        Removed the special case code that did the end merge for the preserveNewline 
        case, since this patch fixes the moveParagraph bug in the preserveNewline case.
        Removed some unused variables.
        (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR): An endBR that was 
        holding a line open should always be displaced by inserted content, unless 
        the inserted content ends with a br.
        (WebCore::ReplaceSelectionCommand::updateNodesInserted):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::RenderingInfo::style):
        * editing/markup.cpp:
        (WebCore::createMarkup): Only add mail blockquotes and list/table/pre when
        annotate is true (when we're creating markup for the pasteboard).

2006-08-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady Eidson
        
        - fixed <rdar://problem/4637156> underlines appearing in white selection text

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintDecorations):
        bail out if phase is PaintPhaseSelection and forceWhiteText is true

2006-08-16  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        Updated the DB version number and added a helpful comment explaining its meaning

        * loader/icon/IconDatabase.cpp:

2006-08-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Major refactoring of new iconDB:
        -Instead of private browsing being handled by in-memory tables, it's now handled
         by a separate in-memory database with the same table names.  This allows us to 
         re-use the same SQL on either the main or private-browsing database
        -So it follows, I broke out much of the SQL queries into seperate methods suffixed with
         "Query" that take a database as the method's argument so the same language can run on
         both private and main tables
        -Now that we have two DBs, moved the retain/release count to the m_mainDB
        -While I was at it, updated the schema to combine the Icon and IconResource table - cuts 
         down on some high-usage, low value queries which were too expensive
        -Ditched the _url -> url convention for escaping urls for SQL.  Now its url and escapedURL
        -Pruned tons of unused methods from previous revisions

     * bridge/mac/WebCoreIconDatabaseBridge.h: Removed isIconExpiredForPageURL as it was never used 
        * bridge/mac/WebCoreIconDatabaseBridge.mm: Ditto
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase): Updated initializer list
        (WebCore::IconDatabase::open): Sets up both databases
        (WebCore::IconDatabase::close): Closes both databases
        (WebCore::IconDatabase::isEmpty): Queries both databases for at least 1 record
        (WebCore::IconDatabase::isValidDatabase): Reflect the updated schema
        (WebCore::IconDatabase::clearDatabaseTables): Ditto - and takes DB as a parameter
        (WebCore::IconDatabase::createDatabaseTables): Ditto
        (WebCore::IconDatabase::imageDataForIconURL): style cleanup, and using a query-function
        (WebCore::IconDatabase::setPrivateBrowsingEnabled): Resets private DB instead of private tables
        (WebCore::IconDatabase::isIconExpiredForIconURL): Uses a query-function on each DB
        (WebCore::IconDatabase::iconURLForPageURL): Uses a query-function on each DB
        (WebCore::IconDatabase::retainIconForPageURL): Retain count DB changes 
        (WebCore::IconDatabase::releaseIconForPageURL): Ditto
        (WebCore::IconDatabase::isIconURLRetained): Determine if it's time to prune a released icon yet
        (WebCore::IconDatabase::forgetIconForIconURLFromDatabase): Alot simpler
        (WebCore::IconDatabase::setIconDataForIconURL): Style cleanup
        (WebCore::IconDatabase::setHaveNoIconForIconURL): Ditto
        (WebCore::IconDatabase::setIconURLForPageURL): Ditto - and using a query-function
        (WebCore::IconDatabase::establishIconIDForIconURL): Style cleanup
        (WebCore::IconDatabase::pruneUnreferencedIcons): DB name change
        (WebCore::IconDatabase::pruneUnretainedIcons): Ditto
        (WebCore::IconDatabase::hasIconForIconURL): Simpler, using a query-function
        (WebCore::IconDatabase::~IconDatabase):
        (WebCore::pageURLTableIsEmptyQuery): Self-explanatory SQL query
        (WebCore::imageDataForIconURLQuery): Self-explanatory SQL query
        (WebCore::timeStampForIconURLQuery): Self-explanatory SQL query
        (WebCore::iconURLForPageURLQuery): Self-explanatory SQL query
        (WebCore::forgetPageURLQuery): Self-explanatory SQL query
        (WebCore::setIconIDForPageURLQuery): Self-explanatory SQL query
        (WebCore::getIconIDForIconURLQuery): Self-explanatory SQL query
        (WebCore::addIconForIconURLQuery): Self-explanatory SQL query
        (WebCore::hasIconForIconURLQuery): Self-explanatory SQL query
     * loader/icon/IconDatabase.h: Some new/changed methods, pruned methods, and new comments
        (WebCore::IconDatabase::isOpen):  Changed our meaning of "isOpen" to reflect the 2 databases

2006-08-15  Jonas Witt <jonas.witt@gmail.com>

        Reviewed by Darin.

        - added ObjC wrappers for the KeyboardEvent and WheelEvent initializers
          http://bugs.webkit.org/show_bug.cgi?id=9736

        * bindings/objc/DOMEvents.mm:
        (-[DOMKeyboardEvent initKeyboardEvent::::::::::]):
        * bindings/objc/DOMEventsNonstandard.mm:
        (-[DOMWheelEvent initWheelEvent:::::::::::]):
        * bindings/objc/DOMPrivate.h:

        - added an initializer for the WheelEvent

        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::initWheelEvent):
        * dom/WheelEvent.h:

2006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Tim H.

        Build fix:  DWARF and -gfull are incompatible with symbol separation.

        * WebCore.xcodeproj/project.pbxproj:

2006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=10394
        Bug 10394: WebKit Release and Production configurations should enable dead code stripping

        * WebCore.xcodeproj/project.pbxproj:

2006-08-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.
        
        - This patch reworks a previous fix for <rdar://problem/3524912> repro 
        crash in KHTMLParser::parseToken, due to parser's current element being 
        destroyed (www.gnnetcom.dk), along with subsequent adjustments to fix
        leaks.
        
        The previous solutions caused a ~2% performance regression on iBench HTML,
        due to RefPtr churn. The optimizations here gain back that ~2% plus ~1% more,
        for a total win of ~3% vs current TOT.
        
        We can merge this fix to the branch to fix <rdar://problem/4661982> 
        (crash in KHTMLParser::popBlock).
        
        The solution here is:
        (1) Don't let the parser ref document nodes -- that causes leaks.
        (2) Handle ref/deref manually, to avoid RefPtr churn. Specifically, when 
        moving a node between stacks or to/from 'current', rather than deref'ing
        and then ref'ing again, simply move the node, along with its refcount, to
        its new location, and overwrite its old location.
 
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLParser.cpp:
        (WebCore::HTMLStackElem::HTMLStackElem):
        (WebCore::HTMLStackElem::derefNode):
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::setCurrent):
        (WebCore::HTMLParser::insertNode):
        (WebCore::HTMLParser::popNestedHeaderTag):
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::HTMLParser::reopenResidualStyleTags):
        (WebCore::HTMLParser::pushBlock):
        (WebCore::HTMLParser::popBlock):
        (WebCore::HTMLParser::popOneBlockCommon):
        (WebCore::HTMLParser::popOneBlock):
        (WebCore::HTMLParser::moveOneBlockToStack):
        * html/HTMLParser.h:

2006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=10384
        Bug 10384: Switch to DWARF for Release configuration

        * WebCore.xcodeproj/project.pbxproj:

2006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Hyatt.
        Tweaked and landed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10399
        Bug 10399: RenderTextArea is unused

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Removed RenderTextArea source files.

        * html/HTMLTextAreaElement.cpp: Removed include of RenderTextArea.h.
        * html/HTMLTextAreaElement.h: Removed forward declaration of RenderTextArea.

        * platform/mac/WidgetMac.mm: (WebCore::Widget::paint): Updated a comment.

        * platform/TextBox.h: Removed.
        * platform/mac/TextBoxMac.mm: Removed.
        * platform/mac/WebCoreTextArea.h: Removed.
        * platform/mac/WebCoreTextArea.mm: Removed.
        * rendering/RenderTextArea.cpp: Removed.
        * rendering/RenderTextArea.h: Removed.

2006-08-15  Brady Eidson  <beidson@apple.com>

        Reviewed by THE OTHER Maciej...

        Two small fixes -
        1) Renamed retain/release methods to add PageUrl in - we're being consistent and clear in the WebCore API
        2) Fixed a bug where a null SiteIcon reference would be added into the pageURLToSiteIcon map causing a
        null dereference later

        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (-[WebCoreIconDatabaseBridge retainIconForURL:]):  Changed IconDatabase method name
        (-[WebCoreIconDatabaseBridge releaseIconForURL:]):  ditto
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::retainIconForPageURL):  Name change
        (WebCore::IconDatabase::releaseIconForPageURL):  ditto
        (WebCore::IconDatabase::setIconURLForPageURL):  Added the null site-icon check when changing a PageURL's iconURL
        * loader/icon/IconDatabase.h:  Some renames

2006-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        <mask>, <marker>, <pattern> inside <defs> do not work
        http://bugs.webkit.org/show_bug.cgi?id=6548

        * ksvg2/svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement): moved to .cpp file
        (WebCore::SVGDefsElement::isValid): moved to .cpp file
        (WebCore::SVGDefsElement::rendererIsNeeded): Added.
        (WebCore::SVGDefsElement::createRenderer): Added.
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement): adjusted spacing
        (WebCore::SVGGElement::parseMappedAttribute): adjusted spacing
        (WebCore::SVGDummyElement::SVGDummyElement): adjusted spacing

2006-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by darin and mjs.
        
        Add better SVGLoad event support.
        http://bugs.webkit.org/show_bug.cgi?id=6010
        There will still need to be additional support added for <link> and <script> elements.
        Not all of the error -> loaded -> error transition cases work yet.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLImageLoader.h:
        (WebCore::HTMLImageLoader::haveFiredLoadEvent):
        (WebCore::HTMLImageLoader::setHaveFiredLoadEvent):
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::SVGImageLoader):
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimatedBoolean.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::parseMappedAttribute):
        (WebCore::SVGElement::haveLoadedRequiredResources):
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        (WebCore::SVGElement::closeRenderer):
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::rendererIsNeeded):
        (WebCore::svg_dynamic_cast):
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (SVGImageElement::SVGImageElement):
        (SVGImageElement::haveLoadedRequiredResources):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::parseMappedAttribute):
        (WebCore::SVGScriptElement::executeScript):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): use new Event() instead of createEvent

2006-08-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10393
        Autogenerate NodeIterator and TreeWalker.
        
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.
        
        * bindings/js/JSNodeIteratorCustom.cpp: Added.
        (WebCore::JSNodeIterator::mark):
        * bindings/js/JSTreeWalkerCustom.cpp: Added.
        (WebCore::JSTreeWalker::mark):
        
        * bindings/js/kjs_traversal.cpp:
        * bindings/js/kjs_traversal.h:
        Remove implementations of DOMNodeIterator and DOMTreeWalker.

        * bindings/scripts/CodeGeneratorJS.pm:
        Add "CustomMarkFunction" attribute for classes where mark() needs to be overridden.
        
        * bindings/objc/DOM.mm:
        (-[DOMNodeIterator detach]):
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::detach):
        * dom/NodeIterator.h:
        Get rid of exception in detach, it isn't used at all and this function can't throw an exception according to the spec.
        * dom/NodeIterator.idl: Added.
        * dom/TreeWalker.idl: Added.

2006-08-14  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        The changes are plentiful, but small, mostly to improve performance
        1) Add a bool flag to SiteIcon to stop it from querying the database over and over
        2) Added a pageURL->iconURL hashmap to cache database results, as an optimization
        3) Fix a bug in setIconURLForPageURL code where the pageURL would still point to an old icon
        4) Added isIconURLRetained() to optimize the retain count check
        5) Prune old, unused code

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::imageDataForIconID): Removed unused code
        (WebCore::IconDatabase::imageDataForIconURL): Removed unused code
        (WebCore::IconDatabase::imageDataForPageURL): Removed unused code
        (WebCore::IconDatabase::isIconExpiredForIconURL): Removed LOG msg
        (WebCore::IconDatabase::isIconExpiredForPageURL): Removed LOG msg
        (WebCore::IconDatabase::iconURLForPageURL): Added a hashmap cache to avoid common queries
        (WebCore::IconDatabase::releaseIconForURL): Changed to is isRetained() instead of retainCount()
        (WebCore::IconDatabase::isIconURLRetained): Added - we don't care about the actual retain count
          for an icon so much as whether or not it is retained
        (WebCore::IconDatabase::setIconURLForPageURL): If the new and old iconURLs are the same, skip the
          SQLite code
        * loader/icon/IconDatabase.h:  Added new methods/variables
        * loader/icon/SiteIcon.cpp:
        (SiteIcon::SiteIcon): Added a flag so it only queries the database for icon data once
        (SiteIcon::getImage): Ditto

2006-08-14  David Hyatt  <hyatt@apple.com>

        Fix for bug 10385, add more support for crappy pseudo-XML-in-HTML.

        Reviewed by ggaren

        Added fast/parser/bad-xml-slash.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):

2006-08-14  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10204
          REGRESSION: title tag parsing problem breaks Travelocity and Google Analytics pages

        Test: fast/parser/title-error-test.html

        * html/HTMLParser.cpp: (WebCore::HTMLParser::handleError): Fixed an error
        handling case that was skipping until a </style> tag in code that was shared
        between both <title> and <style>. Also rearranged the code a tiny bit.

2006-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fixed some storage leaks
          (part of http://bugs.webkit.org/show_bug.cgi?id=10259)

        * platform/mac/ResourceLoaderMac.mm: (WebCore::ResourceLoader::start):
        Rearrange code so that "delete this" is called any time the function returns
        false -- ownership was inconsistent before.

        * rendering/RenderContainer.cpp: (WebCore::RenderContainer::removeChildNode):
        Call deleteLineBoxWrapper even when documentBeingDestroyed() is true, because
        some of what it does has to be done during destruction. A little awkward since
        I preserved the order of operations. Perhaps we could structure this better later.

2006-08-14  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan and Geoff Garen.

        <rdar://problem/3854950> AX Seed: Blackboard Learning Systems - frame names need to be put in AXDescription AXAttribute

        Test cases added: None.  Manual AX testing is way too awkward, and automated testing
        is not possible.  See following bug...
            <rdar://problem/4256882> Need automated testing support for accessibility APIs

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityDescription]):
        For a web area, return the name of the owning frame or iframe.
        
        (-[WebCoreAXObject accessibilityAttributeNames]):
        Advertize NSAccessibilityDescriptionAttribute.
        
        (-[WebCoreAXObject rendererForView:]):
        Clean up some old naming.

2006-08-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10353
        XMLSerializer and DOMParser should have real implementations
        
        Make real implementation files for DOMParser and XMLSerializer and wrap them
        using our bindings generation.
        
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMParser.cpp: Removed.
        * bindings/js/JSDOMParser.h: Removed.
        * bindings/js/JSXMLSerializer.cpp: Removed.
        * bindings/js/JSXMLSerializer.h: Removed.
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * page/DOMWindow.idl:
        * xml/DOMParser.cpp: Added.
        (WebCore::DOMParser::parseFromString):
        * xml/DOMParser.h: Added.
        * xml/DOMParser.idl: Added.
        * xml/XMLSerializer.cpp: Added.
        (WebCore::XMLSerializer::serializeToString):
        * xml/XMLSerializer.h: Added.
        * xml/XMLSerializer.idl: Added.

2006-08-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady.

        - removed WebKit-level dependencies from WebFormDataStream. Use WebCore version of system interface

        * WebCore.exp: export new functions
        * platform/mac/WebCoreSystemInterface.h: Added CFReadStream related functions
        * platform/mac/WebCoreSystemInterface.mm: ditto

2006-08-13  Maks Orlovich  <maksim@kde.org>

        Reviewed (and tweaked a little) by Maciej.
        
        - shrank the size of JSObject by 8 bytes and made the corresponding reduction to the cell size, resulting
        in a 1.2% speed improvement on JS iBench (and probably overall memory savings).

        The WebCore part of this is to expect only FunctionImp to have a scope, not all JSObjects.
        
        * bindings/js/kjs_events.cpp:
        (KJS::JSLazyEventListener::parseCode):

2006-08-12  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt and mjs.

        Fix two missing null checks causing layout test crashes.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): check e for null (null for pseudo styles)
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::requiresLayer): check parent()->element() for null


2006-08-11  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        The outermost <svg> element needs to clip itself
        http://bugs.webkit.org/show_bug.cgi?id=5358

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): adjust for SVG overflow rules
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::requiresLayer): only require layers for absolute/relative positioning of outermost SVG
        (WebCore::RenderSVGContainer::paint):
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h: remove dead methods
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm: remove dead methods
        (WebCore::KRenderingDeviceContextQuartz::KRenderingDeviceContextQuartz):
        * ksvg2/svg/SVGPaint.cpp: spacing changes
        (WebCore::SVGPaint::SVGPaint): spacing cleanup
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute): spacing cleanup
        * platform/GraphicsContext.h: Added concatCTM
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::concatCTM): Added.

2006-08-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Renamed a method/parameter for clarity and consistency, as well as some style
        cleanups and removing some ridiculously verbose log messages.
        Also added an _isEmpty method to the database and bridge for WebKit's use.
        Finally, added a central way for both WebKit and WebCore to get the icon database filename

        * bridge/mac/WebCoreIconDatabaseBridge.h:  Added _isEmpty and defaultDatabaseFilename
        * bridge/mac/WebCoreIconDatabaseBridge.mm:  Removed an unnecessary semicolon off most of these methods
        (-[WebCoreIconDatabaseBridge openSharedDatabaseWithPath:]):
        (-[WebCoreIconDatabaseBridge closeSharedDatabase]):
        (-[WebCoreIconDatabaseBridge isOpen]):
        (-[WebCoreIconDatabaseBridge _isEmpty]):  Added
        (-[WebCoreIconDatabaseBridge setPrivateBrowsingEnabled:]):
        (-[WebCoreIconDatabaseBridge privateBrowsingEnabled]):
        (-[WebCoreIconDatabaseBridge iconForPageURL:withSize:]):
        (-[WebCoreIconDatabaseBridge iconURLForPageURL:]):
        (-[WebCoreIconDatabaseBridge defaultIconWithSize:]):
        (-[WebCoreIconDatabaseBridge retainIconForURL:]):
        (-[WebCoreIconDatabaseBridge releaseIconForURL:]):
        (-[WebCoreIconDatabaseBridge _setIconData:forIconURL:]):
        (-[WebCoreIconDatabaseBridge _setHaveNoIconForIconURL:]):
        (-[WebCoreIconDatabaseBridge _setIconURL:forPageURL:]):
        (-[WebCoreIconDatabaseBridge _hasIconForIconURL:]):
        (-[WebCoreIconDatabaseBridge defaultDatabaseFilename]):  Added

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultDatabaseFilename):  Added
        (WebCore::IconDatabase::open):  
        (WebCore::IconDatabase::isEmpty):  Added
        (WebCore::IconDatabase::retainIconForURL):  Removed log message
        (WebCore::IconDatabase::releaseIconForURL):  Removed log message
        * loader/icon/IconDatabase.h: 

2006-08-11  David Hyatt  <hyatt@apple.com>

        Eliminate RenderImageButton.

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject isImageButton]):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createRenderer):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::isImage):

2006-08-11  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        - Fix for <rdar://problem/4656274> 
        REGRESSION: option elements are selected when added regardless of "selected" property

        Test: fast/forms/option-constructor-selected.html

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::setOption):
        When adding an option element, check that the option element is selected before calling setSelectedIndex.

2006-08-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 10349, make sure to call setChanged when an anchor changes
        from not being a link to being a link (and vice versa).

        Test is in fast/dynamic/link-href-change.html

        Reviewed by darin

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * html/HTMLAnchorElement.h:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::parseMappedAttribute):

2006-08-09  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        Revert an over-optimization step that messed up the HashSet lookup.

        * dom/DOMImplementation.cpp:

2006-08-12  Oliver  <ojh16@student.canterbury.ac.nz>

        Rubber stamped by tim

        Removed commented out code

        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):

2006-08-12  Oliver  <ojh16@student.canterbury.ac.nz>

        Reviewed by geoff

        Fixed regression in SVG image layout
        (see bug #10346)

        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):

2006-08-10  Anders Carlsson  <acarlsson@apple.com>

        Rubber-stamped by Maciej.

        Move xpath to xml.
        
        * DerivedSources.make:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * xpath/XPathEvaluator.cpp: Removed.
        * xpath/XPathEvaluator.h: Removed.
        * xpath/XPathEvaluator.idl: Removed.
        * xpath/XPathExpression.cpp: Removed.
        * xpath/XPathExpression.h: Removed.
        * xpath/XPathExpression.idl: Removed.
        * xpath/XPathNSResolver.cpp: Removed.
        * xpath/XPathNSResolver.h: Removed.
        * xpath/XPathNSResolver.idl: Removed.
        * xpath/XPathNamespace.cpp: Removed.
        * xpath/XPathNamespace.h: Removed.
        * xpath/XPathResult.cpp: Removed.
        * xpath/XPathResult.h: Removed.
        * xpath/XPathResult.idl: Removed.
        * xpath/impl/XPathExpressionNode.cpp: Removed.
        * xpath/impl/XPathExpressionNode.h: Removed.
        * xpath/impl/XPathFunctions.cpp: Removed.
        * xpath/impl/XPathFunctions.h: Removed.
        * xpath/impl/XPathGrammar.y: Removed.
        * xpath/impl/XPathParser.cpp: Removed.
        * xpath/impl/XPathParser.h: Removed.
        * xpath/impl/XPathPath.cpp: Removed.
        * xpath/impl/XPathPath.h: Removed.
        * xpath/impl/XPathPredicate.cpp: Removed.
        * xpath/impl/XPathPredicate.h: Removed.
        * xpath/impl/XPathStep.cpp: Removed.
        * xpath/impl/XPathStep.h: Removed.
        * xpath/impl/XPathUtil.cpp: Removed.
        * xpath/impl/XPathUtil.h: Removed.
        * xpath/impl/XPathValue.cpp: Removed.
        * xpath/impl/XPathValue.h: Removed.
        * xpath/impl/XPathVariableReference.cpp: Removed.
        * xpath/impl/XPathVariableReference.h: Removed.

2006-08-10  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4600112> REGRESSION: VO no longer able to review text within an edit field on web pages

        Test cases added: None.  Manual AX testing is way too awkward, and automated testing
        is not possible.  See following bug...
            <rdar://problem/4256882> Need automated testing support for accessibility APIs

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject value]):
        Add handling for text input fields.

2006-08-09  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10247
        REGRESSION: Unable to build webkit without SVG/XPATH

        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException):
        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_proxy.cpp:
        * bindings/js/kjs_proxy.h:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        (raiseDOMException):
        * bindings/objc/DOMXPath.mm:
        * bindings/objc/DOMXPathInternal.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (+[WebCoreFrameBridge supportedNonImageMIMETypes]):
        * css/CSSGrammar.y:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::propertyID):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::loadDefaultStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/cssstyleselector.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::createElementNS):
        (WebCore::Document::implicitClose):
        (WebCore::Document::recalcStyleSelector):
        (WebCore::Document::createEvent):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        * dom/Node.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.h:
        * kcanvas/KCanvasCreator.cpp:
        * kcanvas/KCanvasCreator.h:
        * kcanvas/KCanvasFilters.cpp:
        * kcanvas/KCanvasFilters.h:
        * kcanvas/KCanvasImage.h:
        * kcanvas/KCanvasMatrix.cpp:
        * kcanvas/KCanvasMatrix.h:
        * kcanvas/KCanvasPath.cpp:
        * kcanvas/KCanvasPath.h:
        * kcanvas/KCanvasResourceListener.h:
        * kcanvas/KCanvasResources.cpp:
        * kcanvas/KCanvasResources.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        * kcanvas/RenderForeignObject.cpp:
        * kcanvas/RenderForeignObject.h:
        * kcanvas/RenderPath.cpp:
        * kcanvas/RenderPath.h:
        * kcanvas/RenderSVGContainer.cpp:
        * kcanvas/RenderSVGContainer.h:
        * kcanvas/RenderSVGImage.cpp:
        * kcanvas/RenderSVGImage.h:
        * kcanvas/RenderSVGText.cpp:
        * kcanvas/RenderSVGText.h:
        * kcanvas/device/KRenderingDevice.cpp:
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingFillPainter.cpp:
        * kcanvas/device/KRenderingFillPainter.h:
        * kcanvas/device/KRenderingPaintServer.h:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/KRenderingPaintServerSolid.cpp:
        * kcanvas/device/KRenderingPaintServerSolid.h:
        * kcanvas/device/KRenderingStrokePainter.cpp:
        * kcanvas/device/KRenderingStrokePainter.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm:
        * kcanvas/device/quartz/KCanvasPathQuartz.mm:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        * kcanvas/device/quartz/QuartzSupport.h:
        * kcanvas/device/quartz/QuartzSupport.mm:
        * ksvg2/bindings/js/JSSVGElementWrapperFactory.cpp:
        * ksvg2/bindings/js/JSSVGElementWrapperFactory.h:
        * ksvg2/css/SVGCSSParser.cpp:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        * ksvg2/css/SVGRenderStyle.cpp:
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/ecma/GlobalObject.cpp:
        * ksvg2/ecma/GlobalObject.h:
        * ksvg2/events/JSSVGLazyEventListener.cpp:
        * ksvg2/events/JSSVGLazyEventListener.h:
        * ksvg2/events/SVGZoomEvent.cpp:
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/ksvg.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        * ksvg2/misc/KSVGTimeScheduler.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/misc/SVGImageLoader.cpp:
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/svg/DOMList.h:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAngle.cpp:
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.cpp:
        * ksvg2/svg/SVGAnimateElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimatedAngle.cpp:
        * ksvg2/svg/SVGAnimatedAngle.h:
        * ksvg2/svg/SVGAnimatedBoolean.cpp:
        * ksvg2/svg/SVGAnimatedBoolean.h:
        * ksvg2/svg/SVGAnimatedColor.cpp:
        * ksvg2/svg/SVGAnimatedColor.h:
        * ksvg2/svg/SVGAnimatedEnumeration.cpp:
        * ksvg2/svg/SVGAnimatedEnumeration.h:
        * ksvg2/svg/SVGAnimatedInteger.cpp:
        * ksvg2/svg/SVGAnimatedInteger.h:
        * ksvg2/svg/SVGAnimatedLength.cpp:
        * ksvg2/svg/SVGAnimatedLength.h:
        * ksvg2/svg/SVGAnimatedLengthList.cpp:
        * ksvg2/svg/SVGAnimatedLengthList.h:
        * ksvg2/svg/SVGAnimatedNumber.cpp:
        * ksvg2/svg/SVGAnimatedNumber.h:
        * ksvg2/svg/SVGAnimatedNumberList.cpp:
        * ksvg2/svg/SVGAnimatedNumberList.h:
        * ksvg2/svg/SVGAnimatedPathData.cpp:
        * ksvg2/svg/SVGAnimatedPathData.h:
        * ksvg2/svg/SVGAnimatedPoints.cpp:
        * ksvg2/svg/SVGAnimatedPoints.h:
        * ksvg2/svg/SVGAnimatedPreserveAspectRatio.cpp:
        * ksvg2/svg/SVGAnimatedPreserveAspectRatio.h:
        * ksvg2/svg/SVGAnimatedRect.cpp:
        * ksvg2/svg/SVGAnimatedRect.h:
        * ksvg2/svg/SVGAnimatedString.cpp:
        * ksvg2/svg/SVGAnimatedString.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGAnimatedTransformList.cpp:
        * ksvg2/svg/SVGAnimatedTransformList.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGCircleElement.cpp:
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGClipPathElement.cpp:
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGColor.cpp:
        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGCursorElement.cpp:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGDOMImplementation.cpp:
        * ksvg2/svg/SVGDOMImplementation.h:
        * ksvg2/svg/SVGDefsElement.cpp:
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGDescElement.cpp:
        * ksvg2/svg/SVGDescElement.h:
        * ksvg2/svg/SVGDocument.cpp:
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGElement.cpp:
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElementInstance.cpp:
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstanceList.cpp:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEDistantLightElement.cpp:
        * ksvg2/svg/SVGFEDistantLightElement.h:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEFuncAElement.cpp:
        * ksvg2/svg/SVGFEFuncAElement.h:
        * ksvg2/svg/SVGFEFuncBElement.cpp:
        * ksvg2/svg/SVGFEFuncBElement.h:
        * ksvg2/svg/SVGFEFuncGElement.cpp:
        * ksvg2/svg/SVGFEFuncGElement.h:
        * ksvg2/svg/SVGFEFuncRElement.cpp:
        * ksvg2/svg/SVGFEFuncRElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.h:
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFEPointLightElement.cpp:
        * ksvg2/svg/SVGFEPointLightElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFESpotLightElement.cpp:
        * ksvg2/svg/SVGFESpotLightElement.h:
        * ksvg2/svg/SVGFETileElement.cpp:
        * ksvg2/svg/SVGFETileElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGFilterElement.cpp:
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        * ksvg2/svg/SVGFitToViewBox.cpp:
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGGElement.cpp:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGHelper.cpp:
        * ksvg2/svg/SVGHelper.h:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLangSpace.cpp:
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/SVGLength.cpp:
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGLengthList.cpp:
        * ksvg2/svg/SVGLengthList.h:
        * ksvg2/svg/SVGLineElement.cpp:
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGList.h:
        * ksvg2/svg/SVGLocatable.cpp:
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMatrix.cpp:
        * ksvg2/svg/SVGMatrix.h:
        * ksvg2/svg/SVGNumber.cpp:
        * ksvg2/svg/SVGNumber.h:
        * ksvg2/svg/SVGNumberList.cpp:
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPaint.cpp:
        * ksvg2/svg/SVGPaint.h:
        * ksvg2/svg/SVGPathElement.cpp:
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPathSeg.cpp:
        * ksvg2/svg/SVGPathSeg.h:
        * ksvg2/svg/SVGPathSegArc.cpp:
        * ksvg2/svg/SVGPathSegArc.h:
        * ksvg2/svg/SVGPathSegClosePath.cpp:
        * ksvg2/svg/SVGPathSegClosePath.h:
        * ksvg2/svg/SVGPathSegCurvetoCubic.cpp:
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.cpp:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.cpp:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.cpp:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * ksvg2/svg/SVGPathSegLineto.cpp:
        * ksvg2/svg/SVGPathSegLineto.h:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.cpp:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        * ksvg2/svg/SVGPathSegLinetoVertical.cpp:
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        * ksvg2/svg/SVGPathSegList.cpp:
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPathSegMoveto.cpp:
        * ksvg2/svg/SVGPathSegMoveto.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPoint.cpp:
        * ksvg2/svg/SVGPoint.h:
        * ksvg2/svg/SVGPointList.cpp:
        * ksvg2/svg/SVGPointList.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/SVGPolygonElement.cpp:
        * ksvg2/svg/SVGPolygonElement.h:
        * ksvg2/svg/SVGPolylineElement.cpp:
        * ksvg2/svg/SVGPolylineElement.h:
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGRect.cpp:
        * ksvg2/svg/SVGRect.h:
        * ksvg2/svg/SVGRectElement.cpp:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGScriptElement.cpp:
        * ksvg2/svg/SVGScriptElement.h:
        * ksvg2/svg/SVGSetElement.cpp:
        * ksvg2/svg/SVGSetElement.h:
        * ksvg2/svg/SVGStopElement.cpp:
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStringList.cpp:
        * ksvg2/svg/SVGStringList.h:
        * ksvg2/svg/SVGStylable.cpp:
        * ksvg2/svg/SVGStylable.h:
        * ksvg2/svg/SVGStyleElement.cpp:
        * ksvg2/svg/SVGStyleElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGStyledLocatableElement.cpp:
        * ksvg2/svg/SVGStyledLocatableElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGSwitchElement.cpp:
        * ksvg2/svg/SVGSwitchElement.h:
        * ksvg2/svg/SVGSymbolElement.cpp:
        * ksvg2/svg/SVGSymbolElement.h:
        * ksvg2/svg/SVGTRefElement.cpp:
        * ksvg2/svg/SVGTRefElement.h:
        * ksvg2/svg/SVGTSpanElement.cpp:
        * ksvg2/svg/SVGTSpanElement.h:
        * ksvg2/svg/SVGTests.cpp:
        * ksvg2/svg/SVGTests.h:
        * ksvg2/svg/SVGTextContentElement.cpp:
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        * ksvg2/svg/SVGTextPositioningElement.h:
        * ksvg2/svg/SVGTitleElement.cpp:
        * ksvg2/svg/SVGTitleElement.h:
        * ksvg2/svg/SVGTransform.cpp:
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransformList.cpp:
        * ksvg2/svg/SVGTransformList.h:
        * ksvg2/svg/SVGTransformable.cpp:
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGURIReference.cpp:
        * ksvg2/svg/SVGURIReference.h:
        * ksvg2/svg/SVGUseElement.cpp:
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGViewElement.cpp:
        * ksvg2/svg/SVGViewElement.h:
        * ksvg2/svg/SVGZoomAndPan.cpp:
        * ksvg2/svg/SVGZoomAndPan.h:
        * ksvg2/svg/svgpathparser.cpp:
        * ksvg2/svg/svgpathparser.h:
        * page/DOMWindow.idl:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::begin):
        (WebCore::Frame::pauseTimeouts):
        (WebCore::Frame::resumeTimeouts):
        * platform/GraphicsContext.h:
        * platform/cg/GraphicsContextCG.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::inheritFrom):
        (WebCore::RenderStyle::operator==):
        (WebCore::RenderStyle::inheritedNotEqual):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::externalRepresentation):
        * xpath/XPathEvaluator.cpp:
        * xpath/XPathEvaluator.h:
        * xpath/XPathExpression.cpp:
        * xpath/XPathExpression.h:
        * xpath/XPathNSResolver.cpp:
        * xpath/XPathNSResolver.h:
        * xpath/XPathNamespace.cpp:
        * xpath/XPathNamespace.h:
        * xpath/XPathResult.cpp:
        * xpath/XPathResult.h:
        * xpath/impl/XPathExpressionNode.cpp:
        * xpath/impl/XPathExpressionNode.h:
        * xpath/impl/XPathFunctions.cpp:
        * xpath/impl/XPathFunctions.h:
        * xpath/impl/XPathGrammar.y:
        * xpath/impl/XPathParser.cpp:
        * xpath/impl/XPathParser.h:
        * xpath/impl/XPathPath.cpp:
        * xpath/impl/XPathPath.h:
        * xpath/impl/XPathPredicate.cpp:
        * xpath/impl/XPathPredicate.h:
        * xpath/impl/XPathStep.cpp:
        * xpath/impl/XPathStep.h:
        * xpath/impl/XPathUtil.cpp:
        * xpath/impl/XPathUtil.h:
        * xpath/impl/XPathValue.cpp:
        * xpath/impl/XPathValue.h:
        * xpath/impl/XPathVariableReference.cpp:
        * xpath/impl/XPathVariableReference.h:

        Change all #if SVG_SUPPORT to #ifdef SVG_SUPPORT and
        #if XPATH_SUPPORT to #ifdef XPATH_SUPPORT
        (except for one #if !SVG_SUPPORT to a #ifndef SVG_SUPPORT
        in RenderTreeAsText.cpp)

2006-08-08  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10230
        SVGDOMImplementation should die (and be rolled into DOMImplementation)

        Delete SVGDOMImplementation and references to it. The
        svg specific functionality is now in DOMImplementation.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMImplementation.cpp:
        (WebCore::svgFeatureSet):
        (WebCore::DOMImplementation::hasFeature):
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createSVGDocument):
        * dom/DOMImplementation.h:
        * ksvg2/bindings/idl/svg/SVGDOMImplementation.idl: Removed.
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        * ksvg2/svg/SVGColor.cpp:
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::isSupported):
        * ksvg2/svg/SVGFEBlendElement.cpp:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        * ksvg2/svg/SVGFETileElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGPolyElement.cpp:
        * ksvg2/svg/SVGStopElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::isValid):
        * ksvg2/svg/SVGTransformable.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::begin):

2006-08-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders and John

        Icons can now refresh when new data is sent from WebKit, both on disk and in memory

        * bridge/mac/WebCoreIconDatabaseBridge.h:
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (WebCore::IconDatabase::loadIconFromURL):  Allows WebCore/Kit to kick off a load
        outside of any greater context
        (-[WebCoreIconDatabaseBridge isIconExpiredForIconURL:]):
        (-[WebCoreIconDatabaseBridge isIconExpiredForPageURL:]): Allows WebKit
        to get whether or not an icon has expired

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::recreateDatabase): Changed database schema slightly
        (WebCore::IconDatabase::createPrivateTables): Changed database schema slightly
        (WebCore::IconDatabase::iconForPageURL): 
        (WebCore::IconDatabase::isIconExpiredForIconURL): Get if an icon has expired
        (WebCore::IconDatabase::isIconExpiredForPageURL): Get if an icon has expired
        (WebCore::IconDatabase::setIconDataForIconURL): Force a refresh of the in memory
        image when new icon data is loaded
        (WebCore::IconDatabase::setIconURLForPageURL): added a check for null iconID

        * loader/icon/IconDatabase.h: added/changed some methods
        * loader/icon/SiteIcon.cpp:
        (SiteIcon::getImage): simplified/removed debugging code
        (SiteIcon::manuallySetImageData): allow the image data to be changed when new icon
        data is loaded

2006-08-05  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        - fix a storage leak

        * rendering/RenderView.cpp: (WebCore::RenderView::setSelection):
        Delete the values if we are going to exit without using the maps.
        Otherwise all the values leak.

2006-08-05  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10213
          REGRESSION: Crash in WebCore::RenderLayer::isTransparent involving <iframe> and <select>

        Test: fast/frames/iframe-option-crash.xhtml

        * rendering/RenderView.cpp: (WebCore::RenderView::paintBoxDecorations):
        Check for a nil renderer.

2006-08-04  David Hyatt  <hyatt@apple.com>

        Fix for Radar bug #4644045, regression where dragging selection no longer
        works for floats contained inside layers.  I added an optimization to
        refine dirty rect checking for layers, and it incorrectly excluded floats
        from the paint bounds since PaintPhaseSelection was not considered when
        analyzing the floatRect().

        Reviewed by beth

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):

2006-08-04  David Hyatt  <hyatt@apple.com>

        Fix remove() so that it is equivalent to calling removeChild on the
        parent.  This involved moving three operations that remove did.

        (1) Move the accessibility object cache removal into the destroy methods,
        since this really should just happen when a render object is going away.

        (2) removeFromObjectLists shifted into removeChild, which means it will
        now be called more often (this is a correct change).  Note that there is
        also now a new guard on removeFromObjectLists so that it won't do any
        work unless the document is not being destroyed.

        (3) The big one.  deleteLineBoxWrapper was not getting called to clean up
        the line box tree.  This moved right into RenderContainer's removeChildNode so
        that it is now done even in the lowest level RenderContainer removal primitive.

        Reviewed by beth

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode):
        (WebCore::RenderContainer::removeChild):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeFromObjectLists):
        (WebCore::RenderObject::destroy):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::remove):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2006-08-04  David Hyatt  <hyatt@apple.com>

        Back out the fix for list marker crashes.  The actual bug here is that
        there is a confusing mismatch between remove() and removeChild() in the
        render tree.  remove() does a little bit of extra work that removeChild
        should be doing instead (so that remove() can just be a shorthand for
        removeChild).

        This conservative fix does not solve the remove/removeChild mismatch
        but instead just changes the list marker updating code to use remove
        instead.

        Reviewed by beth

        Test Case: fast/lists/dynamic-marker-crash.html

        * rendering/ListMarkerBox.cpp:
        * rendering/ListMarkerBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation):

2006-08-04  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10192
          Make WebCore (and friends) compile with -Wshorten-64-to-32

          * Adds -Wshorten-64-to-32 flag to Xcode project.
          * Adds 'f' to float literals where expecting a float.
          * Use cosf() instead of cos() when assigning to a float.

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/device/quartz/filters/WKDiffuseLightingFilter.m:
        (+[WKDiffuseLightingFilter initialize]):
        * kcanvas/device/quartz/filters/WKDiscreteTransferFilter.m:
        (-[WKDiscreteTransferFilter outputImage]):
        * kcanvas/device/quartz/filters/WKDisplacementMapFilter.m:
        (+[WKDisplacementMapFilter initialize]):
        * kcanvas/device/quartz/filters/WKSpecularLightingFilter.m:
        (+[WKSpecularLightingFilter initialize]):
        * kcanvas/device/quartz/filters/WKSpotLightFilter.m:
        (-[WKSpotLightFilter outputImage]):
        * kcanvas/device/quartz/filters/WKTableTransferFilter.m:
        (-[WKTableTransferFilter outputImage]):

2006-08-03  David Hyatt  <hyatt@apple.com>

        Fix for bug 10229, don't bother trying to clear when no floats are
        present.  I suspect there's still a bug in the math that follows, but
        this fix is safer in that it just does the obvious thing (and doesn't
        compute any clearance if no floats are even around).

        Reviewed by maciej

        * ChangeLog:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getClearDelta):

2006-08-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4641033/4515463/4052426/4046570/4053718/4053724/4060115/4062858>
        Copy/Paste fidelity was bad.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        * editing/markup.cpp:
        (WebCore::startMarkup): We were not adding non-inheritable styles
        to the markup for an element unless they were in the elements inline
        style declaration.

2006-08-03  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10176
          Make WebCore compile with -Wundef

          * Adds -Wundef flag to Xcode project
          * Converts #ifs to #ifdef and #ifndefs where needed.
          * Replaces #ifdef WIN32 with #if PLATFORM(WIN_OS) or PLATFORM(WIN)
            (and in one instance in config.h with #if !COMPILER(MSVC))
          * Added #define YYMAXDEPTH 10000 in XPathGrammar.y and CSSGrammar.y
            to fix a warning from within Bison.
          * Cleaned up style a little in surrounding code.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXTextMarkerRangeForUnorderedTextMarkers:]):
        * config.h:
        * css/CSSGrammar.y:
        * css/MediaFeatureNames.cpp:
        * css/MediaFeatureNames.h:
        * css/cssparser.cpp:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::setActive):
        * dom/Element.cpp:
        (WebCore::Element::attach):
        * dom/Element.h:
        * dom/EventNames.cpp:
        * dom/EventNames.h:
        * dom/NamedAttrMap.h:
        * dom/Position.cpp:
        * dom/QualifiedName.cpp:
        * dom/QualifiedName.h:
        * dom/Range.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::error):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::continueProcessing):
        (WebCore::HTMLTokenizer::write):
        (WebCore::HTMLTokenizer::timerFired):
        (WebCore::HTMLTokenizer::notifyFinished):
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/scripts/make_names.pl:
        * loader/CachedResource.h:
        * loader/LoaderFunctions.h:
        * loader/loader.h:
        * page/Frame.cpp:
        * page/FrameTree.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::clear):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::unscheduleRelayout):
        * platform/AtomicString.cpp:
        * platform/AtomicString.h:
        * platform/Cursor.h:
        * platform/DeprecatedArray.h:
        * platform/DeprecatedString.cpp:
        (WebCore::allocateHandle):
        (WebCore::initializeHandleNodeBlock):
        (WebCore::freeHandle):
        * platform/FloatPoint.h:
        * platform/FloatRect.h:
        * platform/FloatSize.h:
        * platform/GraphicsContext.h:
        * platform/Image.h:
        * platform/IntPoint.h:
        * platform/IntRect.h:
        (WebCore::IntRect::inflateX):
        (WebCore::IntRect::inflateY):
        * platform/IntSize.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformString.h:
        * platform/ResourceLoader.h:
        * platform/ResourceLoaderInternal.h:
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/ScrollView.h:
        * platform/StaticConstructors.h:
        * platform/StreamingTextDecoderICU.cpp:
        (WebCore::StreamingTextDecoderICU::convert):
        * platform/StringImpl.h:
        * platform/Widget.h:
        * platform/mac/BlockExceptions.mm:
        * platform/mac/ColorMac.mm:
        (+[WebCoreControlTintObserver WebCore]):
        * platform/mac/FloatPointMac.mm:
        * platform/mac/FloatRectMac.mm:
        * platform/mac/FloatSizeMac.mm:
        * platform/mac/FontMac.mm:
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/mac/IntPointMac.mm:
        * platform/mac/IntRectMac.mm:
        * platform/mac/IntSizeMac.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * rendering/RenderBlock.h:
        * rendering/RenderTableCell.h:
        * rendering/bidi.cpp:
        (WebCore::appendRun):
        (WebCore::RenderBlock::layoutInlineChildren):
        * xml/XSLTProcessor.cpp:
        (WebCore::parseErrorFunc):
        * xpath/impl/XPathGrammar.y:

2006-08-03  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej and Beth.

        Fix use-after-dispose heap corruption bug.

        * rendering/ListMarkerBox.cpp:
        (WebCore::ListMarkerBox::destroy): Only call removeChild if we're not
        destroying the document

2006-08-03  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        - Fixed Windows build.

        * platform/Color.cpp:
        (WebCore::makeRGBAFromHSLA): Whitespace change
        * platform/win/TemporaryLinkStubs.cpp: Add new method stubs
        (PlatformScrollBar::PlatformScrollBar):
        (PlatformScrollBar::~PlatformScrollBar):
        (PlatformScrollBar::width):
        (PlatformScrollBar::height):
        (PlatformScrollBar::setEnabled):
        (PlatformScrollBar::paint):
        (PlatformScrollBar::setScrollBarValue):
        (PlatformScrollBar::setKnobProportion):
        (PlatformScrollBar::setRect):
        (ScrollBar::ScrollBar):
        (ScrollBar::scroll):
        (ScrollBar::setValue):

2006-08-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs
        
        <http://bugs.webkit.org/show_bug.cgi?id=10225>
        GMail Editor: Change Hilite Color doesn't work

        * editing/JSEditor.cpp: Added support for execCommand("HiliteColor", ...).
        It's what GMail uses to implement text hiliting.  It's just a synonym for BackColor.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved): Moved a comment
        a more appropriate place.

2006-08-03  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Adele and Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10177
          REGRESSION: Successfully dragging text into a disabled field

        Test: fast/forms/textfield-drag-into-disabled.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createDivStyle): Changed to set -webkit-user-modify
        to read-only on the inner div if the control is disabled.       
        (WebCore::RenderTextControl::updateFromElement): Ditto.

2006-08-03  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10198
          REGRESSION: WebKit r15750 crashes while loading anthem.com

        Test: fast/overflow/generated-content-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Added a null check for
        the renderer's element. Generated content does not have an element and
        therefore does not need to maintain overflow status.

2006-08-03  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10202
          REGRESSION: Repro crash when loading an empty image document

        Test: fast/tokenizer/image-empty-crash.html

        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::stopParsing): Added null check for m_imageElement.
        (WebCore::ImageTokenizer::finish): Ditto.

2006-08-03  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - clean up "flip"-related code a tiny bit

        * platform/Screen.h: Removed redundant parameter names.
        * platform/mac/ScreenMac.mm:
        (WebCore::flipScreenRect): Changed to call flipScreenPoint so we only have one
        copy of the flipping code.
        (WebCore::flipScreenPoint): Fixed indentation.

        * bridge/mac/WebCoreFrameBridge.mm: (globalPoint): Removed type casts and
        simplified a bit.

        * platform/mac/PlatformMouseEventMac.mm: (WebCore::globalPositionForEvent):
        * platform/mac/WheelEventMac.mm: (WebCore::globalPositionForEvent):
        Removed unneeded local variable.

2006-08-02  David Hyatt  <hyatt@apple.com>

        Abstract RenderLayer scrollbar creation and destruction so that there
        is a clean spot in which to drop in engine scrollbar stuff.

        Reviewed by timo

        * platform/ScrollBar.h:
        (WebCore::ScrollBar::hasPlatformScrollBars):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::destroyScrollbar):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        * rendering/RenderLayer.h:

2006-08-02  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3438
          incorrect display of transparent 1x1 PNGs

        Test: fast/replaced/image-solid-color-with-alpha.html

        * platform/mac/ImageMac.mm:
        (WebCore::Image::checkForSolidColor): Changed to divide each color component
        by the alpha component. You need to do that since the bitmap context has
        premultiplied alpha but m_solidColor should be non-premultiplied.

2006-08-02  Adam Roben  <aroben@apple.com>

        Reviewed by Brady.

        - Remove redundant #include

        * loader/loader.cpp:

2006-07-31  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=9955
        Colors scaled from [0, 1] range to [0, 255] incorrectly
        
        Fixes scaling issue and fixes Color to follow style guidelines.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * platform/Color.cpp:
        (WebCore::calcHue):
        (WebCore::makeRGBAFromHSLA):
        (WebCore::Color::Color):
        (WebCore::Color::name):
        (WebCore::Color::setNamedColor):
        (WebCore::Color::light):
        (WebCore::Color::dark):
        (WebCore::blend):
        * platform/Color.h:
        (WebCore::Color::Color):
        (WebCore::Color::isValid):
        (WebCore::Color::red):
        (WebCore::Color::green):
        (WebCore::Color::blue):
        (WebCore::Color::alpha):
        (WebCore::Color::rgb):
        (WebCore::Color::setRGB):
        (WebCore::operator==):
        (WebCore::operator!=):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorder):

2006-07-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        - fix http://bugs.webkit.org/show_bug.cgi?id=10158
          REGRESSION: Selection highlight is dark and opaque when solid-color images are used

        Reviewed by Darin.

        Pixel test: fast/backgrounds/solid-color-context-restore.html

        * platform/mac/ImageMac.mm:
        (WebCore::Image::draw): Added calls to preserve the graphics context
        around the painting of a solid color image.
        (WebCore::Image::drawTiled): Ditto.

2006-07-31  Maciej Stachowiak  <mjs@apple.com>

        Rubber-stamped by Tim Hatcher.

        - renamed TransferJob to ResourceLoader

        * Projects/gdk/webcore-gdk.bkl:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreResourceLoaderImp.h:
        * bridge/mac/WebCoreResourceLoaderImp.mm:
        (-[WebCoreResourceLoaderImp redirectedToURL:]):
        (-[WebCoreResourceLoaderImp addData:]):
        (-[WebCoreResourceLoaderImp finishJobAndHandle:]):
        * bridge/win/FrameWin.cpp:
        * dom/XMLTokenizer.cpp:
        (WebCore::openFunc):
        * loader/Cache.cpp:
        * loader/LoaderFunctions.h:
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::receivedAllData):
        (WebCore::Loader::receivedResponse):
        (WebCore::Loader::receivedData):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::jobForRequest):
        * loader/loader.h:
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::ServeSynchronousRequest):
        * platform/ResourceLoader.cpp: Added.
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::isErrorPage):
        (WebCore::ResourceLoader::error):
        (WebCore::ResourceLoader::setError):
        (WebCore::ResourceLoader::queryMetaData):
        (WebCore::ResourceLoader::addMetaData):
        (WebCore::ResourceLoader::kill):
        (WebCore::ResourceLoader::url):
        (WebCore::ResourceLoader::postData):
        (WebCore::ResourceLoader::method):
        (WebCore::ResourceLoader::client):
        * platform/ResourceLoader.h: Added.
        (WebCore::ResourceLoader::getInternal):
        * platform/ResourceLoaderClient.h: Added.
        (WebCore::ResourceLoaderClient::~ResourceLoaderClient):
        (WebCore::ResourceLoaderClient::receivedRedirect):
        (WebCore::ResourceLoaderClient::receivedResponse):
        (WebCore::ResourceLoaderClient::receivedData):
        (WebCore::ResourceLoaderClient::receivedAllData):
        * platform/ResourceLoaderInternal.h: Added.
        (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
        * platform/TransferJob.cpp: Removed.
        * platform/TransferJob.h: Removed.
        * platform/TransferJobClient.h: Removed.
        * platform/TransferJobInternal.h: Removed.
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::openURL):
        (WebCore::FrameGdk::urlSelected):
        (WebCore::FrameGdk::receivedData):
        (WebCore::FrameGdk::receivedAllData):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/ResourceLoaderCurl.cpp: Added.
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::cancel):
        * platform/gdk/ResourceLoaderManager.cpp: Added.
        (WebCore::ResourceLoaderManager::ResourceLoaderManager):
        (WebCore::ResourceLoaderManager::get):
        (WebCore::ResourceLoaderManager::useSimpleTransfer):
        (WebCore::writeCallback):
        (WebCore::ResourceLoaderManager::downloadTimerCallback):
        (WebCore::ResourceLoaderManager::remove):
        (WebCore::ResourceLoaderManager::add):
        (WebCore::ResourceLoaderManager::cancel):
        * platform/gdk/ResourceLoaderManager.h: Added.
        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::ServeSynchronousRequest):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        * platform/gdk/TransferJobCurl.cpp: Removed.
        * platform/gdk/TransferJobManager.cpp: Removed.
        * platform/gdk/TransferJobManager.h: Removed.
        * platform/mac/ResourceLoaderMac.mm: Added.
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        (WebCore::ResourceLoader::setLoader):
        (WebCore::ResourceLoader::receivedResponse):
        (WebCore::ResourceLoader::cancel):
        * platform/mac/TransferJobMac.mm: Removed.
        * platform/win/ResourceLoaderWin.cpp: Added.
        (WebCore::addToOutstandingJobs):
        (WebCore::lookupResourceLoader):
        (WebCore::ResourceLoaderWndProc):
        (WebCore::initializeOffScreenResourceLoaderWindow):
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):
        * platform/win/ResourceLoaderWin.h: Added.
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ServeSynchronousRequest):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        * platform/win/TransferJobWin.cpp: Removed.
        * platform/win/TransferJobWin.h: Removed.
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::receivedAllData):
        (WebCore::XMLHttpRequest::receivedRedirect):
        (WebCore::XMLHttpRequest::receivedData):
        * xml/xmlhttprequest.h:

2006-07-31  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - removed obsolete cell margin hack

        * rendering/RenderBox.cpp: (WebCore::RenderBox::calcVerticalMargins):
        Set top and bottom margins to 0 for table cells instead of -16384.
        No effect on layout (including layout tests).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Added a few comments about differences between this class and the
        what the CSS specification says about computed style.

2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9738
        Bug 9738: Unqualified :hover selector ignored in strict parsing mode

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkSelector): Restrict the :hover and :active
        exclusion based on onlyHoverActive to quirks mode.

2006-07-31  David Hyatt  <hyatt@apple.com>

        Fix for bug 10179, digg.com scrolls slowly.  Improve fixed positioning
        and fixed backgrounds so that a count of them is kept on the FrameView.
        This allows us to switch slow scrolling on and off as these objects come
        and go.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::setUseSlowRepaints):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        * page/FrameView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2006-07-31  David Hyatt  <hyatt@apple.com>

        Begin disentangling of scrollbar logic in preparation for engine-implemented
        scrollbars.  Split ScrollBar into two classes, an abstract base (still named
        ScrollBar) and a new PlatformScrollBar subclass.  This subclass is used only
        by platforms that want to continue to use a platform scrollbar (rather than
        the engine one).

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLCanvasElement.h:
        * page/Frame.cpp:
        * platform/PlatformScrollBar.h: Added.
        (WebCore::PlatformScrollBar::isWidget):
        * platform/ScrollBar.h:
        (WebCore::ScrollBarClient::~ScrollBarClient):
        (WebCore::ScrollBar::~ScrollBar):
        (WebCore::ScrollBar::orientation):
        (WebCore::ScrollBar::value):
        (WebCore::ScrollBar::client):
        * platform/mac/PlatformScrollBarMac.mm: Added.
        (-[WebCoreScrollBar initWithPlatformScrollBar:]):
        (-[WebCoreScrollBar detachPlatformScrollBar]):
        (-[WebCoreScrollBar scroll:]):
        (-[WebCoreScrollBar widget]):
        (-[WebCoreScrollBar mouseDown:]):
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::~PlatformScrollBar):
        (WebCore::PlatformScrollBar::setScrollBarValue):
        (WebCore::PlatformScrollBar::setKnobProportion):
        (WebCore::PlatformScrollBar::scrollbarHit):
        (WebCore::PlatformScrollBar::width):
        (WebCore::PlatformScrollBar::height):
        (WebCore::PlatformScrollBar::setRect):
        (WebCore::PlatformScrollBar::setEnabled):
        (WebCore::PlatformScrollBar::paint):
        * platform/mac/ScrollBarMac.mm: Removed.
        * platform/mac/WebCoreTextArea.mm:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInScrollbar):
        * rendering/RenderFormElement.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::horizontalScrollbarWidget):
        (WebCore::RenderLayer::verticalScrollbarWidget):
        (WebCore::RenderLayer::valueChanged):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::positionScrollbars):
        * rendering/RenderLayer.h:
        * rendering/RenderWidget.h:

2006-07-31  Adele Peterson  <adele@apple.com>

        Reviewed by John and Anders.

        - Fix for <rdar://problem/4380576> onChange does not get called when field changed by return key

        Test: fast/forms/onchange-enter-submit.html

        Blur (which will fire onChange appropriately) before submitting a form when pressing Enter.
        This matches the sequence of events fired in WinIE.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::defaultEventHandler):

2006-07-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Kevin.

        Moved string debug function outside of the WebCore namespace so that it's
        easier to call in the debugger. I will never doubt Darin again (x100).

        * platform/String.cpp:
        (string):

2006-07-31  David Hyatt  <hyatt@apple.com>

        Partial fix for 5453.  Improve overflow so that when it changes
        dynamically from scroll/auto to hidden that we properly hide the
        scrollbars.  Also refine the dirty dashboard region updating so that
        it only happens if the scrollbars genuinely come and go.

        Also eliminate the extra repaint of the entire block.  This should not be
        necessary, since the scrollbars repaint themselves already and children
        will repaint already if they move.

        Reviewed by darin

        Adding test case from bug into fast/overflow/dynamic-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2006-07-31  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by justin
        
        <http://bugs.webkit.org/show_bug.cgi?id=9507>
        Empty style spans created in applyInlineStyle
        
        Improves paste fidelity because some of these empty font/style spans had a non-zero
        size and were messing up the layout of pasted content:
        <rdar://problem/4515463>
        REGRESSION: Blot and Mail both do a very poor job of pasting the main www.apple.com page   

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle): Use the adjusted start node instead 
        of start.node().  Don't do any application if the endpoints are swapped.  Adjust
        endNode if the start node is a descendant of it, so that the pre-order traversal will
        terminate properly.

2006-07-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        * platform/String.cpp:
        (WebCore::string): Added a debugging function to create a String from a
        const char*.

2006-07-31  Anders Carlsson  <acarlsson@apple.com>

        * css/CSSPrimitiveValue.cpp:
        Fix windows build.

2006-07-31  Geoffrey Garen  <ggaren@apple.com>

        Reinstating my last change. Everything builds now.
        
2006-07-31  Geoffrey Garen  <ggaren@apple.com>

        Backing out my last change because it causes a build failure in some
        configurations. This seems to be the cleanest way to get svn to cooperate.

2006-07-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        Moved files around to make WebCore's structure clearer
        and easier to explain.

        DerivedSources/JS* -> bindings/js/DerivedSources/ (so JS* files
        show up when you search inside bindings/js/, but are marked, at
        the same time, as files that you should not edit manually)

        WebCore+SVG/DOMList.h -> ksvg2/svg/ (only files inside ksvg2/svg/
        use DOMList.h)

        icon -> loader/icon

        I tested that everything still builds.

2006-07-30  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - some improvements for the benefit of the style pane of the inspector

        * css/CSSComputedStyleDeclaration.cpp: Removed background-position
        and border-spacing from the list of properties that show up in
        computed style, because of background-position-x, background-position-y,
        -webkit-border-horizontal-spacing and -webkit-border-vertical-spacing.
        (WebCore::valueForLength): Added handling for undefinedLength, intrinsic,
        and min-intrinsic.
        (WebCore::primitiveValueFromLength): Removed code that would add a
        space to the string for no good reason.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Added a
        special case for a line clamp of -1, which should come back as "none"
        rather than an actual "-1".
        (WebCore::CSSComputedStyleDeclaration::length): Return 0 if the
        declaration has no corresponding node or no renderer.
        (WebCore::CSSComputedStyleDeclaration::item): Check against length()
        so that the two stay consistent rather than using a constant.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::isCSSTokenizerIdentifier): Added.
        (WebCore::isCSSTokenizerURL): Added.
        (WebCore::quoteString): Added.
        (WebCore::quoteStringIfNeeded): Changed to quote strings in many more
        cases -- any cases where they would not parse in the CSS parser otherwise.
        The main case this affects is font names with spaces in them.
        (WebCore::quoteURLIfNeeded): Added.
        (WebCore::CSSPrimitiveValue::cssText): Use quoteURLIfNeeded in the case
        where we're making the text form of a URI.

        * css/tokenizer.flex: Whitespace tweaks to line things up better.

2006-07-30  Eric Seidel  <eric@webkit.org>

        Reviewed by gramps!

        Remove some unused SVG code.

        * ksvg2/ecma/Ecma.cpp: Removed.
        * ksvg2/ecma/Ecma.h: Removed.
        * ksvg2/ecma/GlobalObject.cpp: remove a couple dead functions.
        * ksvg2/ecma/GlobalObject.h: add a comment about this dead code.
        * ksvg2/ecma/SVGLookup.h: Removed.

2006-07-29  Darin Adler  <darin@apple.com>

        - Removed tabs from these source files that still had them.
          We don't use them; that way source files look fine in editors
          that have tabs set to 8 spaces or to 4 spaces.
        - Removed allow-tabs Subversion property from the files too.

        * bindings/objc/WebScriptObject.h:
        * bindings/objc/WebScriptObject.mm:
        * platform/FontData.cpp:

2006-07-29  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10080
          Adopt pedantic changes from the Unity project to improve 
          cross-compiler compatibility

          Changes include:
          * Removing trailing semicolon from namespace braces.
          * Removing trailing comma from last enum declaration.
          * Updating to match style guidelines.
          * Adding missing newline to the end of the file.
          * Turning on gcc warning for missing newline at the end of a source file
            (GCC_WARN_ABOUT_MISSING_NEWLINE in Xcode, -Wnewline in gcc).
          * Alphabetical sorting of Xcode source list files.
          * Use abs() function from <math.h> instead of ABS() macro.
          * Use C-style comments instead of C++ comments in files that might
            be included by either C or C++ files.
          * Use -numeric_limits<double>::infinity() instead of -HUGE_VAL.

        * WebCore+SVG/DOMList.h:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCorePrefix.h:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_domnode.h:
        (KJS::DOMNode::):
        * bindings/objc/DOMCSS.h:
        (-[DOMCSSValue enum]):
        * bindings/objc/DOMCore.h:
        (-[DOMImplementation createDocument:::]):
        * bindings/objc/DOMEvents.h:
        (-[DOMOverflowEvent enum]):
        * bindings/objc/DOMRange.h:
        * bindings/objc/DOMTraversal.h:
        * bindings/objc/DOMXPath.h:
        (-[DOMXPathNSResolver lookupNamespaceURI:]):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreKeyboardAccess.h:
        * css/makeprop:
        * css/makevalues:
        * dom/ChildNodeList.h:
        * dom/DocPtr.h:
        * dom/Document.h:
        (WebCore::Document::):
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::):
        (WebCore::DocumentMarker::operator==):
        (WebCore::DocumentMarker::operator!=):
        * dom/EventTargetNode.h:
        * dom/KeyboardEvent.h:
        (WebCore::KeyboardEvent::):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::rootNodeChildrenChanged):
        * dom/QualifiedName.cpp:
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::):
        * editing/UnlinkCommand.h:
        (WebCore::UnlinkCommand::editingAction):
        * html/FormDataList.h:
        (WebCore::FormDataListItem::FormDataListItem):
        (WebCore::FormDataList::appendData):
        * html/HTMLBlockquoteElement.h:
        * html/HTMLDivElement.h:
        * html/HTMLFormElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHeadingElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::State::):
        * icon/IconDatabase.cpp:
        * icon/SQLStatement.cpp:
        * kcanvas/KCanvasFilters.h:
        (WebCore::):
        (WebCore::KCanvasPoint3F::KCanvasPoint3F):
        (WebCore::KCanvasFilter::KCanvasFilter):
        (WebCore::KCanvasFilter::~KCanvasFilter):
        (WebCore::KCanvasFilterEffect::~KCanvasFilterEffect):
        (WebCore::KCComponentTransferFunction::KCComponentTransferFunction):
        (WebCore::KCanvasFEConvolveMatrix::KCanvasFEConvolveMatrix):
        (WebCore::KCLightSource::KCLightSource):
        (WebCore::KCDistantLightSource::KCDistantLightSource):
        (WebCore::KCPointLightSource::KCPointLightSource):
        (WebCore::KCSpotLightSource::KCSpotLightSource):
        (WebCore::KCanvasFEDiffuseLighting::KCanvasFEDiffuseLighting):
        (WebCore::KCanvasFEDisplacementMap::KCanvasFEDisplacementMap):
        (WebCore::KCanvasFEImage::KCanvasFEImage):
        (WebCore::KCanvasFESpecularLighting::KCanvasFESpecularLighting):
        * kcanvas/RenderSVGImage.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::):
        (WebCore::SVGRenderStyle::NonInheritedFlags::):
        * ksvg2/css/SVGRenderStyleDefs.h:
        (WebCore::):
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/ksvg.h:
        (WebCore::):
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/scripts/make_names.pl:
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimatedAngle.h:
        * ksvg2/svg/SVGAnimatedBoolean.h:
        * ksvg2/svg/SVGAnimatedColor.h:
        * ksvg2/svg/SVGAnimatedEnumeration.h:
        * ksvg2/svg/SVGAnimatedInteger.h:
        * ksvg2/svg/SVGAnimatedLength.h:
        * ksvg2/svg/SVGAnimatedLengthList.h:
        * ksvg2/svg/SVGAnimatedNumber.h:
        * ksvg2/svg/SVGAnimatedNumberList.h:
        * ksvg2/svg/SVGAnimatedPathData.h:
        * ksvg2/svg/SVGAnimatedPoints.h:
        * ksvg2/svg/SVGAnimatedPreserveAspectRatio.h:
        * ksvg2/svg/SVGAnimatedRect.h:
        * ksvg2/svg/SVGAnimatedString.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGAnimatedTransformList.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (SVGAnimationElement::calculateCurrentValueItem):
        (SVGAnimationElement::calculateRelativeTimePercentage):
        * ksvg2/svg/SVGAnimationElement.h:
        (WebCore::):
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGDOMImplementation.h:
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGDescElement.h:
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::rendererIsNeeded):
        (WebCore::svg_dynamic_cast):
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEDistantLightElement.h:
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEFuncAElement.h:
        * ksvg2/svg/SVGFEFuncBElement.h:
        * ksvg2/svg/SVGFEFuncGElement.h:
        * ksvg2/svg/SVGFEFuncRElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.h:
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFEPointLightElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFESpotLightElement.h:
        * ksvg2/svg/SVGFETileElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGHelper.h:
        (WebCore::):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGLengthList.h:
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGList.h:
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMatrix.h:
        * ksvg2/svg/SVGNumber.h:
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPaint.h:
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPathSeg.h:
        * ksvg2/svg/SVGPathSegArc.h:
        * ksvg2/svg/SVGPathSegClosePath.h:
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * ksvg2/svg/SVGPathSegLineto.h:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPathSegMoveto.h:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPoint.h:
        * ksvg2/svg/SVGPointList.h:
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/SVGPolygonElement.h:
        * ksvg2/svg/SVGPolylineElement.h:
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGRect.h:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGScriptElement.h:
        * ksvg2/svg/SVGSetElement.h:
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStringList.h:
        * ksvg2/svg/SVGStylable.h:
        * ksvg2/svg/SVGStyleElement.h:
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::rendererIsNeeded):
        (WebCore::SVGStyledElement::canvasResource):
        * ksvg2/svg/SVGStyledLocatableElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGSwitchElement.h:
        * ksvg2/svg/SVGSymbolElement.h:
        * ksvg2/svg/SVGTRefElement.h:
        * ksvg2/svg/SVGTSpanElement.h:
        * ksvg2/svg/SVGTests.h:
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTextPositioningElement.h:
        * ksvg2/svg/SVGTitleElement.h:
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransformList.h:
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGURIReference.h:
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGViewElement.h:
        * ksvg2/svg/SVGZoomAndPan.h:
        * ksvg2/svg/svgpathparser.h:
        * page/Frame.h:
        (WebCore::):
        * platform/AffineTransform.h:
        * platform/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        * platform/FontData.cpp:
        (WebCore::FontData::FontData):
        * platform/FontData.h:
        * platform/TextBox.h:
        (WebCore::TextBox::):
        * platform/Timer.cpp:
        (WebCore::TimerBase::heapPop):
        * platform/mac/FontCacheMac.mm:
        * platform/mac/GlyphMapMac.cpp:
        * platform/mac/WebFontCache.mm:
        (betterChoice):
        * rendering/DeprecatedRenderSelect.cpp:
        (WebCore::DeprecatedRenderSelect::setWidgetWritingDirection):
        * rendering/EllipsisBox.h:
        * rendering/RenderBR.h:
        (WebCore::RenderBR::renderName):
        (WebCore::RenderBR::width):
        * rendering/RenderBlock.h:
        (WebCore::):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::RenderFlow):
        * rendering/RenderFrame.cpp:
        * rendering/bidi.h:
        * rendering/break_lines.cpp:

2006-07-29  Rob Buis  <buis@kde.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=10151
        ghostmap XHTML + SVG fails due to javascript undefined exception

        Make sure document.URL works when called from a non-HTML document.

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::getValueProperty):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLDocument::):
        * dom/Document.idl:

2006-07-29  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed and tweaked by Darin.

        - fixes for Linux build
          (still might not compile, since Darin tweaked but was unable to test).

        * WebCoreSources.bkl: Added some new sources, removed some obsolete ones.
        * Projects/gdk/webcore-gdk.bkl: Added RenderPopupMenuGdk.cpp

        * html/HTMLPlugInElement.h: Removed incorrect syntax with class name
        before ::.

        * platform/gdk/FrameGdk.h:
        * platform/gdk/FrameGdk.cpp: Updated parameters of constructor. Moved a couple stubs
        out of this file.
        * platform/gdk/RenderPopupMenuGdk.h: Added.
        * platform/gdk/RenderPopupMenuGdk.cpp: Added. Just a file full of empty stubs.
        * platform/gdk/RenderThemeGdk.h:
        * platform/gdk/RenderThemeGdk.cpp: (WebCore::RenderThemeGdk::createPopupMenu): Added.

        * platform/gdk/TemporaryLinkStubs.cpp: Add some new stubs.

2006-07-29  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10022
        Bug 10022: REGRESSION: Crash in WebCore::XMLTokenizer::characters

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::resumeParsing): If the write() call resulted in new callbacks being
        added, don't call through to end() just yet.

2006-07-29  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by John Sullivan.

        - manual test for http://bugs.webkit.org/show_bug.cgi?id=9984
          ASSERTION FAILURE: _private->mouseDownEvent != nil
          (WebKit/WebView/WebHTMLView.m:4863 -[WebHTMLView(WebInternal) _delegateDragSourceActionMask])

        * manual-tests/subview-click-assertion.html: Added.

2006-07-29  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8587 / <rdar://problem/4631844>
        REGRESSION: {display:list-item} items outside an ol or ul element don't number correctly

        * rendering/RenderListItem.cpp:
        (WebCore::enclosingList): If no real list element is found, use parent instead.
        (WebCore::previousListItem): Check list elements to see if they are list items -- the
        old code assumed that a list would never be a list item but this is entirely possible
        with CSS and especially with the new rule that means any DOM element could act as a list.

2006-07-29  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=10147
        REGRESSION: custom attribute values set via javascript are not persistent

        Test: fast/dom/Element/setAttribute-case-insensitivity.html

        * dom/Element.cpp:
        (WebCore::Element::setAttribute): Use the lowercased localName for retrieving the old value, too.

2006-07-28  Timothy Hatcher  <timothy@apple.com>

        Suggested by Darin.

        Moving the implementation of isContentEditable to the
        the WebPrivate category.

        * bindings/objc/DOM.mm:
        (-[DOMNode isContentEditable]):

2006-07-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        First part of:
        <rdar://problem/4515463>
        REGRESSION: Blot and Mail both do a very poor job of pasting the main www.apple.com page
        
        Migrate to isBlock and enclosingBlock.
        Changed RendereringInfo::isBlock and ReplacementFragment::isBlock
        to wasBlock so that they don't conflict with isBlock and because
        it's more descriptive.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::mergeStartNode):
        (WebCore::ReplacementFragment::wasBlock):
        (WebCore::ReplacementFragment::saveRenderingInfo):
        (WebCore::ReplacementFragment::renderedBlocks):
        (WebCore::RenderingInfo::RenderingInfo):
        (WebCore::ReplaceSelectionCommand::shouldMergeStart):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::RenderingInfo::wasBlock):

2006-07-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        More changes for:
        <rdar://problem/4242293>
        Poor paste fidelity of http://www.google.com/

        * editing/markup.cpp:
        (WebCore::needInterchangeNewlineAfter): Added.
        (WebCore::createMarkup): 
        Only add an interchangeNewline if we're annotating for interchange.  Can't test 
        this until we expose createMarkup in non-annotate mode (I'd expose Range::toHTML).
        Remove the FIXME about prepending the interchangeNewline before creating the rest 
        of the markup.  Its correct to surround the interchangeNewline in ancestors of the
        adjusted startNode.
        Fixed the check to see if an interchangeNewline is needed (!inSameBlock).  This would
        add an interchangeNewline for a selection that started before a table.
        Removed the workaround for the bug where markup for a table was not included when 
        selecting the contents of a table, since this change fixes the general problem of 
        markup for ancestors of the startNode being left out.
        Don't leave out ancestors of the startNode as we leave their subtrees.  Execute the
        code to include them even if we closed ancestors in the ancestorsToClose list.

2006-07-28  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John.

        Adding isContentEditable to DOMNode's private category. 

        * bindings/objc/DOMPrivate.h:

2006-07-28  Alexey Proskuryakov  <ap@nypop.com>

        Rolling out http://bugs.webkit.org/show_bug.cgi?id=6010 because of failing layout tests.
        Add better SVGLoad event support.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLImageLoader.h:
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::SVGImageLoader):
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimatedBoolean.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::adjustViewportClipping):
        (WebCore::SVGElement::closeRenderer):
        (WebCore::SVGElement::rendererIsNeeded):
        (WebCore::SVGElement::isClosed):
        (WebCore::svg_dynamic_cast):
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (SVGImageElement::SVGImageElement):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGScriptElement.cpp:
        (SVGScriptElement::SVGScriptElement):
        (SVGScriptElement::parseMappedAttribute):
        (SVGScriptElement::executeScript):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2006-07-28  Adele Peterson  <adele@apple.com>

        Rolling out http://bugs.webkit.org/show_bug.cgi?id=9753 because of failing layout tests.
        SVG with width and height 100% leaves room for scrollbar on the right.

        * kcanvas/RenderPath.cpp:
        * kcanvas/RenderPath.h:
        * kcanvas/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * ksvg2/svg/SVGCircleElement.cpp:
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGLineElement.cpp:
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGRectElement.cpp:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGStyledElement.h:

2006-07-27  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.
        
        Add better SVGLoad event support.
        http://bugs.webkit.org/show_bug.cgi?id=6010
        There will still need to be additional support added for <link> and <script> elements.
        Not all of the error -> loaded -> error transition cases work yet.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLImageLoader.h:
        (WebCore::HTMLImageLoader::haveFiredLoadEvent):
        (WebCore::HTMLImageLoader::setHaveFiredLoadEvent):
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::SVGImageLoader):
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimatedBoolean.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::parseMappedAttribute):
        (WebCore::SVGElement::haveLoadedRequiredResources):
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        (WebCore::SVGElement::closeRenderer):
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::rendererIsNeeded):
        (WebCore::svg_dynamic_cast):
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (SVGImageElement::SVGImageElement):
        (SVGImageElement::haveLoadedRequiredResources):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::parseMappedAttribute):
        (WebCore::SVGScriptElement::executeScript):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): use new Event() instead of createEvent

2006-07-27  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=10135
          Cleanup: remove useless parameters from RenderObject::position()

        No test possible (no functionality change)

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::position):
        * rendering/RenderBox.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::position):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::position):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::position):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::position):
        * rendering/RenderText.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeVerticalPositionsForLine):

2006-07-27  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9753
        SVG with width and height 100% leaves room for scrollbar on the right.

        Relayout children of svg containers, except svg shapes that do not depend on percentages.

        * kcanvas/RenderPath.cpp: (WebCore::RenderPath::hasPercentageValues):
        * kcanvas/RenderPath.h:
        * kcanvas/RenderSVGContainer.cpp: (WebCore::RenderSVGContainer::layout):
        * ksvg2/svg/SVGCircleElement.cpp: (SVGCircleElement::hasPercentageValues):
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp: (WebCore::SVGEllipseElement::hasPercentageValues):
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGLineElement.cpp: (SVGLineElement::hasPercentageValues):
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGRectElement.cpp: (WebCore::SVGRectElement::hasPercentageValues):
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGStyledElement.h: (WebCore::SVGStyledElement::hasPercentageValues):

2006-07-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4242293>
        Poor paste fidelity of http://www.google.com/

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):  Fixed crasher with nil-check.
        * editing/markup.cpp:
        (WebCore::startMarkup): Style information wasn't added to an element if it had
        attributes but no style attribute.

2006-07-27  Alexander Kellett  <lypanov@kde.org>

        Reviewed by Darin.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=9867
          REGRESSION: code that modifies form element in Firefox modifies form attribute in WebKit

        * bindings/scripts/CodeGeneratorJS.pm: add new attribute - HasOverridingNameGetter
        * html/HTMLFormElement.idl:

2006-07-27  Rob Buis  <buis@kde.org>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=8992
        Some HTML DOM attributes have incorrect types

        Adjust idl and dom source code for HTMLImageElement and
        HTMLBaseFontElement to choose correct type for
        HTMLImageElement::border and HTMLBaseFontElement::size
        attributes.

        * html/HTMLBaseFontElement.cpp:
        (WebCore::HTMLBaseFontElement::size):
        (WebCore::HTMLBaseFontElement::setSize):
        * html/HTMLBaseFontElement.h:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::border):
        (WebCore::HTMLImageElement::setBorder):
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:

2006-07-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4628409>
        Safari crashes in CompositeEditCommand::removeBlockPlaceholder entering text in a web page form

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeBlockPlaceholder): 
        A script on the page shrinks the textarea down to zero rows just
        before insertion.  That gives the shadow div a zero height, removing
        [div, 0] as a candidate for a VisiblePosition.  Then 
        InsertTextCommand::input() tries to create a VisiblePosition from 
        [div, 0] and fails.  A nil check is a quick fix.  Another might
        be to make positions where there is a caret selection candidates.
        Another might be to make any [div, 0] where div is a shadow div inside
        a form element a candidate.

2006-07-27  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Darin.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=10094
          Japanese characters improperly rendering in TOT
          
        Test: fast/encoding/denormalised-voiced-japanese-chars.html

        * platform/Font.cpp:
        (WebCore::WidthIterator::advance): pass currentCharacter to normalizeVoicingMarks
        (WebCore::WidthIterator::normalizeVoicingMarks): turn the currentCharacter variable
        into an argument as WidthIterator::advance doesn't update m_currentCharacter while
        looping

2006-07-27  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Complex entities seem to fail on TOT
        http://bugs.webkit.org/show_bug.cgi?id=6390
        Use an alternative work-around to an XML Entity parsing bug.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::write):
        (WebCore::hackAroundLibXMLEntityBug): added.
        (WebCore::startElementNsHandler):
        (WebCore::endElementNsHandler):
        (WebCore::charactersHandler):
        (WebCore::processingInstructionHandler):
        (WebCore::cdataBlockHandler):
        (WebCore::commentHandler):
        (WebCore::getEntityHandler):

2006-07-27  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9938
        Fix viewBox issues in Hixie's test

        Do a more accurate and quicker job of parsing the viewBox
        attribute. Handle properly on negative width/height and
        invalid syntax in general.

        * ksvg2/svg/SVGFitToViewBox.cpp:
        (SVGFitToViewBox::parseViewBox):

2006-07-27  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Enables getSVGDocument() support for HTMLObjectElement and HTMLEmbedElement
        http://bugs.webkit.org/show_bug.cgi?id=9237
        This patch does not try to autogenerate anything, but enables the SVG functionality.
        Also fix HTMLObjectElement vspace and hspace to be numbers instead of strings to match IE & Firefox.

        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::objectGetter):
        (KJS::HTMLElementFunction::callAsFunction):
        (KJS::JSHTMLElement::objectSetter):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * dom/Document.h:
        (WebCore::Document::isSVGDocument):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::contentDocument):
        (WebCore::HTMLEmbedElement::getSVGDocument):
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::getInstance):
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::contentDocument):
        (WebCore::HTMLObjectElement::rendererIsNeeded):
        (WebCore::HTMLObjectElement::createRenderer):
        (WebCore::HTMLObjectElement::setCode):
        (WebCore::HTMLObjectElement::setArchive):
        (WebCore::HTMLObjectElement::setBorder):
        (WebCore::HTMLObjectElement::setCodeBase):
        (WebCore::HTMLObjectElement::setCodeType):
        (WebCore::HTMLObjectElement::setData):
        (WebCore::HTMLObjectElement::hspace):
        (WebCore::HTMLObjectElement::setHspace):
        (WebCore::HTMLObjectElement::setStandby):
        (WebCore::HTMLObjectElement::setType):
        (WebCore::HTMLObjectElement::setUseMap):
        (WebCore::HTMLObjectElement::vspace):
        (WebCore::HTMLObjectElement::setVspace):
        (WebCore::HTMLObjectElement::getSVGDocument):
        * html/HTMLObjectElement.h:
        * ksvg2/svg/SVGDocument.h:
        (WebCore::SVGDocument::isSVGDocument):
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::frameView):

2006-07-26  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=9901
        XSLTProcessor cannot parse text nodes for INPUT ELEMENTS in an XSLT stylesheet

        Test: fast/js/xhtml-serialize.html

        * editing/markup.cpp:
        (WebCore::endMarkup): If the element has child nodes, write a closing tag even if it 
        is not permitted in HTML, to make it valid XML.

2006-07-26  Alice Liu  <alice.liu@apple.com>

        Reviewed by John Sullivan (and Kevin and Timo).

        landing this patch for John et al.  
        Fixed <rdar://problem/4651380> REGRESSION (9A232->9A234): existing web clips don't render if you restart Dashboard

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        moved the call to didFirstLayout to above the check for needsLayout
        because we need to call didFirstLayout for every webview, not just
        ones we think need layout.  

2006-07-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4652788>
        REGRESSION: Can't change size or style of any text in message body

        * dom/Node.cpp:
        (WebCore::Node::isContentRichlyEditable): Mimic Node::isContentEditable.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isContentRichlyEditable): First check
        the frame for editability, then userModify, like what
        HTMLElement::isContentEditable() does.
        * html/HTMLElement.h:

2006-07-26  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by ap.

        - fix debug-only information() string for table cells

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::information):

2006-07-25  David Harrison  <harrison@apple.com>

        Reviewed by timo and Darin.

        <rdar://problem/4618584> "Paste and Match Style" is not working in Mail (add SPI)
        
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge replaceSelectionWithNode:selectReplacement:smartReplace:matchStyle:]):
        Add matchStyle parameter for use by WebKit.

2006-07-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele
        
        <rdar://problem/4649560>
        REGRESSION: Can't Select All when the body is contentEditable="true"

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition): Allow descent from a non-editable html
        element into an editable body as a convenience.

2006-07-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4468458> Incoming HTML message is editable <body contenteditable="true">

        * dom/Document.cpp:
        (WebCore::Document::inDesignMode): Removed some spaces.
        * page/Frame.cpp:
        (WebCore::Frame::applyEditingStyleToElement): Just add CSS properties needed for editing.
        (WebCore::Frame::removeEditingStyleFromElement): Made this a no-op, we'll remove
        it eventually.

2006-07-25  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9717
          Replace IDL ConvertUndefinedToTrue parameter attribute with Optional attribute

        No test added because there is no change in functionality.

        * bindings/js/kjs_binding.cpp: Removed valueToBooleanTreatUndefinedAsTrue() method.
        * bindings/js/kjs_binding.h: Ditto.
        * bindings/scripts/CodeGeneratorJS.pm: Removed support for ConvertUndefinedToTrue parameter attribute.
        * dom/Element.h: Set default value to true for scrollIntoView() and scrollIntoViewIfNeeded() arguments.
        * dom/Element.idl: Replaced ConvertUndefinedToTrue attribute with Optional attribute.
          Fixed name of scrollIntoViewIfNeeded() argument to match implementation.
        * page/DOMWindow.idl: Replaced ConvertUndefinedToTrue attribute with Optional attribute.

2006-07-24  Dan Waylonis  <waylonis@google.com>

        Reviewed and tweaked a bunch by Darin.

        Test: plugins/bindings-test.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=9902
          jsNull and NSNull not properly converted between JS and ObjC

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):
        Added case that converts jsNull to NSNull.

2006-07-24  Darin Adler  <darin@apple.com>

        Reviewed by Adele and Justin.

        - fix <rdar://problem/4613616> REGRESSION: some spaces typed in <textarea> are posted as non-breaking spaces (9630)
          http://bugs.webkit.org/show_bug.cgi?id=9630
        - also fixes http://bugs.webkit.org/show_bug.cgi?id=9939
          REGRESSION: Pasting text into native text area with newline at end does not preserve newline
        - removed some uses of DeprecatedPtrList in the markup code

        Test: fast/forms/textarea-type-spaces.html
        Test: fast/forms/textarea-paste-newline.html

        * bindings/objc/DOMHTML.mm: (-[DOMHTMLDocument createDocumentFragmentWithText:]):
        Updated call to pass a range -- in this case it is the range of the entire document,
        so this will not handle the whitespace properly.

        * bridge/mac/WebCoreFrameBridge.h: Added range context parameter to the
        documentFragmentWithText: method, so we can handle whitespace properly.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge nodesFromList:]): Changed from DeprecatedPtrList to Vector.
        (-[WebCoreFrameBridge markupStringFromNode:nodes:]): Ditto.
        (-[WebCoreFrameBridge markupStringFromRange:nodes:]): Ditto.
        (-[WebCoreFrameBridge documentFragmentWithText:inContext:]): Added range context
        parameter -- pass it on to createFragmentFromText.
        (-[WebCoreFrameBridge documentFragmentWithNodesAsParagraphs:]): Changed from
        DeprecatedPtrList to Vector.
        (-[WebCoreFrameBridge replaceSelectionWithText:selectReplacement:smartReplace:]):
        Pass the range of the current selection as context when creating the fragment.

        * dom/Position.cpp: (WebCore::Position::inRenderedText): Replace range check with
        a call to the new containsCaretOffset function -- helps make the caret work right when
        it is past the end of the last line in a textarea.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt): Don't do anything if the
        style does not call for collapsing whitespace.
        (WebCore::CompositeEditCommand::rebalanceWhitespace): Call replaceWhitespaceAt
        to share code, including the new logic mentioned above.

        * editing/InsertLineBreakCommand.cpp: (WebCore::InsertLineBreakCommand::doApply):
        Use a text node instead of a break element when inserting and the style is preserveNewline.

        * editing/JSEditor.cpp: (WebCore::execRemoveFormat): Pass the selection range
        to createFragmentFromText.

        * editing/RebalanceWhitespaceCommand.cpp: (WebCore::RebalanceWhitespaceCommand::doApply):
        Assert that we're in a style that collapses whitespace. It's the caller's responsibility
        not to call otherwise.

        * editing/ReplaceSelectionCommand.h: Removed unused destructor, type, isSingleTextNode,
        isTreeFragment, m_type, and added a context parameter to inertFragmentForTestRendering.
        Also changed the constructor to take a selection rather than a pointer to the root
        editable element, replaced removeEndBRIfNeeded with shouldRemoveEndBR and removed an
        unused parameter from shouldMergeEnd.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Removed code to set up m_type.
        Compute root editable element from passed-in selection. Used the start of the selection
        as a base node for style purposes for the test rendering. Removed the special case
        "single text node" alternative to createFragmentFromText in the plain text case, since
        createFragmentFromText now handles that correctly.
        (WebCore::ReplacementFragment::insertFragmentForTestRendering): Copy the whitespace
        property from the source location when creating a temporary element for test rendering.
        (WebCore::ReplacementFragment::shouldMergeEnd): Removed unneeded boolean
        parameter fragmentHadInterchangeNewlineAtEnd, which is always false.
        (WebCore::ReplaceSelectionCommand::doApply): Update for ReplacementFragment changes,
        change code to not remove end BR when it can be re-used instead, don't call the
        paragraph separator insertion when the position is at the start of a paragraph already,
        removed redundant computation of identical "next" value, removed unneeded boolean
        parameter to shouldMergeEnd, add case for merging when all we need to do is to delete
        a newline character, removed unneeded code to set insertionPos after all code that uses
        it, and  use spaces instead of non-breaking spaces when doing smart paste if the
        context is one where we do not collapse white space.
        (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR): Renamed and changed to return
        a boolean instead of doing the removal.

        * editing/markup.h: Use Vector instead of DeprecatedPtrList. Change the
        createFragmentFromText function to take a range for context instead of a document.
        * editing/markup.cpp:
        (WebCore::markup): Use Vector instead of DeprecatedPtrList.
        (WebCore::createMarkup): Ditto.
        (WebCore::createParagraphContentsFromString): Remove unneeded document parameter
        and changed a couple places to use isEmpty instead of comparing with "".
        (WebCore::createFragmentFromText): Given the new context parameter, if the context
        is one that preserves newlines, then use "\n" instead of <br> elements.
        (WebCore::createFragmentFromNodes): Use Vector instead of DeprecatedPtrList.

        * html/HTMLElement.cpp: (WebCore::HTMLElement::setInnerText): Do not use <br>
        elements if the context of this node is one where we preserve newlines.

        * rendering/InlineTextBox.h:
        * rendering/InlineTextBox.cpp: (WebCore::InlineTextBox::containsCaretOffset):
        Added. Implements the appropriate rule for determining if a caret position is
        in this line or not. Returns true for both one line and the next in cases where
        affinity must be considered to determine which line the caret is on.

        * rendering/RenderText.h: Make atLineWrap no longer be a member function.
        * rendering/RenderText.cpp:
        (WebCore::atLineWrap): Remove special rule about preserveNewline and isLineBreak,
        which will no longer apply due to the new containsCaretOffset function logic.
        (WebCore::RenderText::caretRect): Use containsCaretOffset.
        (WebCore::RenderText::inlineBox): Ditto.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::updateFromElement): Make a placeholder <br> element
        after calling setInnerText so that the last newline in the string has the effect
        we expect outside the HTML world (an additional line).
        (WebCore::RenderTextControl::setSelectionRange): Set granularity of the selection
        too. The layout tests caught this problem, which needs a better solution long term.
        (WebCore::RenderTextControl::text): Call textContent with the parameter false
        so it will not include newlines for <br> elements. Now the only <br> element
        that will ever be in the shadow DOM tree is the one to prevent collapsing, and
        that one should not show up in the text value.

        * rendering/bidi.cpp: (WebCore::RenderBlock::findNextLineBreak): Took a rule
        that specifically called out the pre whitespace mode and made it work for all
        the modes that preserve newlines. This makes sure we get a last line box for
        text after the last "\n" even in cases where there is no <br> afterward.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        Added assertions to make sure we don't do anything when we're not collapsing
        whitespace.

        * html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::setDefaultValue):
        Changed to use Vector instead of DeprecatedPtrList.

        * editing/HTMLInterchange.cpp: Removed obsolete comment.

        * loader/Cache.h: Removed a stray include.

2006-07-24  Adele Peterson  <adele@apple.com>

        Reviewed by Justin.

        - Fix for <rdar://problem/4632132> Changing style of content with mixed editability fails

        Test: * editing/style/apple-style-editable-mix.html

        * dom/Node.cpp: (WebCore::Node::isContentRichlyEditable): Doesn't need to check the editable root.  It now just
          checks the user modify property of its own renderer, since that is inherited.
        * editing/ApplyStyleCommand.cpp: (WebCore::ApplyStyleCommand::applyInlineStyle): If the end position is in a table,
        Adjust the end node to the last descendant of the table, so we don't skip over any runs.

2006-07-24  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - implement String::createCFString

        * WebCore.xcodeproj/project.pbxproj: Added StringImplMac.mm and StringMac.mm.

        * bindings/objc/DOMInternal.mm: Moved NSString conversion functions out of here.

        * platform/mac/StringImplMac.mm: Added. Moved NSString conversion members here
        and added the CFStringRef ones.
        * platform/mac/StringMac.mm: Added. Ditto.

2006-07-24  David Hyatt  <hyatt@apple.com>

        Two bug fixes.

        (1) Make sure to mark positioned objects that depend on line position to
        mark themselves as needing layout when their line box placeholder gets
        repositioned.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::position):
       
        (2) Improve highlighting to factor the inflation into overflow so that
        invalidation and repainting will work properly.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):
        * rendering/RootInlineBox.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2006-07-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adele.

        <rdar://problem/4641824> REGRESSION: Wikipedia widget fails to complete a search after pressing return key
        
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        Don't eat enter events for search fields that have no enclosing form; they need to be passed to AppKit so
        that onsearch can be invoked.
        
        * manual-tests/onsearch-enter.html: Added.

2006-07-24  Dave MacLachlan  <dmaclach@mac.com>

        Reviewed by Darin and Alexey.
        
        Fix for: <http://bugs.webkit.org/show_bug.cgi?id=8425> 
        and <http://bugs.webkit.org/show_bug.cgi?id=6947>

        Test: svg/custom/non-opaque-filters.svg

        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::prepareFilter):
        We create an autorelease pool so we can control the deallocation of the
        CIContext that we're creating. The CIContext retains the CGContext that 
        you pass it internally so when the CIContext is released, the 
        CGContext is released as well.
        This is all fine and dandy unless you wrap the creation of the CIFilter
        with a pair of CGBegin/EndTransparencyLayer calls which swap the context
        out from underneath you. So if you start with context A, 
        CGBeginTransparencyLayer swaps it out and gives you B. You create a CIFilter
        with it and add a reference to B. CGEndTransparencyLayer swaps out B and
        gives you back A. Autorelease pool comes and cleans up the Filter, and calls
        release on A, but A never got the refcount in the first place. B did. BOOM!
        So we create a pool, then do a retain, then release the pool so that we 
        don't have to worry about the pool releasing it at a later time.
        See <rdar://problem/4647735> for reduction of CGEndTransparencyLayer case

2006-07-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9669
          Incomplete repaint when changing an inline's border

        Test: fast/repaint/line-overflow.html

        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Added repaintTop and repaintBottom
        variables to track the vertical edges of the area that changed, accounting for
        lines that were deleted, inserted or moved. Removed unnecessary updating of
        m_overflowHeight.
        (WebCore::RenderBlock::determineStartPosition): Removed unnecessary updating of
        m_overflowHeight.
        (WebCore::RenderBlock::determineEndPosition):
        (WebCore::RenderBlock::matchedEndLine): Added repaintTop and repaintBottom
        arguments, which this method updates to account for deleted lines.
        (WebCore::RenderBlock::checkLinesForOverflow): Removed outdated FIXME.

2006-07-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10075
          REGRESSION: Reversed pop-up text in visually-ordered Hebrew pages

        Test: fast/forms/select-visual-hebrew.html

        * css/html4.css: Set "-webkit-rtl-ordering: logical" on select elements.

2006-07-24  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=10009
        REGRESSION: Schubert-IT PDF Plug-in not working for full page (works in frames)

        * page/Frame.cpp:
        (WebCore::Frame::begin): Give PDF plugins a chance to handle frame content, before ImageDocument
        claims it.

2006-07-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10083
          REGRESSION (r15584): editing/selection/select-from-textfield-outwards failing

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForCoordinates): Added back change from the fix
        for bug 9312: For coordinates outside a replaced object, return the position
        just before (after) the element if the coordinates are above or to the left (below
        or to the right).

2006-07-23  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by maciej.

        Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
        http://bugs.webkit.org/show_bug.cgi?id=9686

        WebCore portion of the fix.

        * bridge/mac/WebCoreScriptDebugger.h:
        (-[WebScriptDebugger exceptionRaised:sourceId:line::]): Add delegate method.
        * bridge/mac/WebCoreScriptDebugger.mm:
        (WebCoreScriptDebuggerImp::exception): Call delegate method when an exception is raised.

2006-07-23  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele.
        Actually Adele figured out how to fix the layout test failures.  Landing this patch for her.  Layout test failures exposed but not caused by  r15584 (my patch earlier today).

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        When setting selection endpoints, don't traverse down into nodes where editing would ignore its contents. Use the parent node instead.  
        (WebCore::nextLinePosition):
        same as above

2006-07-23  David Harrison  <harrison@apple.com>

        Reviewed by timo.

        <rdar://problem/4646759> Mail crash editing To Do - WebCore::InsertTextCommand::prepareForTextInsertion
        
        * Test: editing/deleting/delete-mixed-editable-content-001.html

        * editing/visible_units.cpp:
        (WebCore::startOfParagraph):
        Respect editable boundary the same way endOfParagraph does.

2006-07-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej. (Patch by me, Maciej, and Harrison.)

        Fix for <rdar://problem/4529398> WebCore crashes when pasting rich 
        text - WebCore::InlineBox::root()

        The initial rendering crash was due to a render object having a 
        stale reference to an inline box that had already been deleted and 
        then recreated in the exact same location in memory. (Crazy, I 
        know.) The situation seemed pretty specific to list markers 
        according to Hyatt according to Maciej, so that is what I patched 
        specifically. Fixing this crash unearthed a separate editing crash 
        where we were trying to insert a block into itself. I worked on 
        that with Maciej and Harrison, and Harrison came up with a fix.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): This is the fix for the editing crash. If paragraphStart is an atomic 
        node, insert the new block into the parent instead.
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::isChildOfParent): This function is for 
        posterity. It will help keep the linebox tree in check.
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine): Added assert.
        (WebCore::InlineFlowBox::deleteLine): Added assert.
        * rendering/ListMarkerBox.cpp:
        (WebCore::ListMarkerBox::destroy): If this has a parent, call 
        removeChild on this.
        (WebCore::ListMarkerBox::operator delete):
        * rendering/ListMarkerBox.h:

2006-07-23  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        fixed <rdar://problem/4617841> REGRESSION (NativeTextField): You can move keyboard focus to a field without getting insertion point

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForCoordinates):
        removed some unnecessary vertical position checks and added a fudge factor to be more forgiving for clicks near lines.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::nodeAtPoint):
        added implementation
        * rendering/RenderTextControl.h:
        added function protocol

2006-07-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Updating fix from last checkin.

        * rendering/RenderFlexibleBox.cpp: (WebCore::RenderFlexibleBox::layoutVerticalBox):
        Only tell the view about this flexbox if there isn't another flexbox already cached.

2006-07-23  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - Fix for <rdar://problem/4644614> REGRESSION: Typing, pasting or dragging in new text areas causes unnecessary scrolling

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::layoutBlock): Don't updateScrollInfoAfterLayout if an ancestor flexible box is just on
        its first layout.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): ditto.
        (WebCore::RenderFlexibleBox::layoutVerticalBox): Let the view know if this flex box is doing its first pass at layout.

        * rendering/RenderView.cpp: (WebCore::RenderView::RenderView): Caches a flexible box that's doing its first layout.
        * rendering/RenderView.h:
        (WebCore::RenderView::setFlexBoxInFirstLayout):
        (WebCore::RenderView::flexBoxInFirstLayout):

2006-07-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=10038
        REGRESSION: Length of navigator.mimeTypes collection returns number of installed plugins, not number 
        of registered mime types

        * bindings/js/kjs_navigator.cpp:
        (KJS::MimeTypes::getValueProperty): Return the length of the mime types vector, not the plugins one.
        (KJS::MimeTypes::getOwnPropertySlot): Fixed another typo, which prevented MimeTypes::getValueProperty()
        from even being called.

2006-07-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele and Tim Omernick.

        <rdar://problem/4641004> 9A224: Safari crashes in WebCore::RenderMenuList::showPopup when changing a input select field to input text field

        Couldn't figure out how to make layout test, here's a manual test:
        * manual-tests/remove-select-onchange.html: Added.
        
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup): Don't add the RenderPopupMenu to the render
        tree so it doesn't get destroyed if we do.
        
        The remaining changes are to let the RenderPopupMenu know its menu list w/o having
        to be in the render tree:
        
        * rendering/RenderPopupMenu.cpp:
        (WebCore::RenderPopupMenu::RenderPopupMenu):
        * rendering/RenderPopupMenu.h:
        (WebCore::RenderPopupMenu::menuList):
        * rendering/RenderPopupMenuMac.h:
        * rendering/RenderPopupMenuMac.mm:
        (WebCore::RenderPopupMenuMac::RenderPopupMenuMac):
        * rendering/RenderPopupMenuWin.h:
        (WebCore::RenderPopupMenuWin::RenderPopupMenuWin):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::createPopupMenu):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::createPopupMenu):
        * rendering/RenderThemeWin.h:

2006-07-21  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for: <rdar://problem/4643238> REGRESSION: Can't set insertion point at the end of a line of text

        Test: fast/forms/textarea-scrolled-endline-caret.html

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::positionForCoordinates):
        When looking for the closest line box, take the scroll offset into account.

2006-07-21  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff & Maciej.

        <rdar://problem/4632505> REGRESSION: Crash at WebCore::Widget::getView() const + 6

        Geoff is working on a layout test for this.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::focusWindow):
        (WebCore::FrameMac::unfocusWindow):
        Check for a NULL view.  The view can be NULL if the frame has not yet loaded any data.  This fixes the crash, but the behavior is still
        wrong -- we should focus the frame once it gets a view.  I've filed <rdar://problem/4645685> to track that.  It's not as urgent as this
        crasher.
        
2006-07-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        <rdar://problem/4523976> REGRESSION (NativeTextField): Crash occurs when choosing "Undo Typing" after typing and setting the value

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::updateFromElement): Clear the undo
        chain when the text control contents have been set
        programmatically.
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::clearUndoRedoOperations): Before clearing undo
        stack, close all open undo groups and then open an equal number,
        since otherwise NSUndoManager ends up in an inconsistent state
        leading to uncaught ObjC exceptions.

2006-07-21  Beth Dakin  <bdakin@apple.com>
        
        Reviewed by Darin.

        Just moving this assertion down a couple of lines. It was hitting 
        every time you try to print a page because we put it too early in 
        the function.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge drawRect:]):

2006-07-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4548238>
        REGRESSION: Can't remove the first OL/UL list item in a Mail's compose window

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): 
        Moved from InsertParagraphSeparator.  Does its own typing style restoration.
        * editing/CompositeEditCommand.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Call breakOutOfEmptyListItem.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Call breakOutOfEmptyListItem if
        the endingSelection is at the start of an editable region.
        * editing/htmlediting.cpp:
        (WebCore::embeddedSublist): Moved from InsertParagraphSeparator.
        (WebCore::appendedSublist): Ditto.
        (WebCore::enclosingEmptyListItem): Ditto.
        * editing/htmlediting.h:

=== Safari-521.20 ===

2006-07-21  Tim Omernick  <timo@apple.com>

        Reviewed by Beth Dakin & John Sullivan.

        <rdar://problem/4633717> 9A218: Reproducible crash in -[NSScroller mouseDown:]

        Beth is in the middle of making a layout test for this; she will land it soon.

        * platform/mac/ScrollBarMac.mm:
        (ScrollBar::~ScrollBar):
        Call Widget::removeFromSuperview() rather than -removeFromSuperview directly on the scroll bar view.
        Widget::removeFromSuperview() obeys the "mustStayInWindow" flag, which is set while tracking the mouse
        in view-based widgets to prevent their destruction while the tracking is in progress.
        I searched around WebCore and this is the only Widget subclass that directly removes its view rather
        than using removeFromSuperview().

2006-07-21  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9312
          REGRESSION: Selection bug in new text fields when selecting past the first letter

        Test: editing/selection/select-from-textfield-outwards.html

        * editing/Selection.cpp:
        (WebCore::Selection::adjustForEditableContent): Added code to handle the case
        where the selection starts (resp. ends) in the last (resp. first) visual position
        inside an editable root.
        * editing/htmlediting.cpp:
        (WebCore::comparePositions): Fixed the case of comparing a position inside a shadow
        tree with a position in the shadow ancestor.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForCoordinates): For coordinates outside a replaced
        object, return the position just before (after) the element if the coordinates are above or
        to the left (below or to the right).
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::caretMaxOffset): Changed to return 1 for replaced objects.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForCoordinates): Changed to return the last position
        in the lowest text box if the y coordinate is below all text boxes.

2006-07-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.
        
        - Fixed <rdar://problem/4507265> REGRESSION: overlays don't work on 
        HousingMaps.com (Google Maps-based site)
        
        - Made style.filter undetectable, like document.all.
        
        Unfortunately, the SVG spec-makers invented a CSS attribute named 'filter',
        which conflicts with IE's custom CSS attribute by the same name. Web programs 
        like the Google maps API test for style.filter, and assume it's the IE 
        style.filter if they find it, so we need to make style.filter undetectable 
        to avoid breaking them.
        
        An alternative solution would be to hotwire a delorean, go back in time,
        and beg the web standards makers to make standards that work on the web.

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::cssPropertyGetter):

2006-07-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4641033>
        REGRESSION: Pasting from web pages into Mail (or Blot) often loses most of the content
        
        * editing/markup.cpp:
        (WebCore::createMarkup): We surround the currently accumulated markup with markup 
        for ancestors of the startNode when the pre-order traversal leaves the trees rooted 
        at those ancestors.  We assumed that any ancestors of the current node not in the 
        ancestorsToClose list were those kind of ancestors.  But we don't add renderer-less 
        containers to the ancestorsToClose list.  So, we were incorrectly surrounding the 
        currently accumulated markup with markup for render-less containers.  Most of the
        content at apple.com was being put inside an <optgroup> inside a <select> element.  
        Then on Paste createContextualFragment would drop it.

2006-07-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * dom/Document.h:
        (WebCore::Document::):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::addEventListener):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        Only dispatch overflowchanged events if overflowchanged event listeners have been registered on the document.

2006-07-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4637807> REGRESSION: "Features & Options" page at volvocars.us fails

        * xml/XSLTProcessor.cpp:
        (WebCore::xsltParamArrayFromParameterMap):
        Turns out parameters never worked. String parameters need to be escaped so we create a transform context,
        add the parameters to it quoted and then use xsltApplyStylesheetUser which lets us pass the transform context to it.
        This also works around a bug in libxslt where a hash table isn't allocated.

2006-07-20  Alice Liu  <alice.liu@apple.com>

        Reviewed by Tim Omernick.

        Fixed <rdar://problem/4621649> repro crash: Upload link causes crash on pages.google.com in Frame::nodeForWidget
        added manual test because there is no way to change the value of an <input type=file> via the DOM.  It's not supported because it's a security risk. 

        * manual-tests/remove-input-file-onchange.html: Added.
        * platform/mac/FileButtonMac.mm:
        (-[WebFileChooserButton chooseFilename:]):
        swapped the calls to changeFilename and bridgeForWidget because changeFilename will destroy the widget that is accessed in bridgeForWidget 

2006-07-20  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele.

        Fixed <rdar://problem/4532113> REGRESSION (NativeTextField): Crash occurs after modifying field then reloading page -[FormDelegate frameLayoutHasChanged:]
        added a manual test because of the need to use AutoFill.

        * dom/Node.h:
        (WebCore::Node::aboutToUnload):
        added virtual function prototype
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::aboutToUnload):
        added implementation that sends textFieldDidEndEditing notification
        * html/HTMLInputElement.h:
        added virtual function prototype
        * manual-tests/input-type-file-autocomplete-frame-1.html: Added.
        * manual-tests/input-type-file-autocomplete-frame-2.html: Added.
        * manual-tests/input-type-file-autocomplete-refresh.html: Added.
        * page/Frame.cpp:
        (WebCore::Frame::stopLoading):
        before unloading, call aboutToUnload on the current focused node

2006-07-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        fixed <rdar://problem/4611303> REGRESSION: repro crash in WebCore::EventTargetNode::dispatchWindowEvent at aeropostale.com
        There was an attempt to deref an EventListener that got cleaned up in GC.  Changing Document's EventListener list from 
        vanilla ptrs to refptrs to prevent GC, following EventTargetNode's proven example.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::clear):
        (WebCore::Document::handleWindowEvent):
        (WebCore::Document::getHTMLWindowEventListener):
        (WebCore::Document::removeHTMLWindowEventListener):
        (WebCore::Document::removeWindowEventListener):
        (WebCore::Document::hasWindowEventListener):
        Changed all of the list iterators to work with RefPtrs instead of vanilla ptrs

        * dom/Document.h:
        Changed the EventListener list to be a vanilla pointer list to a refptr list

2006-07-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej

        - WebCore part of fix for:
        <rdar://problem/4557386> REGRESSION (419.3-521.19): repro Safari world leak involving 
        closing tabs after clicking in a web page
        
        * bridge/mac/WebCoreFrameBridge.h:
        (-[WebCoreFrameBridge textViewWasFirstResponderAtMouseDownTime:])
        renamed to be more specific (formerly wasFirstResponderAtMouseDownTime:)
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::passMouseDownEventToWidget):
        updated for name change

2006-07-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=8272
        Use of window.open & window.close can cause crash

        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        The default constructor now creates a "zero" event, and a new one was added to create the "current" one.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::handleMouseMoveEvent):
        * rendering/RenderFormElement.cpp:
        (WebCore::RenderFormElement::clicked): 
        Updated for the above changes.

        * platform/gdk/MouseEventGdk.cpp:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/MouseEventWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        (PlatformMouseEvent::PlatformMouseEvent):
        Trying not to break other platforms.

        * manual-tests/invalid-mouse-event.html: Added.

2006-07-20  Maciej Stachowiak  <mjs@apple.com>
        
        Reviewed by Anders.

        - delete line that I only commented in the last patch - meant to do this before landing

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::close): 

2006-07-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - fixed <rdar://problem/4634484> REGRESSION: Project Change Request form should have vertical scroll bar, but doesn't
        
        I couldn't figure out how to make an automated test case for this,
        or even a manual one. It seems to be timing-related in some way.

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::close): detach the child frame from
        its element, not the frame containing this element.

2006-07-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::nextKeyViewInFrame):
        Hold a ref to the node in case it gets destroyed by an event handler.

2006-07-19  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10021
        Bug 10021: REGRESSION: Stack overflow due to infinite recursion in 
        Image::checkForSolidColor

        * platform/Image.cpp:
        (WebCore::Image::cacheFrame): Don't call checkForSolidColor unless 
        the frame was decoded successfully.

2006-07-19  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - Fix for: 
        <rdar://problem/4422657> REGRESSION: member name field or password field should have focus after loading webmail.mac.com (7405)
        http://bugs.webkit.org/show_bug.cgi?id=7405

        <rdar://problem/4614181> REGRESSION: Crash in WebCore::RenderTextField::text() when quoting post at the Ars Technica forum (9707)
        http://bugs.webkit.org/show_bug.cgi?id=9707

        Needs an http test. (http://bugs.webkit.org/show_bug.cgi?id=10020)

        These bugs were both cases where focus() was called on an element which didn't have a renderer yet because stylesheets hadn't finished loading yet.
        Now, we detect this case and let setFocusNode be called.  And when the stylesheet finishes loading, and the element attaches, a timer will fire, 
        which will cause the correct selection & scrolling behavior to occur. 

        This fix removes selection and scrolling behavior from the focus method.  This code is now in a new method, updateFocusAppearance.
        updateFocusAppearance can now be called directly from focus(), but it can also be called when a timer fires.  This timer gets set
        up when an element attaches, and its already been focused by the focus method.  We have to use a timer, because updateFocusAppearance can cause
        a layout to happen, and we don't want that to happen in the middle of attach().

        * bindings/objc/DOM.mm: (-[DOMElement isFocused]): Added SPI for autofill.
        * bindings/objc/DOMPrivate.h:

        * dom/Element.cpp:
        (WebCore::Element::Element): Initializes timer and needFocusAppearanceUpdate bool.
        (WebCore::Element::attach): Checks needsFocusAppearanceUpdate, and if the node is focused, then starts the timer.
        (WebCore::Element::focus): Updated to check supportsFocus before calling setFocusNode, 
        and only requiring the element to be focusable now before updating focus appearance.
        (WebCore::Element::updateFocusAppearance): Added. Separates the selection, and the scrolling from focusing the node.
        (WebCore::Element::updateFocusAppearanceTimerFired): Stops the timer, and if the element is focusable, calls updateFocusAppearance.
        (WebCore::Element::stopUpdateFocusAppearanceTimer):  Cancels timer, and setsNeedsFocusAppearanceUpdate(false).
        (WebCore::Element::detach): Calls stopUpdateFocusAppearanceTimer.
        (WebCore::Element::blur): ditto.
        * dom/Element.h:
        (WebCore::Element::needsFocusAppearanceUpdate): Added so the timer only fires when focus() methods have caused an element to be focused.
        (WebCore::Element::setNeedsFocusAppearanceUpdate): Added so focus methods can set this flag.

        * dom/Node.h: (WebCore::Node::supportsFocus): Added.  Base class just calls isFocusable.
        * html/HTMLAnchorElement.h: Added supportsFocus.
        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::supportsFocus): Added. Checks for the case where stylesheets haven't loaded yet,
        so we can still focus the node without a renderer, and when it gets a renderer, we'll update the focus appearance.
        * html/HTMLGenericFormElement.h: (WebCore::HTMLGenericFormElement::supportsFocus): ditto.
        * html/HTMLGenericFormElement.cpp: Removed include of Document.h since this is now in the header.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::focus): Updated to check supportsFocus before calling setFocusNode, 
        and only requiring the element to be focusable now before updating focus appearance.
        (WebCore::HTMLInputElement::updateFocusAppearance): Added. Separates the selection, and the scrolling from focusing the node.
        * html/HTMLInputElement.h:

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::focus): Updated to check supportsFocus before calling setFocusNode, 
        and only requiring the element to be focusable now before updating focus appearance.
        (WebCore::HTMLTextAreaElement::updateFocusAppearance): Added. Separates the selection, and the scrolling from focusing the node.
        * html/HTMLTextAreaElement.h:

2006-07-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4631972>
        REGRESSION: Mail crashes when pasting entire contents of http://www.apple.com/support/ into a new mail message

        * dom/Position.cpp:
        (WebCore::Position::upstream): Deployed isBlock and enclosingBlock.
        (WebCore::Position::downstream): Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): Added !iframe.
        (WebCore::isBlock): Added, returns !node->renderer()->isInline()
        (WebCore::enclosingBlock): Added.
        * editing/htmlediting.h:

2006-07-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adele.

        <rdar://problem/4631272> REGRESSION: Crash tabbing out of hostname field at autorestore.apple.com
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::nextKeyViewInFrame):
        Take into account that focus handlers can cause a node's renderer to be destroyed.
        
2006-07-19  David Hyatt  <hyatt@apple.com>

        Fix for 4638376.  The 1x1 solid color image optimization was broken when
        I re-architected image.  This patch restores the optimization for CG.  Cairo
        will still need the optimization.

        Reviewed by darin

        WARNING: NO TEST CASES ADDED OR CHANGED (need test cases still)

        * platform/Image.cpp:
        (WebCore::Image::Image):
        (WebCore::Image::invalidateData):
        (WebCore::Image::cacheFrame):
        * platform/Image.h:
        (WebCore::Image::setIsPDF):
        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::checkForSolidColor):
        * platform/mac/ImageMac.mm:
        (WebCore::Image::initNativeData):
        (WebCore::Image::invalidateNativeData):
        (WebCore::Image::checkForSolidColor):
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):

2006-07-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4613519>
        REGRESSION: Pasting text in native text area inserts text one character before it should (9527)

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Turn into an InsertLineBreakCommand instead of bailing
        if the enclosingBlockFlowElement doesn't have a parent.

2006-07-19  David Harrison  <harrison@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/4629307> -[DOMRange markupString] does not include the initial table element if it is at the beginning of the range
        <rdar://problem/4062218> pasting in contents of web.apple.com strips off the <table> element from the first table
        
        Better patch than previous checkin.

        * test: editing/pasteboard/paste-table-003.html
        
        * editing/markup.cpp:
        (WebCore::createMarkup):
        Make sure to include the table when including a tbody.

=== Safari-521.19 ===

2006-07-19  David Harrison  <harrison@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/4629307> -[DOMRange markupString] does not include the initial table element if it is at the beginning of the range

        No test case as this can only be reproduced through ObjC APIs.

        * editing/markup.cpp:
        (WebCore::createMarkup):
        Adjust the range for ancestor markup handling when main loop skips first node.

2006-07-18  David Hyatt  <hyatt@apple.com>

        Fix for radar 4611287, make resizable text fields opt-in rather than
        opt-out.  Open source users will need to write the pref into their defaults
        to see the resizers on textareas now.

        Reviewed by mjs and adele

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreSettings.mm:
        (-[WebCoreSettings setTextAreasAreResizable:]):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/html4.css:

2006-07-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9959
        REGRESSION: iframes stop rendering after 200th one on successive reloads
        
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::attach):
        (WebCore::HTMLFrameElement::close):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::insertedIntoDocument):
        (WebCore::HTMLIFrameElement::willRemove):
        Remove calls to incrementFrameCount and decrementFrameCount.
        
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        Call incrementFrameCount here.
        
        (WebCore::Frame::~Frame):
        Call disconnectOwnerElement.
        
        (WebCore::Frame::disconnectOwnerElement):
        Call decrementFrameCount here.
        
2006-07-18  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=9013
        Let correct CSS custom cursor declarations parse

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue): Ignore any values following a custom CSS cursor URI, instead of
        requiring that it is the only one in the list (which is actually illegal, according to the spec). 
        This is only a temporary hack, with a real implementation to follow in bug 6001/6002.

        * manual-tests/custom-cursors.html: Added a test for this issue.
        * manual-tests/resources/helpCursor.tiff: A cursor image used in the test.

2006-07-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders.
        
        <rdar://problem/4636216> NetNewsWire fails to launch on 9A224 - missing symbols
        
        WebCore needs to add -sub_library libobjc to maintain
        backwards compatibility with binaries linked with WebKit
        before JavaScriptCore moved out of WebKit.

        * WebCore.xcodeproj/project.pbxproj:

2006-07-18  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9978
          REGRESSION (r12949-r12988): Clicking the first letter on a line places the caret at the end of the previous line

        Test: editing/selection/click-start-of-line.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForCoordinates): Changed to return downstream
        affinity if the x coordinate is to the left of the middle of the first character
        in the text box.

2006-07-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9695
        <rdar://problem/4614085> 
        TOT REGRESSION: NativeTextArea: Text area does not respond to Cmd-UpArrow/Cmd-DownArrow (9695)
        
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        (WebCore::SelectionController::modifyMovingRightForward):
        (WebCore::SelectionController::modifyExtendingLeftBackward):
        (WebCore::SelectionController::modifyMovingLeftBackward):
        If the caret is inside an editable region, the beginning/end of the document should actually be the
        beginning/end of the editable region.

2006-07-17  Tim Omernick  <timo@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4612079> need a way to prevent pages from scrolling to reveal elements that are focused
        by script

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setProhibitsScrolling:]):
        * page/Frame.cpp:
        (WebCore::Frame::prohibitsScrolling):
        (WebCore::Frame::setProhibitsScrolling):
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPointRecursively):
        (WebCore::FrameView::setContentsPos):
        * page/FrameView.h:
        * platform/ScrollView.h:

2006-07-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Harrison.
        
        - fixed <rdar://problem/4618089> Blot crashes when I paste in all the contents of http://www.apple.com/startpage/

        * editing/htmlediting.cpp:
        (WebCore::editingIgnoresContent):

2006-07-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4621728>
        REGRESSION: Selecting by dragging down creates selection in wrong direction, with certain steps
        <rdar://problem/4604932>
        REGRESSION: Dragging too far left on a line will select all lines above it.
 
        No layout test because of 9980.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForCoordinates): Don't return positions inside editable roots
        for coordinates outside those roots, except for coordinates outside a document that is entirely 
        editable.

2006-07-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4635281> JSCanvasRenderingContext2D::drawImage needs to initialize the exception code to zero

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage): initialize ec to zero
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): initialize ec before earlier return

2006-07-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4634874> WebScriptObject and WebUndefined are no longer defined by WebKit

        Moves WebScriptObject and WebUndefined to WebCore.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMCore.h:
        * bindings/objc/DOMInternal.mm:
        * bindings/objc/DOMUtility.mm:
        * bindings/objc/WebScriptObject.mm: Added.
        (+[WebUndefined allocWithZone:]):
        (-[WebUndefined initWithCoder:]):
        (-[WebUndefined encodeWithCoder:]):
        (-[WebUndefined copyWithZone:]):
        * bindings/objc/WebScriptObjectPrivate.h: Added.
        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreScriptDebugger.mm:

2006-07-17  David Hyatt  <hyatt@apple.com>

        Back out the fix for 5564, since it turns out font:x-small; is a pretty
        prominent IE-specific CSS hack.  Because Web sites rely on IE's incorrect
        font parsing as a means of also correcting IE's incorrect font size rules.

        This fixes Yahoo.com.

        Reviewed by darin

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseFont):

2006-07-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4618389> REGRESSION: After applying a link to the last word of a sentence, a new selection is created at the start of the sentence
        
        * dom/Document.cpp:
        (WebCore::Document::updateSelection):

2006-07-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Beth.
        
        <rdar://problem/4604946> REGRESSION: 'checkboxRef.checked = true' fires onchange event in Leopard

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::preDispatchEventHandler):
        * html/HTMLInputElement.h:

2006-07-16  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=9954
          REGRESSION: document.dir should return empty string in <head>

        Test: fast/dom/document-dir-property.html

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::getValueProperty): Return an empty string instead of an
        undefined value for an unset document.dir property.

2006-07-16  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        * dom/NodeFilter.idl:
        Removed "No newline at end of file" that snuck in as part of the "apply patch" process.
        * manual-tests/input-empty-on-focus.html:
        Removed "Property changes" that snuck in as part of the "apply patch" process.

2006-07-16  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9943
          <rdar://problem/4590613>
          REGRESSION (Tiger-TOT): menus are offset to the right at http://movies.aol.com/movie-photo-bts/superman-returns

        The problem turns out to be the fact that body.offsetLeft is returning a non-zero value.
        I have no idea why the menus worked in Tiger Safari, because body.offsetLeft behavior has not changed.
        Presumably some other bug that we fixed had been compensating.

        Test: fast/html/body-offset-properties.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetLeft): Always return 0 for any object without an offsetParent.
        (WebCore::RenderObject::offsetTop): Ditto.
        (WebCore::RenderObject::offsetParent): Return 0 for the body (treat as a special case).

2006-07-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4616595> REGRESSION: Problems with world 
        clock widget clock hand motion on 9A211 + 4604574

        The second hand on the widget was jiggling because the rotation was 
        messing up the use of the affine transformation matrix while 
        rounding to pixel boundaries in device space. We are mainly 
        concerned with rounding to pixel boundaries with the scale in mind, 
        so this patch extracts the scale to device space from the matrix, 
        and rounds to pixel boundaries using only the scale. This doesn't 
        seem like it is a perfect solution, but it definitely solves the 
        immediate problem. We will probably need to re-address what should 
        happen to avoid pixel cracks with rotations at non-integral scale 
        factors. 

        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2006-07-15  Darin Adler  <darin@apple.com>

        - fix mistake from fix for 8952 that was breaking layout tests

        * editing/SelectionController.cpp: (WebCore::SelectionController::nodeWillBeRemoved):
        Justin was right! I changed the behavior of the function by accident. Changed it
        back so that it doesn't blow away the selection on the DOM side in the case where
        it didn't before.

        I will write 100 times on the blackboard: "When Justin says something about editing,
        assume he is right."

2006-07-15  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * WebCore.vcproj/WebCore/WebCore.vcproj: Added StreamingTextDecoderICU.cpp/h.

2006-07-15  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8952
          <rdar://problem/4575185>
          REGRESSION: crash on drag of highlighted Google custom home page modules

        Test: fast/dynamic/move-node-with-selection.html

        * editing/SelectionController.cpp: (WebCore::SelectionController::nodeWillBeRemoved):
        Call updateRendering before calling clearSelection(), since it's important to do any
        work beforehand, and there are calls inside clearSelection that will indirectly do an
        updateRendering. Also change code to make fewer assumptions about object lifetime.

2006-07-15  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8587
          <rdar://problem/4631844>
          REGRESSION: {display:list-item} on items outside an ol or ul element no longer causes incremental numbering

        Test: fast/lists/numeric-markers-outside-list.html

        * rendering/RenderListItem.cpp: (WebCore::previousListItem):
        Look for list items, even when we're outside any list.

2006-07-15  Adele Peterson  <adele@apple.com>

        Reviewed by John.

        - Fix for <rdar://problem/4593970> REGRESSION (NativeTextField): autofill menu disappears after typing a 2nd character

        This was caused by composite editing commands, (like typing or pasting) that include a DeleteCommand, being
        interpreted by the form delegate as an actual delete.  This fix doesn't notify the form delegate if the deletion is
        part of an editing command to replace the selected text.

        * editing/DeleteSelectionCommand.h: Added m_replace to keep track of whether this deletion is 
          part of a composite command to replace the text being deleted.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand): Initialize m_replace.
        (WebCore::DeleteSelectionCommand::doApply): Only notify the form delegate of the deletion if the text is not being replaced.
        * editing/CompositeEditCommand.h:
        * editing/CompositeEditCommand.cpp: (WebCore::CompositeEditCommand::deleteSelection): 
          Added replace argument to construct DeleteSelectionCommand.
          
        * editing/InsertTextCommand.cpp: (WebCore::InsertTextCommand::input): Call deleteSelection with replace argument.
        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplaceSelectionCommand::doApply): ditto.

2006-07-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej, tweaked to match Darin's patch.
        
        - Fixed <rdar://problem/4631837> REGRESSION: Reproducible crash on 
        FCKeditor demo (9911)
        
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::putValueProperty): Check for a null body element before
        forwarding the put request to it. I confirmed that no other parts of the 
        file use 'body' or 'bodyElement' without checking for null. 
        
        Also, use 'body' rather than 'bodyElement' because dir can bet set on 
        any element, not just HTMLBodyElement.

2006-07-15  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8871
          <rdar://problem/4575417>
          REGRESSION: Pressing Enter/Return in a text input removes the selected text

        - fix http://bugs.webkit.org/show_bug.cgi?id=9743
          <rdar://problem/4614228>
          REGRESSION: crash dispatching JavaScript-created keyboard event to input element

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::doTextFieldCommandFromEvent):
        Add a null check to fix the crash, and a FIXME explaining why this is not necessarily
        enough for the future.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler):
        Consume Enter key keypress events even if the element is not in a form.

        * platform/mac/KeyEventMac.mm: (WebCore::keyIdentifierForKeyEvent): Added \n to the
        characters that turn into "Enter". Actual keyboard events always are \r or \003 on
        the Macintosh, but in layout tests we can use \n, and everything other than the
        code path here works, so worth fixing.

2006-07-15  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9883
          <rdar://problem/4631821>
          REGRESSION: NativePopups don't work correctly in some forum software

        Test: fast/forms/select-selected.html

        * rendering/RenderMenuList.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateFromElement): Added code to map the selected option
        index to a list index before using it to index into the list.
        (WebCore::RenderMenuList::showPopup): Added code to map the selection option index
        to a list index before passing it to the menu renderer.
        (WebCore::RenderMenuList::valueChanged): Added code to map the list index back to a
        option index before calling setSelectedIndex (that function takes an option index).

2006-07-15  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9928
          REGRESSION: Text Encoding menu inoperative (after gcc protocol build fix)

        * bindings/objc/DOM.mm:
        (-[DOMNode addEventListener:::]): Moved into DOMEventTarget category.
        (-[DOMNode removeEventListener:::]): Ditto.
        (-[DOMNode dispatchEvent:]): Ditto.

        * WebCore.xcodeproj/project.pbxproj: Allow Xcode to do its thing.

2006-07-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        <rdar://problem/4632144> REGRESSION: table column tests failing as a result of very recent fix

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): columns and colgroups are valid children of a table too, not
        just table sections!

2006-07-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9866
        <rdar://problem/4631561>
        REGRESSION: Repro crash from mangleme using iframe, only from server.
        
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::attach):
        Add null check for contentFrame() since content frames won't be created for invalid URLs.        

2006-07-14  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=4195
        REGRESSION: KOI8-U encoding no longer supported.

        Tests:
        * http/tests/misc/BOM-override.pl
        * http/tests/misc/BOM-override-script.html
        * fast/encoding/charset-koi8-u.html
        * fast/encoding/charset-x-nextstep.html

        Restored a TEC code path for encodings that are not supported by ICU (but which currently
        passes all layout tests even by itself with ICU disabled). A lot of refactoring is 
        still needed - most importantly, round-tripping encoding names via CFStringEncoding 
        makes little sense now.

        * WebCore.exp:
        * bridge/mac/WebCoreTextDecoder.h: Removed.
        * bridge/mac/WebCoreTextDecoder.mm: Removed.
        WebCoreTextDecoder was not used anywhere since WebTextView was moved into WebCore.

        * loader/Decoder.cpp:
        (Decoder::Decoder):
        (Decoder::setEncodingName):
        (Decoder::decode):
        Use StreamingTextDecoder::create().

        * platform/StreamingTextDecoder.cpp:
        (WebCore::StreamingTextDecoder::create):
        (WebCore::StreamingTextDecoder::~StreamingTextDecoder):
        * platform/StreamingTextDecoder.h:
        StreamingTextDecoder is just an abstract interface to implementations now.

        * platform/StreamingTextDecoderICU.cpp: Added.
        (WebCore::StreamingTextDecoderICU::StreamingTextDecoderICU):
        (WebCore::StreamingTextDecoderICU::~StreamingTextDecoderICU):
        (WebCore::StreamingTextDecoderICU::releaseICUConverter):
        (WebCore::StreamingTextDecoderICU::textEncodingSupported):
        (WebCore::StreamingTextDecoderICU::convertUTF16):
        (WebCore::StreamingTextDecoderICU::convertIfASCII):
        (WebCore::StreamingTextDecoderICU::createICUConverter):
        (WebCore::StreamingTextDecoderICU::appendOmittingBOM):
        (WebCore::StreamingTextDecoderICU::convertUsingICU):
        (WebCore::StreamingTextDecoderICU::convert):
        (WebCore::StreamingTextDecoderICU::toUnicode):
        (WebCore::StreamingTextDecoderICU::fromUnicode):
        * platform/StreamingTextDecoderICU.h: Added.
        Renamed from StreamingTextDecoder; added a way to tell whether the encoding is actually
        supported by the decoder; minor cleanup.

        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::effectiveEncoding): Moved from StreamingTextDecoder.
        (WebCore::TextEncoding::toUnicode): Use StreamingTextDecoder::create().
        (WebCore::TextEncoding::fromUnicode): Moved to StreamingTextDecoderICU.
        
        * platform/TextEncoding.h: Changed __APPLE__ to PLATFORM(MAC); added effectiveEncoding().

        * platform/mac/StreamingTextDecoderMac.cpp: Added.
        (WebCore::StreamingTextDecoderMac::StreamingTextDecoderMac):
        (WebCore::StreamingTextDecoderMac::~StreamingTextDecoderMac):
        (WebCore::StreamingTextDecoderMac::releaseTECConverter):
        (WebCore::StreamingTextDecoderMac::textEncodingSupported):
        (WebCore::StreamingTextDecoderMac::convertUTF16):
        (WebCore::StreamingTextDecoderMac::convertIfASCII):
        (WebCore::StreamingTextDecoderMac::createTECConverter):
        (WebCore::StreamingTextDecoderMac::appendOmittingBOM):
        (WebCore::StreamingTextDecoderMac::convertOneChunkUsingTEC):
        (WebCore::StreamingTextDecoderMac::convertUsingTEC):
        (WebCore::StreamingTextDecoderMac::convert):
        (WebCore::StreamingTextDecoderMac::toUnicode):
        (WebCore::StreamingTextDecoderMac::fromUnicode):
        * platform/mac/StreamingTextDecoderMac.h: Added.
        (WebCore::StreamingTextDecoderMac::convert):
        This is a TEC+CFString code path for decoding, basically restored from a year-old revision.

        * platform/mac/TextEncodingMac.cpp: Removed. Code moved to StreamingTextDecoderMac.

        * WebCore.xcodeproj/project.pbxproj:

=== Safari-521.17 ===

2006-07-14  Timothy Hatcher  <timothy@apple.com>

        <rdar://problem/4623957> SWB: gcc-5412 (new?) objc warning causes WebCore project failure

        Made a DOMNode category in DOMEvents.h that lets DOMNode conform to the
        DOMEventTarget protocol that works with GCC 5412.

        Removed forward declarations of WebCoreWidgetHolder and imported WebCoreWidgetHolder.h.

        Removed all <Cocoa/Cocoa.h> and <Foundation/Foundation.h> imports in other headers,
        we import <Cocoa/Cocoa.h> in the prefix header for ObjC.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMCore.h:
        * bindings/objc/DOMEvents.h:
        * bridge/mac/FormDataMac.h:
        * bridge/mac/WebCoreAXObject.h:
        * bridge/mac/WebCoreCache.h:
        * bridge/mac/WebCoreEncodings.h:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameNamespaces.h:
        * bridge/mac/WebCoreJavaScript.h:
        * bridge/mac/WebCorePageBridge.h:
        * bridge/mac/WebCorePageState.h:
        * bridge/mac/WebCoreResourceLoader.h:
        * bridge/mac/WebCoreScriptDebugger.h:
        * bridge/mac/WebCoreSettings.h:
        * bridge/mac/WebCoreStringTruncator.h:
        * bridge/mac/WebCoreStringTruncator.mm:
        * bridge/mac/WebCoreTextDecoder.h:
        * bridge/mac/WebDashboardRegion.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        * platform/mac/CookieJar.mm:
        * platform/mac/DeprecatedStringMac.mm:
        * platform/mac/FontDataMac.mm:
        * platform/mac/FoundationExtras.h:
        * platform/mac/TextBoundaries.mm:
        * platform/mac/WebCoreHistory.h:
        * platform/mac/WebCoreHistory.m:
        * platform/mac/WebCoreKeyGenerator.h:
        * platform/mac/WebCoreTextArea.h:
        * platform/mac/WebCoreTextField.h:
        * platform/mac/WebCoreTextRenderer.h:
        * platform/mac/WebCoreView.h:
        * platform/mac/WebCoreWidgetHolder.h:

2006-07-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Updated ScriptInterpreter to work with Interpreter ref-counting in 
        JavaScriptCore.

        (KJS::ScriptInterpreter::~ScriptInterpreter): Now protected to catch
        manual delete.

2006-07-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adele and Justin.

        http://bugs.webkit.org/show_bug.cgi?id=9658
        <rdar://problem/4613948>
        REGRESSION: Check Spelling does not work in textarea elements
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::advanceToNextMisspelling):
        Don't use setStartBefore or setEndAfter on the search range because for shadow trees, there
        is no notion of before and after. Instead, use setStart and setEnd and pass in the start and end
        indices respectively.
        
        * dom/Range.cpp:
        (WebCore::Range::checkNodeBA):
        Allow range operations on shadow trees.

        * manual-tests/form-element-spelling.html: Added.

2006-07-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4621660> REGRESSION: Safari crashing in 
        WebCore::FrameView::updateOverflowStatus

        m_viewportRenderer is never initialized for framesets, and it 
        shouldn't be. So we just need to nil-check for it in 
        updateOverflowStatus() and return early.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateOverflowStatus): Nil check.

2006-07-14  Adele Peterson  <adele@apple.com>

        RS by Darin.

        Backing out fix for <rdar://problem/4604703> 
        REGRESSION (NativeTextField): Focus is not removed from password field after I ctrl-click into a different field

        Darin had a better fix in WebKit for this.

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::sendContextMenuEvent):

2006-07-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        - Fix for <rdar://problem/4614054> REGRESSION: Safari submits forms when the Return key is hit to complete inline inputs

        * page/Frame.h: (WebCore::Frame::inputManagerHasMarkedText): Added.
        * bridge/mac/FrameMac.h: ditto.
        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::inputManagerHasMarkedText): Added. Asks the input manager if there's marked text.
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler): For text fields, don't submit the form on Enter
        if the input manager says there's marked text.  I added this code for all text field paths.  For widgets, WebCoreTextField.mm
        has code to deal with this case.  But as we convert search, password, and isindex, they will need to do this check too.

2006-07-14  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9907
          REGRESSION (r15418): editing/pasteboard/paste-table-001 fails in pixel  mode

        * rendering/RenderText.cpp:
        (WebCore::RenderText::caretRect): Fixed the calculation of the max/min allowed caret
        position.

2006-07-14  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9905
          REGRESSION (r15404-r15415): Repro crash when pressing delete in an empty editable div

        Test: editing/deleting/delete-at-start-or-end.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Added null check.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.

2006-07-14  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Geoffrey.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9903
          Simplify logic in JSHTMLOptionsCollection::setLength() by using no-arg getNumber()

        No test cases since there is no change in functionality.

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::setLength):  Simplified logic by using the
        no-argument getNumber() method.

2006-07-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adele.

        - Build fix: don't need BLOCK_OBJC_EXCEPTIONS because we already have
        one surrounding this function, and the nested one makes the compiler
        think our local variable is volatile (seems like a compiler bug to me).
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::sendContextMenuEvent):

2006-07-14  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        Make JavaScriptCore a public framework. Adjusted the paths.

        * WebCore.xcodeproj/project.pbxproj:

2006-07-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

        - fixed <rdar://problem/4567031> REGRESSION: Crash at WebCore::RenderBlock::createLineBoxes (seems to be a security hole?)
        
        I also fixed all the similar crash / assertion failure cases I could think of.

        * dom/Node.cpp:
        (WebCore::Node::nextRendererWithSameParent): Helper function for some of the above.
        * dom/Node.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): Don't allow inserting forms when not in
        an HTML document, since we don't need that quirk and because parsing won't
        do certain render tree fixups. Also watch out for case when inserting before
        the renderer of a misnested child.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild): ditto
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): ditto

2006-07-13  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - Fix for <rdar://problem/4604703> 
        REGRESSION (NativeTextField): Focus is not removed from password field after I ctrl-click into a different field

        Test:
        * manual-tests/password-ctrl-click-lose-focus.html: Added.

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::sendContextMenuEvent):
        If we're about to set a selection in the current view, make sure its the first responder.
        In this case, this will cause the password field to resign first responder at the right time.

2006-07-13  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9670
          REGRESSION: RTL white-space:pre-wrap text is offset to the right

        Test: fast/text/international/rtl-white-space-pre-wrap.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::caretRect): Fixed LTR case and added the RTL case
        of clipping the caret position to the text box when the caret is after
        the trailing space of an autowrapped line.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Changed to truncate-
        to-fit the logically last text box if it contains the trailing spaces of an
        autowrapped line. 
        (WebCore::RenderBlock::bidiReorderLine): Remember the logically last text run.
        In the case of autowrapped text with white space that overflows beyond the line,
        the last text run is the one containing the overflowing white space.
        (WebCore::RenderBlock::findNextLineBreak): Split overflowing white space on a
        line that autowraps only after white space into a separate text run.

2006-07-13  David Harrison  <harrison@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/4624203> -webkit-highlight should be behind images

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        Call custom highlighter before painting the image, marker, or widget.

2006-07-13  David Harrison  <harrison@apple.com>

        Reviewed by Justin and Levi.

        <rdar://problem/4620743> REGRESSION: Option-Delete doesn't delete words during typing

        * Tests:
        editing/deleting/delete-by-word-001.html
        editing/deleting/delete-by-word-002.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::doApply):
        * editing/TypingCommand.h:
        Delete and forward delete to use specified granularity.
        Undo of delete and forward delete to select what had been deleted (non-char granularity only).
        
        * page/Frame.cpp:
        (WebCore::Frame::setSelection):
        Close typing and end style even if selection is not changing.
        * page/Frame.h:
        Remove unused setSelection parameter keepTypingStyle.

2006-07-12  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin

        <rdar://problem/4622763> Deleting from beginning of paragraph following a table deletes rather than selects the table

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd): Added selection expansion for HRs.
        (WebCore::DeleteSelectionCommand::initializePositionData): Now uses enclosingBlockFlowOrTableElement
        instead of enclosingBlockFlowElement.
        (WebCore::DeleteSelectionCommand::removeNode): Use to identify that we need a placeholder
        when the start or end block is removed.
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): Added check for canHaveChildrenForEditing
        to keep things like HRs from being given children.
        (WebCore::DeleteSelectionCommand::doApply): Switched to use member variable for needPlaceholder.
        * editing/DeleteSelectionCommand.h: Made needPlaceholder a member variable.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Fixed selection bug for tables and open typing commands.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::editingIgnoresContent): Added check for HRs, since it's not considered a widget.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Fix for HRs and tables.
        (WebCore::endOfParagraph): Ditto.

2006-07-13  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9880
          Memory leaks running DOM-Hanoi

        No change in behavior, thus no test included.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::setStatusBarText): Use a local autorelease pool to release the temporaries - 
        the test runs non-stop, and the enclosing pool doesn't get a chance to be drained.

2006-07-12  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9862
          REGRESSION: GMail: Crash in RenderView::repaintViewRectangle when spoofing as FF
        - see also <rdar://problem/4622407>

        Test: fast/frames/repaint-display-none-crash.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle): Added null checking of the owner element's
        renderer, which can be null if the iframe is set to display:none.

2006-07-12  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4509393>
        selected DOM range starts with <object>, 0 offset but selection should include the <object>

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMergeStart): 
        Don't pull content out of a table cell.
        * editing/htmlediting.cpp:
        (WebCore::editingIgnoresContent): Added <select> nodes.
        (WebCore::rangeCompliantEquivalent): Convert [node, 0] positions to positionBeforeNode(node)
        for more types of nodes.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::positionForCoordinates): 
        Fix a crasher when right clicking on an anonymous table.

2006-07-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady Eidson
        
        - fixed <rdar://problem/4611164> REGRESSION: Crash occurs when undoing a series of 
        misspelled words (WebCore::RenderObject::repaint(bool)

        * dom/Document.cpp:
        (WebCore::Document::removeMarkers):
        put (it - markers.begin()) in a local variable before altering markers, in every case where this was
        happening. One of the cases like this was fixed a while back, but other cases were
        either missed at that time or crept in since. 

2006-07-13  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Justin.

        http://bugs.webkit.org/show_bug.cgi?id=9663
        REGRESSION (r14948-r14956): Selection in text field remains highlighted when the text field loses focus
        
        * dom/Document.cpp:
        (WebCore::Document::updateSelection):
        Don't return early if the selection is empty.

2006-07-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adele.

        <rdar://problem/4614656> REGRESSION: onpaste() handlers don't run for textarea elements
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::dispatchCPPEvent):
        If the element is a shadow node, dispatch the event to its real parent.

        * manual-tests/textarea-onpaste.html: Added.

2006-07-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders.

        Fix for layout test regressions after my check-in last night. Just 
        a silly mistake where I should have asked if we were NOT printing 
        instead of if we were in the listbox code.

        * WebCore.xcodeproj/project.pbxproj: Project file wars. Back to 
        XCode 2.3
        * platform/mac/ListBoxMac.mm:
        (itemTextRenderer): Inverted check.
        (groupLabelTextRenderer): Inverted check.

2006-07-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9806
          <rdar://problem/4622622>
          REGRESSION: Large rowspan causes WebKit to call abort()

        Test: fast/table/large-rowspan-crash.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows):
        Use sizeof(RowStruct) instead of sizeof(int).
        Clearly we'll need something better to solve this completely.
        I expect another smaller, but still huge, value will still cause a problem.

2006-07-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4586665> REGRESSION: autorestore.apple.com: Crashes Safari in WebCore::Widget::client() const

        * bridge/mac/FrameMac.h:
        Add focusCallResultedInViewBeingCreated argument. 
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::nextKeyViewInFrame):
        If the call to focus() caused the node to get a native widget, set focusCallResultedInViewBeingCreated to true.
        
        (WebCore::FrameMac::nextKeyViewInFrameHierarchy):
        Don't reset the focus node if focusCallResultedInViewBeingCreated is true. Also, add magic to prevent setting
        a text field as the first responder if its field editor already is the current first responder.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::handleMousePressEvent):
        In some cases, get the event target node again after dispatching the mouse event.

2006-07-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/4615765> Input[type='search' fields 
        initially render too large in Widgets

        Fundamentally, the problem here is that we were miscalculating 
        things because [NSGraphicsContext currentContextDrawingToScreen] 
        was evaluating to false when widgets first load. We only ever used 
        this check, however, to determine if we were printing or not, so it 
        should not have evaluated to false for loading in Dashbaord. 
        Instead, if we query the RenderView about whether or not we are 
        printing, we will get the right answer.

        No test case added since this appears only to affect Dashboard.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge drawRect:]): Ask the RenderView if we are 
        printing instead. This is not part of the actual bug fix, but it 
        seems wise to get rid of all calls to [NSGraphicsContext 
        currentContextDrawingToScreen] when we are just trying to determine 
        if we are printing or not.
        * platform/mac/ListBoxMac.mm:
        (itemTextRenderer):This function now takes a boolean, isPrinting.
        (groupLabelTextRenderer): Same as above.
        (ListBox::sizeForNumberOfLines): Ask the RenderView if we are 
        printing.
        (-[WebCoreTableView drawRow:clipRect:]): Same as above.
        * platform/mac/PopUpButtonMac.mm:
        (PopUpButton::sizeHint): Same as above.
        * platform/mac/TextFieldMac.mm:
        (-[NSSearchFieldCell _addStringToRecentSearches:]):
        * rendering/RenderLineEdit.cpp: Same as above.

2006-07-12  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=9813
        OPTION text can paint over select element's scrollbar

        Test: fast/forms/option-text-clip.html

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::paintObject):
        When calculating the clip to apply to the button text, also consider padding.
        In the future, we may have separate renderers for the text part, and the arrow part
        of the control, and then the separation should be natural.  For now, we use padding.

2006-07-11  David Kilzer  <ddkilzer@kilzer.net>

        Windows build fix.  Reviewed by NOBODY.

        * WebCore.vcproj/WebCore/WebCore.vcproj:  Added JSHTMLOptionsCollection.cpp/h
        and JSHTMLOptionsCollectionCuston.cpp.  VC++ Express realphabetized the file list.

2006-07-11  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9809
          <rdar://problem/4619515>
          focus ring fails to appear on select element after choosing item from popup

        - includes http://bugs.webkit.org/show_bug.cgi?id=9853
          improvements to select element, including some storage leak fixes

        * html/HTMLOptionElement.cpp: (WebCore::HTMLOptionElement::index): Use a const
        reference for the list items, so we don't have to copy a vector.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectedIndex): Ditto.
        (WebCore::HTMLSelectElement::setSelectedIndex): Ditto.
        (WebCore::HTMLSelectElement::length): Ditto.
        (WebCore::HTMLSelectElement::remove): Ditto.
        (WebCore::HTMLSelectElement::value): Ditto.
        (WebCore::HTMLSelectElement::setValue): Ditto.
        (WebCore::HTMLSelectElement::stateValue): Ditto.
        (WebCore::HTMLSelectElement::restoreState): Ditto.
        (WebCore::HTMLSelectElement::appendFormData): Ditto.
        (WebCore::HTMLSelectElement::optionToListIndex): Ditto.
        (WebCore::HTMLSelectElement::listToOptionIndex): Ditto.
        (WebCore::HTMLSelectElement::recalcListItems): Made const, with the appropriate
        fields mutable.
        (WebCore::HTMLSelectElement::reset): Use a const reference for
        the list items, so we don't have to copy the vector. Remove the call to
        setSelectionChanged for the RenderMenuList case.
        (WebCore::HTMLSelectElement::notifyOptionSelected): Ditto, on both counts.
        (WebCore::HTMLSelectElement::defaultEventHandler): Call focus() before showing
        the pop-up.
        * html/HTMLSelectElement.h: The RenderMenuList class is no longer a friend.
        Changed the listItems function to return a const reference to the vector so
        it no longer copies the vector. Removed the const_cast to the call to
        recalcListItems and changed it to a const member function. Made m_recalcListItems
        mutable.
        * rendering/DeprecatedRenderSelect.cpp:
        (WebCore::DeprecatedRenderSelect::updateFromElement): Removed an unnecessary call
        to recalcListItems, which is called automatically. Use a const reference for the
        list items so we don't have to copy a vector.
        (WebCore::DeprecatedRenderSelect::layout): Ditto.
        (WebCore::DeprecatedRenderSelect::selectionChanged): Ditto.
        (WebCore::DeprecatedRenderSelect::updateSelection): Ditto.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList): Updated for renamed data members.
        (WebCore::RenderMenuList::createInnerBlock): Ditto.
        (WebCore::RenderMenuList::addChild): Ditto.
        (WebCore::RenderMenuList::removeChild): Ditto.
        (WebCore::RenderMenuList::setStyle): Ditto. Also removed code to set the style
        on the pop-up menu, because it's created with the correct style and destroyed
        before it a style change could occur.
        (WebCore::RenderMenuList::updateFromElement): Rearranged code to compute the
        maximum width in a simpler fashion, and to not bother trying to maintain
        the "selected" flags on the elements, since the HTMLSelectElement class
        takes care of that. Store the width as an int. Call setText to set the text
        based on the selected element's option text.
        (WebCore::RenderMenuList::paintObject): Don't check m_inner when setting
        up the clip -- always set up the clip.
        (WebCore::RenderMenuList::calcMinMaxWidth): Use m_optionsWidth directly
        instead of calling ceilf on m_longestWidth.
        (WebCore::RenderMenuList::showPopup): Don't use m_popupMenu to store the
        menu -- instead keep the pointer in a local variable. Get the selected
        index from the HTMLSelectElement.
        (WebCore::RenderMenuList::valueChanged): Call HTMLSelectElement::setSelectedIndex
        to do most of the work.
        * rendering/RenderMenuList.h: Renamed m_inner to m_innerBlock. Removed
        m_popupMenu, m_size, m_selectionChanged, and m_selectedIndex. Renamed
        m_longestWidth to m_optionsWidth and changed it to be an int. Removed
        unneeded override of removeLeftoverAnonymousBoxes function. Removed
        unneeded selectionChanged, setSelectionChanged, updateSelection, and
        hasPopupMenu functions. Removed extra includes.
        * rendering/RenderPopupMenu.cpp: (WebCore::RenderPopupMenu::populate):
        Change to iterate the list items instead of iterating all children
        of the select node.
        * rendering/RenderPopupMenu.h: Renamed getRenderMenuList to menuList.
        * rendering/RenderPopupMenuMac.mm:
        (WebCore::RenderPopupMenuMac::populate): Moved code to clear and create
        the pop-up here from the caller. Removed an extra retain that would cause
        the NSPopUpButtonCell to leak.
        (WebCore::RenderPopupMenuMac::showPopup): Removed unnecessary code to
        create the pop-up, which is now in populate, and also the call to the
        clear function, for the same reason. Reorganized code to make it a bit
        more readable. Removed an unnecessary if to check if frame is nil.
        Used a RefPtr to make sure we don't make a call on a frame after it's
        deleted. As part of the reorganization fixed a problem where we'd retain
        the event and then return early without releasing it in one case.
        (WebCore::RenderPopupMenuMac::addSeparator): Tweaked a little.
        (WebCore::RenderPopupMenuMac::addGroupLabel): Grouped all the code to
        manage the NSMenu at the bottom of the function.
        (WebCore::RenderPopupMenuMac::addOption): Ditto.

2006-07-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4620686>
        REGRESSION: Mispelling markers are still displayed when using the delete key to place caret into a misspelled word

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::respondToChangedSelection): Remove markers from newAdjacentWords 
        even if oldAdjacentWords is equal to newAdjacentWords.  This happens during a deletion.
        

2006-07-11  Tim Omernick  <timo@apple.com>

        Reviewed by NOBODY (build fix)

        * bindings/objc/DOMPrivate.h:
        Don't @class NPObject; that breaks files that actually #import <JavaScriptCore/npruntime.h>, since the NPObject
        there is of a different type.
        Also clarified a highly misleading comment from my last commit.  I meant to clarify the comment
        before landing.

2006-07-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=9635
        REGRESSION: Crash when adding to cart at <http://www.yemeksepeti.com/>
        
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        Don't load external scripts if the parser is stopped.
        
        * manual-tests/open-close-tokenizer-crash.html: Added.
        * manual-tests/resources/empty-file.js: Added.
        * manual-tests/resources/open-close-tokenizer-crash.html: Added.
        Add manual test.

2006-07-11  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin, Timo O, Brady, Darin, and Hyatt (whee!)

        - added support for creating a selection image with white text

        * rendering/RenderObject.h:
        (WebCore::):
        add PaintRestriction enum
        (WebCore::RenderObject::PaintInfo::PaintInfo):
        add forceWhiteText boolean to PaintInfo struct

        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        replaced m_selectionOnly bool with m_paintRestriction, which also handles forcing the
        text to white

        * page/Frame.cpp:
        (WebCore::Frame::paint):
        updated to use & pass m_paintRestriction where it used to use & pass just m_selectionOnly

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::selectionImage):
        now takes forceWhiteText parameter, stored in FramePrivate as part of PaintRestriction

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge selectionImageForcingWhiteText:]):
        renamed from selectionImage, now takes forceWhiteText parameter, which is passed
        down into Frame

        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        use a PaintRestriction value where we used to use a selectionOnly bool
        (WebCore::RenderLayer::paintLayer):
        ditto; also stores forceWhiteText in PaintInfo struct

        * kcanvas/KCanvasResources.cpp:
        (WebCore::KCanvasMarker::draw):
        updated for changed signature of PaintInfo constructor

        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        ditto

        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        ditto

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        paint with white text color if forceWhiteText is set in PaintInfo struct

2006-07-11  Tim Omernick  <timo@apple.com>

        Reviewed by Anders.

        <http://bugs.webkit.org/show_bug.cgi?id=9843>:
        Give Netscape plug-ins access to their own DOM element

        * html/HTMLPlugInElement.h:
        Just import JSC headers on Mac.  The NPObject and Bindings::Instance stuff is only used on Mac anyway.
        Changed __APPLE__ to PLATFORM(MAC).
        Added m_NPObject ivar.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement):
        Initialize the NPObject.
        (WebCore::HTMLPlugInElement::~HTMLPlugInElement):
        Release the NPObject when the element is destroyed.
        (WebCore::HTMLPlugInElement::createNPObject):
        Creates an NPObject for the element.
        (WebCore::HTMLPlugInElement::getNPObject):
        Returns the NPObject for the element, creating and caching it if necessary.

        * html/HTMLAppletElement.h:
        Changed __APPLE__ to PLATFORM(MAC).
        * html/HTMLAppletElement.cpp:
        ditto
        * html/HTMLEmbedElement.h:
        ditto
        * html/HTMLEmbedElement.cpp:
        ditto
        * html/HTMLObjectElement.h:
        ditto
        * html/HTMLObjectElement.cpp:
        ditto

        * bindings/objc/DOMPrivate.h:
        Added -[DOMElement _NPObject].

        * bindings/objc/DOM.mm:
        (-[DOMElement _NPObject]):
        Returns the NPObject for the element.  Since this is only needed by the Netscape plug-in API, you can only get 
        the NPObject for applet, embed, and object elements.
        
2006-07-11  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=9861
        REGRESSION: Can't dynamically change list box to popup
        
        and updated fix for http://bugs.webkit.org/show_bug.cgi?id=9859
        REGRESSION: Can't dynamically change popup to list box

        The original fix for 9859 was in the renderer, and I think we can catch the change
        earlier in the element to detach and reattach.

        I also did some cleanup to remove the PopupButton code path from DeprecatedRenderSelect

        Test: fast/forms/select-change-listbox-to-popup.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute): If the new attribute value is going to require us to change from listbox to popup or vice versa,
        and we're already attached, then detach and reattach to create the correct renderer.  If we're not attached, then we'll create the correct renderer
        when we attach.
        (WebCore::HTMLSelectElement::recalcStyle): Updated shouldUseMenuList since it no longer takes a RenderStyle.
        (WebCore::HTMLSelectElement::isKeyboardFocusable): ditto.
        (WebCore::HTMLSelectElement::isMouseFocusable): ditto.
        (WebCore::HTMLSelectElement::createRenderer): ditto.
        (WebCore::HTMLSelectElement::setRecalcListItems): ditto.
        (WebCore::HTMLSelectElement::reset): ditto.
        (WebCore::HTMLSelectElement::notifyOptionSelected): ditto.
        (WebCore::HTMLSelectElement::defaultEventHandler): ditto.

        * html/HTMLSelectElement.h: (WebCore::HTMLSelectElement::shouldUseMenuList):
        This method no longer takes a RenderStyle.  That was leftover from when we used to use the appearance
        to determine whether or not to use the new menu list implementation.

        * rendering/DeprecatedRenderSelect.h: Removed PopupButton code path.
        * rendering/DeprecatedRenderSelect.cpp:
        (WebCore::DeprecatedRenderSelect::DeprecatedRenderSelect):
        (WebCore::DeprecatedRenderSelect::setWidgetWritingDirection):
        (WebCore::DeprecatedRenderSelect::updateFromElement):
        (WebCore::DeprecatedRenderSelect::baselinePosition):
        (WebCore::DeprecatedRenderSelect::layout):
        (WebCore::DeprecatedRenderSelect::updateSelection):

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::updateFromElement):
        Backed out previous fix since this is now done in HTMLSelectElement.

2006-07-11  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=9859
        REGRESSION: Can't dynamically change popup to list box

        Test: fast/forms/select-change-popup-to-listbox.html

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::updateFromElement):
        If the select element has the multiple property set, or has a size > 1, then it
        really should be a list box, so we detach and attach the element so it creates the
        correct type of renderer.

2006-07-11  John Sullivan  <sullivan@apple.com>

        Reviewed by Beth Dakin and Tim Omernick

        - fixed <rdar://problem/4622794> HiDPI: dragging the selection in Safari can show pixel cracks 
        at non-integral scale factors

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::imageFromRect):
        round image rect in window coordinate space

2006-07-10  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9811
          rdar://problem/4619572
          OPTION text contained in OPTGROUP appears at the wrong size

        * dom/Node.h:
        * dom/Node.cpp: (WebCore::Node::renderStyle): Made a const member function.
        The derived classes were overriding with const member functions, and I could
        change either this or the derived -- decided to do this.

2006-07-10  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9810
          rdar://problem/4619534
          OPTGROUP label text is using the default font instead of Lucida Grande

        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::setFontFromControlSize):
        Code wants the family name, but was calling fontName, which is not the same thing.
        Also removed the unneeded conversion to DeprecatedString.

=== Safari-521.16 ===

2006-07-10  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9179
          Implement select.options.add() method

        Tests:
        - fast/dom/select-selectedIndex-multiple.html
        - fast/dom/select-selectedIndex.html
        - fast/js/select-options-add.html

        * DerivedSources.make: Added JSHTMLOptionsCollection.h.
        * ForwardingHeaders/kjs/operations.h: Added.
        * WebCore.xcodeproj/project.pbxproj: Added new source files.
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp: Added.
        (WebCore::JSHTMLOptionsCollection::length):
        (WebCore::JSHTMLOptionsCollection::setLength):
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        * bindings/js/kjs_html.cpp: Removed JSHTMLOptionsCollection implementation.
        Renamed classes and methods for consistency.
        (KJS::JSHTMLElement::selectGetter):
        (KJS::JSHTMLElement::put):
        (KJS::JSHTMLElement::selectSetter):
        (KJS::JSHTMLCollection::JSHTMLCollection):
        (KJS::JSHTMLCollectionProtoFunc::callAsFunction):
        (KJS::getHTMLOptionsCollection):
        * bindings/js/kjs_html.h: Ditto.
        * bindings/scripts/CodeGeneratorJS.pm: Added support for HasCustomIndexSetter class attribute.
        Added support for Optional parameter attribute, which makes generated code assume overloaded
        implementation methods are available for a JavaScript function with optional arguments.  Changed
        local 'impl' variables to 'imp' so that impl() methods could be called without class designation.
        * html/HTMLOptionElement.idl: Added GenerateNativeConverter attribute.
        * html/HTMLOptionsCollection.cpp: Added methods used by generated JSHTMLOptionsCollection class.
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection):
        (WebCore::HTMLOptionsCollection::add):
        (WebCore::HTMLOptionsCollection::selectedIndex):
        (WebCore::HTMLOptionsCollection::setSelectedIndex):
        (WebCore::HTMLOptionsCollection::setLength):
        * html/HTMLOptionsCollection.h: Ditto.
        * html/HTMLOptionsCollection.idl: Added.

2006-07-10  David Harrison  <harrison@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/4602408> -webkit-highlight needs to support images and elements other than text

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        * rendering/RenderBox.h:
        Utility for subclasses.
        
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        Custom highlight in front of images.
        
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        Custom highlight in front of list markers.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        Custom highlight in front of objects.

2006-07-10  David Hyatt  <hyatt@apple.com>

        <rdar://problem/4620557> REGRESSION: In a mail message, text isn't painted
        correctly after choosing Redo Typing

        Better fix for repainting issue with positioned objects when height
        changes.  Optimize when only a positioned child changes so that we don't
        incorrectly do normal flow layout.

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2006-07-10  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        - Fix for <rdar://problem/4621442> REGRESSION (NativePopup) : Popup menus aren't drawn correctly on page at orbitz.com; cheaptickets.com

        Test: fast/forms/select-style.html

        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::isControlStyled):
        Don't let popups be style-able for now.  We'll allow it later, when we
        have a good way to handle border & backgrounds and still having it look like a control.

2006-07-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4619260>
        9A213 + Safari 521.15.1 Crash with To Do's alarm icon (WebCore::maxDeepOffset(WebCore::Node const*) )
        <rdar://problem/4619841>
        REGRESSION: Dragging selection over input field results in a crash (WebCore::maxDeepOffset(WebCore::Node const*)

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Selection.cpp:
        (WebCore::Selection::adjustForEditableContent): Iterate using next/previousVisuallyDistinctCandidate 
        instead of traverseNext/Previous node because we were skipping positions.  Jump out of shadow trees.  
        Migrate to isEditablePosition instead of isContentEditable.
        

2006-07-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele.

        Shuffling comments around from my last check-in to make things read 
        more clearly.

        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2006-07-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4621095> The should be a way to 
        access the user interface scale factor through the DOM

        window.devicePixelRatio returns the user interface scale factor.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::devicePixelRatio):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2006-07-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey

        Resolved the console error messages people got from the new DB even if they didn't have it enabled

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::pruneUnreferencedIcons):
        (WebCore::IconDatabase::pruneUnretainedIcons):
        Added quick check to bail if the DB isn't open

2006-07-10  David Harrison  <harrison@apple.com>

        Reviewed by Tim Hatcher

        Partial fix for...
        <rdar://problem/4619260> 9A213 + Safari 521.15.1 Crash with To Do's alarm icon (WebCore::maxDeepOffset(WebCore::Node const*) )
        
        * editing/Selection.cpp:
        (WebCore::Selection::adjustForEditableContent):
        Allow for node being 0.  This is a bandaid fix to prevent the crash.  It will still assert in a debug build.  See bug for more info.

2006-07-10  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9808
          REGRESSION: Incorrect layout (and ERROR) when forcing ATSU For All Text

        * manual-tests/ATSU-bad-layout.html: Added.
        * platform/mac/FontMac.mm:
        (WebCore::Font::floatWidthForComplexText): Return 0 immediately for empty runs.

2006-07-10  Darin Adler  <darin@apple.com>

        - try to fix the no-SVG build

        * ksvg2/misc/SVGImageLoader.cpp: Move namespace brace inside the #if.

2006-07-10  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9833
          REGRESSION: Reproducible crash: RenderMenuList.cpp:58: failed assertion `!m_first'

        * manual-tests/empty-title-popup.html: Added.

        * rendering/RenderMenuList.h: Add createInnerBlock.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::createInnerBlock): Factored out of addChild.
        (WebCore::RenderMenuList::addChild): Call createInnerBlock.
        (WebCore::RenderMenuList::setText): Changed parameter type.
        (WebCore::RenderMenuList::showPopup): Call createInnerBlock before calling
        the parent class's addChild.

2006-07-10  Rob Buis  <buis@kde.org>

        Reviewed by Maciej via IRC.

        Make sure the attributes are calculated against viewport width value,
        as defined in the spec.  http://paste.lisp.org/display/22342

        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::rx): Changed LM_HEIGHT to LM_WIDTH.
        * ksvg2/svg/SVGLineElement.cpp:
        (SVGLineElement::x2): Ditto.

2006-07-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4610314> Support the CSS3 content property 
        for images

        This patch provides initial support for the CSS3 content property. 
        It lacks support for any content other than images, and only allows 
        content for elements that seemed safe for now.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Remove restrictions for 
        just :before and :after
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::createRenderer):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::createRenderer):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createRenderer):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::createRenderer):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::setCachedImage): Don't allow the image to be 
        set this way if it was already set with the content property.
        * rendering/RenderImage.h:
        (WebCore::RenderImage::setIsAnonymousImage): Anonymous images are 
        those set through the content property.
        (WebCore::RenderImage::isAnonymousImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): If there is content 
        specified, create a RenderImage with the content and initialize the 
        cached image to whatever was specified in the CSS.

2006-07-10  Brady Eidson  <beidson@apple.com>

        Reviewed by NOBODY (Build Fix!)

        * icon/SiteIcon.cpp:
        (SiteIcon::getImage):
        Release build made an "unused variable" warning, which is, of course, an error.  fixed that.

2006-07-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        SQLite Icon DB now fully replicates functionality of the old DB, including pruning to keep unused
        information out to keep down disk usage.  For now, it is still off by default, as the critical
        feature of importing old icons into the new DB is still unrealized.
        If you'd like to test, add #define ICONDEBUG to your WebKitPrefix.h

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::open):
          -Sets up a timer for initial pruning
        (WebCore::IconDatabase::iconForPageURL):
          -Switched away from "dirty blob hack" as the problem is provisionally solved
        (WebCore::IconDatabase::retainIconForURL):
        (WebCore::IconDatabase::releaseIconForURL):
          -Same as found in WebKit
        (WebCore::IconDatabase::totalRetainCountForIconURL):
          -Adds up all retainers of icon
        (WebCore::IconDatabase::forgetIconForIconURLFromDatabase):
          -Wipes an Icon table entry out
        (WebCore::IconDatabase::establishTemporaryIconIDForIconURL):
        (WebCore::IconDatabase::establishTemporaryIconIDForEscapedIconURL):
        (WebCore::IconDatabase::establishIconIDForIconURL):
        (WebCore::IconDatabase::establishIconIDForEscapedIconURL):
          -Added ability to get an iconID without creating a new one if a lookup is all
           that is genuinely wanted
        (WebCore::IconDatabase::pruneUnreferencedIcons):
        (WebCore::IconDatabase::pruneUnretainedIcons):
          -Called on a timer on DB startup to clean it out
        * icon/IconDatabase.h:
        * icon/SiteIcon.cpp:
        (SiteIcon::SiteIcon):
        (SiteIcon::~SiteIcon):
          -Deletes the image on deletion
        (SiteIcon::getImage):
          -Cut down on no-longer-necessary debug info

2006-07-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=9245
        Quirksmode: Incorrect handling of disabled BUTTON elements

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        Don't call prepareSubmit if the element is disabled.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        Don't call prepareSubmit if the element is disabled.

2006-07-10  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * platform/win/TemporaryLinkStubs.cpp: Put a few functions in the WebCore namespace.
        * platform/gdk/TemporaryLinkStubs.cpp: Ditto.

2006-07-10  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix failures seen in layout tests

        * bindings/js/kjs_dom.cpp: (KJS::toJS): Restore one of the few WebCore:: prefixes
        that really needed to be there -- because we have two classes named JSHTMLDocument
        at the moment! (One in KJS and one in WebCore namespace.)

2006-07-10  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * rendering/RenderLayer.h: Correct a forward declaration of ScrollBar.

2006-07-09  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4463835> Switch to use new popup menu implementation for <select>

        * css/html4.css: Added style for new selects, and for list boxes.
        * html/HTMLSelectElement.h: (WebCore::HTMLSelectElement::shouldUseMenuList): Removed check for appearance so new popups can be styled.
   
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setStyle): Removed padding.  This is now set by the theme.
        (WebCore::RenderMenuList::calcMinMaxWidth): Now takes minimum text size into account.
        * rendering/RenderMenuList.h: Removed baselinePosition since we're letting the theme calculate that.

        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::isControlContainer): Added menuList as a ControlContainer, 
        so RenderThemeMac will compute its baseline.
        * rendering/RenderTheme.h: (WebCore::RenderTheme::minimumTextSize): Added.
        * rendering/RenderThemeMac.h: Added minimumTextSize, setPopupPaddingFromControlSize, popupButtonSizes, popupButtonMargins, popupButtonPadding.
        Removed sizeOfArrowControl. 
        * rendering/RenderThemeMac.mm:
        (WebCore::): Added enum for padding.
        (WebCore::RenderThemeMac::adjustRepaintRect): Now inflates rect to account for control shadow.
        (WebCore::RenderThemeMac::baselinePosition): Now calculates baseline for menulist.
        (WebCore::RenderThemeMac::popupButtonMargins): Tweaked values.
        (WebCore::RenderThemeMac::popupButtonSizes): Added.
        (WebCore::RenderThemeMac::popupButtonPadding): Added, so different padding can be set for different control sizes.
        (WebCore::RenderThemeMac::setPopupPaddingFromControlSize): Added.
        (WebCore::RenderThemeMac::paintMenuList): Now inflates rect to account for control shadow.
        (WebCore::RenderThemeMac::adjustMenuListStyle): Resets border, sets padding, sets control size.
        (WebCore::RenderThemeMac::setPopupButtonCellState): Removed unnecessary class name.
        (WebCore::RenderThemeMac::minimumTextSize): Added.

2006-07-09  Darin Adler  <darin@apple.com>

        - add back "unused code" for plain text fields, still used by <isindex>!

        * platform/TextField.h:
        * platform/mac/TextFieldMac.mm:
        * platform/mac/WebCoreTextField.h:
        * platform/mac/WebCoreTextField.mm:
        * rendering/RenderLineEdit.cpp:

2006-07-09  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - put more into the WebCore namespace
        - removed unused code for plain text fields

        Put more classes, class templates, enums, functions, and constants into
        the WebCore namespace, including all the headers in the platform directory.

        Removed lots of unneeded "WebCore::" qualifiers and "using" directives.

        Added some "WebCore::" qualifiers in a few places.

        Removed "uses WebCore::" in headers that we said we'd remove "when
        everything is in the WebCore namespace".

        * bindings/js/JSDOMParser.cpp:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/JSXSLTProcessor.cpp:
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_proxy.h:
        * bindings/js/kjs_window.h:
        * bindings/objc/DOM.mm:
        * bridge/History.h:
        * bridge/JavaAppletWidget.h:
        * bridge/mac/FormDataMac.h:
        * bridge/mac/FormDataMac.mm:
        * bridge/mac/WebCoreAXObject.mm:
        * bridge/mac/WebCoreEncodings.mm:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        * bridge/mac/WebCorePageState.h:
        * bridge/mac/WebCoreScriptDebugger.mm:
        * bridge/mac/WebCoreSettings.h:
        * css/CSSGrammar.y:
        * css/CSSPageRule.cpp:
        * css/CSSPageRule.h:
        * css/MediaList.cpp:
        * css/cssstyleselector.h:
        * dom/Clipboard.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/EventTargetNode.h:
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/Position.h:
        * dom/Range.cpp:
        * dom/XMLTokenizer.cpp:
        * editing/AppendNodeCommand.h:
        * editing/ApplyStyleCommand.cpp:
        * editing/BreakBlockquoteCommand.cpp:
        * editing/BreakBlockquoteCommand.h:
        * editing/CompositeEditCommand.cpp:
        * editing/CompositeEditCommand.h:
        * editing/CreateLinkCommand.h:
        * editing/DeleteFromTextNodeCommand.h:
        * editing/DeleteSelectionCommand.h:
        * editing/FormatBlockCommand.h:
        * editing/HTMLInterchange.cpp:
        * editing/HTMLInterchange.h:
        * editing/IndentOutdentCommand.h:
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertLineBreakCommand.h:
        * editing/InsertListCommand.h:
        * editing/InsertNodeBeforeCommand.h:
        * editing/InsertTextCommand.cpp:
        * editing/InsertTextCommand.h:
        * editing/JSEditor.cpp:
        * editing/JSEditor.h:
        * editing/JoinTextNodesCommand.h:
        * editing/MergeIdenticalElementsCommand.cpp:
        * editing/MergeIdenticalElementsCommand.h:
        * editing/ModifySelectionListLevel.h:
        * editing/MoveSelectionCommand.h:
        * editing/RebalanceWhitespaceCommand.h:
        * editing/RemoveNodeAttributeCommand.h:
        * editing/RemoveNodeCommand.h:
        * editing/RemoveNodePreservingChildrenCommand.h:
        * editing/ReplaceSelectionCommand.h:
        * editing/SetNodeAttributeCommand.h:
        * editing/SplitElementCommand.cpp:
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.cpp:
        * editing/SplitTextNodeCommand.h:
        * editing/SplitTextNodeContainingElementCommand.h:
        * editing/TypingCommand.cpp:
        * editing/TypingCommand.h:
        * editing/UnlinkCommand.h:
        * editing/VisiblePosition.cpp:
        * editing/WrapContentsInDummySpanCommand.cpp:
        * editing/WrapContentsInDummySpanCommand.h:
        * editing/markup.cpp:
        * editing/markup.h:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLBodyElement.cpp:
        * html/HTMLButtonElement.h:
        * html/HTMLCollection.h:
        * html/HTMLDocument.h:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.cpp:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLLabelElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.h:
        * html/HTMLTableElement.cpp:
        * html/HTMLTablePartElement.cpp:
        * icon/IconDatabase.h:
        * kcanvas/KCanvasPath.h:
        * kcanvas/KCanvasResources.cpp:
        * kcanvas/KCanvasResources.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        * kcanvas/KCanvasTreeDebug.h:
        * kcanvas/RenderSVGContainer.cpp:
        * kcanvas/RenderSVGText.h:
        * kcanvas/device/KRenderingPaintServer.h:
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerSolid.cpp:
        * ksvg2/misc/SVGImageLoader.cpp:
        * ksvg2/svg/SVGElement.cpp:
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGPoint.h:
        * ksvg2/svg/SVGStylable.h:
        * ksvg2/svg/SVGTRefElement.cpp:
        * ksvg2/svg/SVGTRefElement.h:
        * ksvg2/svg/SVGTSpanElement.cpp:
        * ksvg2/svg/SVGTSpanElement.h:
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/svgpathparser.cpp:
        * ksvg2/svg/svgpathparser.h:
        * loader/Cache.h:
        * loader/DocLoader.h:
        * loader/LoaderFunctions.h:
        * loader/mac/LoaderFunctionsMac.mm:
        * page/Frame.h:
        * page/FrameView.h:
        * page/Page.h:
        * page/Settings.h:
        * platform/AffineTransform.cpp:
        * platform/AffineTransform.h:
        * platform/Arena.cpp:
        * platform/Arena.h:
        * platform/CookieJar.h:
        * platform/DeprecatedCString.cpp:
        * platform/DeprecatedCString.h:
        * platform/DeprecatedPtrList.h:
        * platform/DeprecatedPtrListImpl.cpp:
        * platform/DeprecatedPtrListImpl.h:
        * platform/DeprecatedPtrQueue.h:
        * platform/DeprecatedString.cpp:
        * platform/DeprecatedString.h:
        * platform/DeprecatedStringList.cpp:
        * platform/DeprecatedStringList.h:
        * platform/DeprecatedValueList.h:
        * platform/DeprecatedValueListImpl.cpp:
        * platform/DeprecatedValueListImpl.h:
        * platform/FileButton.h:
        * platform/FloatPoint.h:
        * platform/FloatRect.h:
        * platform/FloatSize.h:
        * platform/FontData.h:
        * platform/FontFallbackList.h:
        * platform/GraphicsContext.h:
        * platform/IntPoint.h:
        * platform/IntRect.h:
        * platform/IntSize.h:
        * platform/KURL.cpp:
        * platform/KURL.h:
        * platform/ListBox.h:
        * platform/Logging.cpp:
        * platform/Logging.h:
        * platform/Pen.h:
        * platform/PopUpButton.h:
        * platform/RegularExpression.cpp:
        * platform/RegularExpression.h:
        * platform/SSLKeyGenerator.h:
        * platform/ScrollBar.h:
        * platform/SegmentedString.h:
        * platform/Shared.h:
        * platform/Slider.h:
        * platform/StringImpl.h:
        * platform/TextBox.h:
        * platform/TextField.h:
        * platform/TextStream.cpp:
        * platform/TextStream.h:
        * platform/TransferJob.h:
        * platform/TransferJobClient.h:
        * platform/Widget.h:
        * platform/cg/AffineTransformCG.cpp:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        * platform/mac/DeprecatedStringListMac.mm:
        * platform/mac/FontCacheMac.mm:
        * platform/mac/KURLMac.mm:
        * platform/mac/ListBoxMac.mm:
        * platform/mac/PopUpButtonMac.mm:
        * platform/mac/SSLKeyGeneratorMac.mm:
        * platform/mac/TextBoxMac.mm:
        * platform/mac/TextFieldMac.mm:
        * platform/mac/WebCoreTextArea.h:
        * platform/mac/WebCoreTextArea.mm:
        * platform/mac/WebCoreTextField.h:
        * platform/mac/WebCoreTextField.mm:
        * rendering/DeprecatedRenderSelect.h:
        * rendering/RenderArena.cpp:
        * rendering/RenderArena.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderContainer.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlow.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLineEdit.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderStyle.cpp:
        * rendering/RenderStyle.h:
        * rendering/RenderText.cpp:
        * rendering/RenderTextFragment.cpp:
        * rendering/RenderTheme.h:
        * rendering/RenderTreeAsText.cpp:
        * rendering/RenderTreeAsText.h:
        * rendering/RenderView.h:
        * rendering/bidi.h:
        * xml/XSLStyleSheet.cpp:
        * xml/XSLTProcessor.cpp:

2006-07-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::clear): Garbage collect after reinitalizing the global
        object, not before, since the reinitialization tends to create garbage.

2006-07-09  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Bug 9820: Move new DOM API that has been through API review to public headers
        http://bugs.webkit.org/show_bug.cgi?id=9820

        * bindings/objc/DOM.mm:
        (-[DOMElement focus]):
        (-[DOMElement blur]):
        (-[DOMRange text]):
        (-[DOMRange _text]):
        * bindings/objc/DOMCSS.mm:
        (-[DOMRGBColor color]):
        (-[DOMRGBColor _color]):
        * bindings/objc/DOMCore.h:
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLElement titleDisplayString]):
        (-[DOMHTMLDocument createDocumentFragmentWithMarkupString:baseURL:]):
        (-[DOMHTMLDocument createDocumentFragmentWithText:]):
        (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:]):
        (-[DOMHTMLDocument _createDocumentFragmentWithText:]):
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMXPath.h:
        * bindings/objc/DOMXPath.mm:

2006-07-09  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=9749 A 
        nested content editable div causes unnecessary screen redraws.
        
        We were repainting too much because we were deciding that we needed 
        a full layout because we didn't have a first line box. Our code 
        used to hold a lot of assumptions that positioned elements would 
        always have line boxes, but I fixed a few bugs a while back that 
        appeared because this assumption isn't true. This assumption was 
        also causing the extra redraws because the check meant that we 
        would decide to do a full layout for any positioned element that 
        did not have any line boxes in the first place. Maciej and I talked 
        about this, and we couldn't figure out why the check for line boxes 
        was part of determining if we need a full layout in the first 
        place. After hunting around the code, we decided to assume that 
        this check is antiquated. Removing it fixes the bug and doesn't 
        seem to break any layout tests. So, fingers crossed!

        Will add layout test so soon.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Remove firstLineBox 
        check.

2006-07-09  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4598149> Deleting the contents of a DOMRange and then inserting a node into it crashes in WebCore::Font::canUseGlyphCache

        Test: fast/dom/delete-contents.html
        
        * dom/Range.cpp:
        (WebCore::Range::processContents):

2006-07-09  Darin Adler  <darin@apple.com>

        - another round of renaming; and KWQ is dead

        * WebCore.vcproj/WebCore/WebCore.vcproj: Remove paths for kwq and khtml directories.
        Move files to their new locations. Did rename.
        * WebCore.xcodeproj/project.pbxproj: Move files to their new locations. Did rename.
        * WebCoreSources.bkl: Did rename.
        * webcore-base.bkl: Removed kwq.

        * kwq/AccessibilityObjectCache.h: Removed.
        * kwq/AccessibilityObjectCache.mm: Removed.
        * kwq/FormDataMac.h: Removed.
        * kwq/FormDataMac.mm: Removed.
        * kwq/WebCoreAXObject.h: Removed.
        * kwq/WebCoreAXObject.mm: Removed.
        * kwq/WebCoreEditCommand.h: Removed.
        * kwq/WebCoreEditCommand.mm: Removed.
        * kwq/WebCorePageState.h: Removed.
        * kwq/WebCorePageState.mm: Removed.
        * kwq/WebCoreResourceLoaderImp.h: Removed.
        * kwq/WebCoreResourceLoaderImp.mm: Removed.

        * bridge/AXObjectCache.h: Added.
        * bridge/mac/AXObjectCacheMac.mm: Added.
        * bridge/mac/WebCoreAXObject.h: Added.
        * bridge/mac/WebCoreAXObject.mm: Added.

        * loader/CachedObject.cpp: Removed.
        * loader/CachedObject.h: Removed.
        * loader/CachedObjectClient.h: Removed.
        * loader/CachedObjectClientWalker.cpp: Removed.
        * loader/CachedObjectClientWalker.h: Removed.

        * loader/CachedResource.cpp: Added.
        * loader/CachedResource.h: Added.
        * loader/CachedResourceClient.h: Added.
        * loader/CachedResourceClientWalker.cpp: Added.
        * loader/CachedResourceClientWalker.h: Added.

        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * css/CSSImageValue.h:
        * css/CSSImportRule.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/Notation.h:
        * dom/ProcessingInstruction.h:
        * dom/XMLTokenizer.cpp:
        * html/CanvasPattern.h:
        * html/HTMLDocument.h:
        * html/HTMLImageLoader.cpp:
        * html/HTMLImageLoader.h:
        * html/HTMLLinkElement.h:
        * html/HTMLScriptElement.cpp:
        * html/HTMLScriptElement.h:
        * html/HTMLTokenizer.cpp:
        * html/HTMLTokenizer.h:
        * kcanvas/KCanvasFilters.h:
        * ksvg2/svg/SVGCursorElement.cpp:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGFEImageElement.h:
        * loader/Cache.cpp:
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        * loader/CachedImage.h:
        * loader/CachedScript.cpp:
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        * loader/DocLoader.h:
        * loader/LoaderFunctions.h:
        * loader/Request.cpp:
        * loader/Request.h:
        * loader/loader.cpp:
        * loader/loader.h:
        * loader/mac/LoaderFunctionsMac.mm:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/mac/ClipboardMac.h:
        * platform/win/TemporaryLinkStubs.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderContainer.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderImage.h:
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderStyle.cpp:
        * rendering/RenderStyle.h:
        * xml/XSLImportRule.h:
        Did renaming.

        * platform/mac/can-convert.mm: Removed.

2006-07-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O.

        * WebCore.exp:
        Add wkPathFromFont.
        
        * platform/mac/FontDataMac.mm:
        (-[NSFont WebCore]):
        Use wkPathFromFont.
        
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Declare wkPathFromFont.

2006-07-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Set the stage to remove the workaround for the SQLite BLOB corruption.  A few other small cleanups, and
        preparation for pruning unreferenced and unretained icons.

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::recreateDatabase):  Added another trigger to assist in icon removal
        (WebCore::IconDatabase::deletePrivateTables):  Cleaned up logging messages
        (WebCore::IconDatabase::imageDataForIconID):  #ifdefed the blobbing hack for impending removal, use the real blob by default
        (WebCore::IconDatabase::imageDataForIconURL):  same
        (WebCore::IconDatabase::imageDataForPageURL):  same
        (WebCore::IconDatabase::pruneUnreferencedIcons):  Will delete any icons and their data that are not referenced
          by any PageURL
        * icon/IconDatabase.h:

        * icon/SQLDatabase.h:  Changed BlobAsVector to be unsigned char as thats the most reasonable type for
          a byte-buffer, and is what CFData expects
        * icon/SQLStatement.cpp:
        (WebCore::SQLStatement::getColumnBlobAsVector):

2006-07-09  Darin Adler  <darin@apple.com>

        - move all but the last 12 files out of kwq directory
        - removed a few unused source files I discovered

        * WebCore.vcproj/WebCore/WebCore.vcproj: Update for new file locations.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bridge/mac/FrameMac.mm:
        * dom/Element.h:
        * html/HTMLImageLoader.cpp:
        * loader/Cache.cpp:
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        * loader/CachedImage.h:
        * loader/CachedObject.h:
        * loader/CachedScript.cpp:
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        * loader/DocLoader.h:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FramePrivate.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        * rendering/DeprecatedSlider.cpp:
        * rendering/RenderObject.h:
        * xml/xmlhttprequest.cpp:
        Updated includes as needed for file location changes. Changed
        CachePolicy uses to match new filename and enum names.

        * loader/CachedResource.cpp: Removed.
        * loader/CachedResource.h: Removed.
        * loader/CachedResourceClient.h: Removed.
        * loader/CachedResourceClientWalker.cpp: Removed.
        * loader/CachedResourceClientWalker.h: Removed.
        The above files were checked in by accident a while back. The rename of
        CachedObject to CachedResource is now reflected in do-webcore-rename,
        and will be done soon.

        * kwq/AffineTransform.cpp: Removed.
        * kwq/AffineTransform.h: Removed.
        * kwq/CacheControl.h: Removed.
        * kwq/DeprecatedPtrQueue.h: Removed.
        * kwq/FileButton.h: Removed.
        * kwq/FileButton.mm: Removed.
        * kwq/ListBox.h: Removed.
        * kwq/ListBox.mm: Removed.
        * kwq/LoaderFunctions.h: Removed.
        * kwq/LoaderFunctions.mm: Removed.
        * kwq/PopUpButton.h: Removed.
        * kwq/PopUpButton.mm: Removed.
        * kwq/SSLKeyGenerator.h: Removed.
        * kwq/SSLKeyGenerator.mm: Removed.
        * kwq/Settings.h: Removed.
        * kwq/TextBox.h: Removed.
        * kwq/TextBox.mm: Removed.
        * kwq/TextField.h: Removed.
        * kwq/TextField.mm: Removed.
        * kwq/WebCoreScrollBar.h: Removed.
        * kwq/WebCoreScrollBar.mm: Removed.
        * kwq/WebCoreSlider.h: Removed.
        * kwq/WebCoreSlider.mm: Removed.

        * loader/CachePolicy.h: Added.
        * loader/LoaderFunctions.h: Added.

        * loader/mac/LoaderFunctionsMac.mm: Added.

        * page/Settings.h: Added.

        * platform/AffineTransform.cpp: Added.
        * platform/AffineTransform.h: Added.
        * platform/DeprecatedPtrQueue.h: Added.
        * platform/FileButton.h: Added.
        * platform/ListBox.h: Added.
        * platform/PopUpButton.h: Added.
        * platform/SSLKeyGenerator.h: Added.
        * platform/ScrollBar.h: Added.
        * platform/Slider.h: Added.
        * platform/TextBox.h: Added.
        * platform/TextField.h: Added.

        * platform/cg/AffineTransformCG.cpp: Added.

        * platform/mac/FileButtonMac.mm: Added.
        * platform/mac/ListBoxMac.mm: Added.
        * platform/mac/PopUpButtonMac.mm: Added.
        * platform/mac/SSLKeyGeneratorMac.mm: Added.
        * platform/mac/ScrollBarMac.mm: Added.
        * platform/mac/ScrollBarMac.mm: Added.
        * platform/mac/SliderMac.mm: Added.
        * platform/mac/SliderMac.mm: Added.
        * platform/mac/TextBoxMac.mm: Added.
        * platform/mac/TextFieldMac.mm: Added.

2006-07-09  Darin Adler  <darin@apple.com>

        - move 4 files out of kwq directory
        - make some minor project adjustments for the WebCore project

        * WebCore.xcodeproj/project.pbxproj: Link libsqlite3 the same way we do other
        libraries, rather than using a custom linker option. Moved the files from their
        old locations to the new ones. Removed "khtml" from the list of header search
        paths since that directory doesn't exist any more. Eliminated STYLE_LDFLAGS
        and just put -umbrella WebKit in OTHER_LDFLAGS in the Production configuration
        (was a leftover from "build styles" in Xcode 1). Changed to use EXPORTED_SYMBOLS_FILE
        instead of using -exported_symbols_list directly again now that Xcode has fixed the
        "strip twice" bug. Removed unneeded explicit SECTORDER_FLAGS = "" settings.
        Removed the explicit -Y,3 option now that Xcode does that by default.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed some obsolete uneeded files,
        many of which didn't exist any more. Moved the files from their old locations
        to the new ones.

        * WebCoreSources.bkl: Moved the files from their old locations to the new ones.

        * kwq/DeprecatedCString.cpp: Removed.
        * kwq/DeprecatedCString.h: Removed.
        * kwq/TextStream.cpp: Removed.
        * kwq/TextStream.h: Removed.
        * platform/DeprecatedCString.cpp: Added.
        * platform/DeprecatedCString.h: Added.
        * platform/TextStream.cpp: Added.
        * platform/TextStream.h: Added.

2006-07-09  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej (kinda).

        - did the next pass of renaming (used do-webcore-rename script)
          this takes care of most of the remaining KWQ names (almost all)

        * WebCore+SVG/DOMList.h:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_window.cpp:
        * bindings/objc/DOMHTML.mm:
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * bridge/mac/WebCoreSettings.h:
        * bridge/mac/WebCoreSettings.mm:
        * bridge/win/FrameWin.cpp:
        * css/CSSPrimitiveValue.cpp:
        * css/CSSValueKeywords.in:
        * css/MediaQueryEvaluator.cpp:
        * css/cssparser.cpp:
        * css/cssstyleselector.cpp:
        * css/cssstyleselector.h:
        * dom/CharacterData.cpp:
        * dom/CharacterData.h:
        * dom/Document.cpp:
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/EventTargetNode.cpp:
        * dom/EventTargetNode.h:
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/Position.cpp:
        * dom/ProcessingInstruction.cpp:
        * dom/QualifiedName.cpp:
        * dom/QualifiedName.h:
        * dom/XMLTokenizer.cpp: Added.
        * dom/xml_tokenizer.cpp: Removed.
        * dom/xml_tokenizer.h: Removed.
        * editing/EditAction.h:
        * editing/HTMLInterchange.cpp:
        * editing/HTMLInterchange.h:
        * editing/Selection.h:
        * editing/SelectionController.h:
        * editing/TextAffinity.h:
        * editing/TextIterator.cpp:
        * editing/TextIterator.h:
        * editing/VisiblePosition.h:
        * editing/htmlediting.cpp:
        * editing/markup.cpp:
        * editing/markup.h:
        * editing/visible_units.cpp:
        * editing/visible_units.h:
        * html/HTMLDocument.cpp:
        * html/HTMLFontElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.cpp:
        * html/HTMLTextFieldInnerElement.cpp:
        * html/HTMLTokenizer.cpp:
        * html/HTMLTokenizer.h:
        * kcanvas/KCanvasContainer.cpp: Removed.
        * kcanvas/KCanvasContainer.h: Removed.
        * kcanvas/KCanvasCreator.cpp:
        * kcanvas/KCanvasFilters.cpp:
        * kcanvas/KCanvasFilters.h:
        * kcanvas/KCanvasMatrix.cpp:
        * kcanvas/KCanvasMatrix.h:
        * kcanvas/KCanvasPath.cpp:
        * kcanvas/KCanvasPath.h:
        * kcanvas/KCanvasResources.cpp:
        * kcanvas/KCanvasResources.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        * kcanvas/KCanvasTreeDebug.h:
        * kcanvas/RenderForeignObject.cpp:
        * kcanvas/RenderForeignObject.h:
        * kcanvas/RenderPath.cpp:
        * kcanvas/RenderPath.h:
        * kcanvas/RenderSVGContainer.cpp: Added.
        * kcanvas/RenderSVGContainer.h: Added.
        * kcanvas/RenderSVGImage.cpp:
        * kcanvas/RenderSVGImage.h:
        * kcanvas/RenderSVGText.cpp:
        * kcanvas/RenderSVGText.h:
        * kcanvas/device/KRenderingPaintServer.h:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/KRenderingPaintServerSolid.cpp:
        * kcanvas/device/KRenderingPaintServerSolid.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        * ksvg2/css/CSSValueKeywords.in:
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGGElement.cpp:
        * ksvg2/svg/SVGHelper.cpp:
        * ksvg2/svg/SVGHelper.h:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGMatrix.cpp:
        * ksvg2/svg/SVGMatrix.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        * ksvg2/svg/SVGSVGElement.cpp:
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGSwitchElement.cpp:
        * ksvg2/svg/SVGTextElement.cpp:
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGUseElement.cpp:
        * kwq/AffineTransform.cpp: Added.
        * kwq/AffineTransform.h: Added.
        * kwq/DeprecatedCString.cpp: Added.
        * kwq/DeprecatedCString.h: Added.
        * kwq/DeprecatedPtrQueue.h: Added.
        * kwq/FileButton.h: Added.
        * kwq/FileButton.mm: Added.
        * kwq/FormDataMac.mm: Added.
        * kwq/KWQCString.cpp: Removed.
        * kwq/KWQCString.h: Removed.
        * kwq/KWQComboBox.h: Removed.
        * kwq/KWQComboBox.mm: Removed.
        * kwq/KWQEditCommand.h: Removed.
        * kwq/KWQEditCommand.mm: Removed.
        * kwq/KWQFileButton.h: Removed.
        * kwq/KWQFileButton.mm: Removed.
        * kwq/KWQFormData.h: Removed.
        * kwq/KWQFormData.mm: Removed.
        * kwq/KWQKHTMLSettings.h: Removed.
        * kwq/KWQKIOGlobal.h: Removed.
        * kwq/KWQKSSLKeyGen.h: Removed.
        * kwq/KWQKSSLKeyGen.mm: Removed.
        * kwq/KWQLineEdit.h: Removed.
        * kwq/KWQLineEdit.mm: Removed.
        * kwq/KWQListBox.h: Removed.
        * kwq/KWQListBox.mm: Removed.
        * kwq/KWQLoader.h: Removed.
        * kwq/KWQLoader.mm: Removed.
        * kwq/KWQPageState.h: Removed.
        * kwq/KWQPageState.mm: Removed.
        * kwq/KWQPtrQueue.h: Removed.
        * kwq/KWQResourceLoader.h: Removed.
        * kwq/KWQResourceLoader.mm: Removed.
        * kwq/KWQScrollBar.h: Removed.
        * kwq/KWQScrollBar.mm: Removed.
        * kwq/KWQSlider.h: Removed.
        * kwq/KWQSlider.mm: Removed.
        * kwq/KWQTextEdit.h: Removed.
        * kwq/KWQTextEdit.mm: Removed.
        * kwq/KWQTextStream.cpp: Removed.
        * kwq/KWQTextStream.h: Removed.
        * kwq/KWQWMatrix.cpp: Removed.
        * kwq/KWQWMatrix.h: Removed.
        * kwq/ListBox.h: Added.
        * kwq/ListBox.mm: Added.
        * kwq/LoaderFunctions.h: Added.
        * kwq/LoaderFunctions.mm: Added.
        * kwq/PopUpButton.h: Added.
        * kwq/PopUpButton.mm: Added.
        * kwq/SSLKeyGenerator.h: Added.
        * kwq/SSLKeyGenerator.mm: Added.
        * kwq/Settings.h: Added.
        * kwq/TextBox.h: Added.
        * kwq/TextBox.mm: Added.
        * kwq/TextField.h: Added.
        * kwq/TextField.mm: Added.
        * kwq/TextStream.cpp: Added.
        * kwq/TextStream.h: Added.
        * kwq/WebCoreEditCommand.h: Added.
        * kwq/WebCoreEditCommand.mm: Added.
        * kwq/WebCorePageState.h: Added.
        * kwq/WebCorePageState.mm: Added.
        * kwq/WebCoreResourceLoaderImp.h: Added.
        * kwq/WebCoreResourceLoaderImp.mm: Added.
        * kwq/WebCoreScrollBar.h: Added.
        * kwq/WebCoreScrollBar.mm: Added.
        * kwq/WebCoreSlider.h: Added.
        * kwq/WebCoreSlider.mm: Added.
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedImage.cpp:
        * loader/CachedObject.h:
        * loader/CachedObjectClientWalker.h:
        * loader/CachedResource.h:
        * loader/CachedResourceClientWalker.h:
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.h:
        * loader/Decoder.h:
        * loader/DocLoader.cpp:
        * loader/DocLoader.h:
        * loader/FormData.h:
        * loader/ImageDocument.cpp:
        * loader/PluginDocument.cpp:
        * loader/TextDocument.cpp:
        * loader/loader.cpp:
        * loader/loader.h:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/Page.cpp:
        * page/Page.h:
        * platform/DeprecatedPtrList.h:
        * platform/DeprecatedPtrListImpl.cpp:
        * platform/DeprecatedPtrListImpl.h:
        * platform/DeprecatedString.cpp:
        * platform/DeprecatedString.h:
        * platform/DeprecatedStringList.cpp:
        * platform/DeprecatedStringList.h:
        * platform/DeprecatedValueList.h:
        * platform/DeprecatedValueListImpl.cpp:
        * platform/DeprecatedValueListImpl.h:
        * platform/FloatSize.h:
        * platform/Font.cpp:
        * platform/KURL.cpp:
        * platform/RegularExpression.cpp:
        * platform/RegularExpression.h:
        * platform/SegmentedString.h:
        * platform/StreamingTextDecoder.cpp:
        * platform/String.cpp:
        * platform/StringImpl.cpp:
        * platform/TextEncoding.cpp:
        * platform/TransferJob.cpp:
        * platform/TransferJob.h:
        * platform/TransferJobInternal.h:
        * platform/gdk/FrameGdk.cpp:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        * platform/mac/CursorMac.mm:
        * platform/mac/DeprecatedStringMac.mm: Added.
        * platform/mac/FontCacheMac.mm:
        * platform/mac/FontMac.mm:
        * platform/mac/FoundationExtras.h:
        * platform/mac/ImageMac.mm:
        * platform/mac/KURLMac.mm:
        * platform/mac/MouseEventMac.mm: Removed.
        * platform/mac/QStringListMac.mm: Removed.
        * platform/mac/QStringMac.mm: Removed.
        * platform/mac/TransferJobMac.mm:
        * platform/mac/WebCoreTextArea.h:
        * platform/mac/WebCoreTextArea.mm:
        * platform/mac/WebCoreTextField.h:
        * platform/mac/WebCoreTextField.mm:
        * platform/mac/WidgetMac.mm:
        * platform/win/TemporaryLinkStubs.cpp:
        * rendering/DataRef.h:
        * rendering/DeprecatedRenderSelect.cpp:
        * rendering/DeprecatedRenderSelect.h:
        * rendering/DeprecatedSlider.cpp:
        * rendering/InlineFlowBox.cpp:
        * rendering/RenderApplet.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderContainer.cpp:
        * rendering/RenderFileButton.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFormElement.cpp:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderFrameSet.h:
        * rendering/RenderImage.cpp:
        * rendering/RenderInline.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        * rendering/RenderLineEdit.cpp:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderPartObject.cpp:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderStyle.cpp: Added.
        * rendering/RenderStyle.h: Added.
        * rendering/RenderTable.cpp:
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/RenderTextArea.cpp:
        * rendering/RenderTextControl.cpp: Added.
        * rendering/RenderTextControl.h: Added.
        * rendering/RenderTextField.cpp: Removed.
        * rendering/RenderTextField.h: Removed.
        * rendering/RenderTheme.cpp:
        * rendering/RenderThemeMac.mm:
        * rendering/RenderTreeAsText.cpp:
        * rendering/RenderTreeAsText.h:
        * rendering/RenderView.cpp:
        * rendering/RenderWidget.cpp:
        * rendering/bidi.cpp:
        * rendering/render_style.cpp: Removed.
        * rendering/render_style.h: Removed.
        * xml/XSLStyleSheet.cpp:
        * xml/XSLTProcessor.cpp:
        * xml/xmlhttprequest.cpp:
        * xpath/impl/XPathParser.cpp:

2006-07-09  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=8251
        navigator.platform incorrect in WebKit.app on Intel Macs

        For navigator.platform return "MacIntel" for Intel processors, "MacPPC"
        otherwise.

        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):

2006-07-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        Bug 5312: comments aren't available via DOM
        http://bugs.webkit.org/show_bug.cgi?id=5312

        <rdar://problem/4564414> getting comments via DOM isn't working (5312)
        <rdar://problem/4545691> DOM_COMMENT node masking out real DOM elements

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef): set m_documentElement to 0
        (WebCore::Document::childrenChanged): invalidate the document element we have cached in case it was replaced
        (WebCore::Document::documentElement): cache the first element as the document node if m_documentElement is 0
        * dom/Document.h: added m_documentElement
        * html/HTMLDocument.cpp: removed documentElement(), HTML documents just use Document's documentElement()
        * html/HTMLDocument.h: ditto
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): make a new HTML node is the document's firstChild is NULL or
        the firstChild is not a HTML element (like a comment)
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseComment): removed the #ifdef to include comment nodes

2006-07-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin, tweaked slightly and landed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9787
        fast/frames tests failing (bad pointer to owner element) under MallocScribble
        
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::close):
        Disconnect the owner element of our frame.
        
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::attach):
        Don't call setFrame here.
        
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::detach):
        Disconnect the owner element of our frame.

        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::setFrameName):        
        New function.
        
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        Don't call setFrame.
        
        (WebCore::Frame::~Frame):
        Null out the owner element.
        
        (WebCore::Frame::requestObject):
        When an object creates a child frame, assign it a name so it can be
        accessed from HTMLPlugInElement.
        
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::RenderPart):
        (WebCore::RenderPart::~RenderPart):
        * rendering/RenderPart.h:
        Get rid of setFrame.

2006-07-08  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - better fix for http://bugs.webkit.org/show_bug.cgi?id=9622
          REGRESSION: showModalDialog returnValue ignored, function result is always "undefined"

        * bindings/js/kjs_window.cpp:
        (KJS::showModalDialog): Set the return value after returning from the function if the
        window is not cleared; this is a better way to handle the case where the window does
        not get cleared before returning, and handles some new cases created by slight changes
        in the latest Safari properly too.
        (KJS::Window::clear): Changed logic slightly so we always store the result of getDirect
        into the return value slot -- the old code left the storage untouched if it was 0.
        Also made it only overwrite the return value slot if it's 0.

        * bindings/js/kjs_proxy.h:
        * bindings/js/kjs_proxy.cpp:
        * bindings/js/kjs_window.h:
        * bindings/js/kjs_window.cpp:
        * page/Frame.cpp:
        Roll the previous fix out.

2006-07-08  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * WebCore.vcproj/WebCore/WebCore.vcproj: Add missing source files.

=== Safari-521.15 ===

2006-07-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        Fix Mail ToDo crashers.

        * dom/Range.cpp:
        (WebCore::Range::compareBoundaryPoints): Added an ASSERT that both
        containers are non-null and an early return.
        * editing/Selection.cpp:
        (WebCore::Selection::validate): Fix a dangling start/end.
        (WebCore::Selection::adjustForEditableContent): Added an early return if
        m_start or m_end are null.
        (WebCore::Selection::isContentEditable): Use isRichlyEditablePosition.
        (WebCore::Selection::isContentRichlyEditable): Ditto.
        * editing/Selection.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next): Use the new highestEditableRoot.
        (WebCore::VisiblePosition::previous): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::highestEditableRoot): Takes in a position.
        (WebCore::isEditablePosition): Added.
        (WebCore::isRichlyEditablePosition): Added.
        (WebCore::rootEditableElement): Added.
        (WebCore::nextCandidate): Moved and split out from nextVisiblePosition.
        (WebCore::nextVisuallyDistinctCandidate): Ditto.
        (WebCore::previousCandidate): Moved and split out from previousVisiblePosition.
        (WebCore::previousVisuallyDistinctCandidate): Ditto.
        (WebCore::firstEditablePositionAfterPositionInRoot): Iterate over positions,
        using nextVisuallyDistinctCandidate, skipping atomic nodes that are non-editable.
        (WebCore::lastEditablePositionBeforePositionInRoot): Ditto.
        * editing/htmlediting.h:
        * editing/visible_units.cpp:
        (WebCore::startOfWord): Added a FIXME.

2006-07-07  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin

        Allowed deletion typing commands to take in a granularity

        * bridge/mac/WebCoreFrameBridge.h: Pass granularity across the bridge
        * bridge/mac/WebCoreFrameBridge.mm: Ditto
        (-[WebCoreFrameBridge deleteKeyPressedWithSmartDelete:granularity:]):
        (-[WebCoreFrameBridge forwardDeleteKeyPressedWithSmartDelete:granularity:]):
        * editing/TypingCommand.cpp: Constructors take in a granularity
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/TypingCommand.h: ditto
        * page/Frame.h: Fixed bug that shouldDeleteSelection wasn't virtual

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

        Reviewed by Anders and Tim Hatcher

        Added an accessor to a SQLite config option to change its disk-syncing behavior.
        Used this accessor to significantly speed up writes to the Icon DB.

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):  Disable full syncing to the SQLite db to speed up writes to the icondb

        * icon/SQLDatabase.cpp:
        (SQLDatabase::setFullsync):
        (SQLDatabase::setSynchronous):
        * icon/SQLDatabase.h:
        (WebCore::SQLDatabase::):  Added accessor to the SQLite config pragma "synchronous"

2006-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed a storage leak noticed by the buildbot

        * dom/Document.cpp: (WebCore::Document::removedLastRef):
        Call delete on the markers before clearing the map containing them.

2006-07-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=9777
        Reproducible crash in Loading/Frames in ToT.
        
        The problem was that the renderpart destructor resets the frame's 
        owner element. For iframes, this should only be done when the element is 
        going to be removed from the document.
        
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::~HTMLIFrameElement):
        (WebCore::HTMLIFrameElement::willRemove):
        (WebCore::HTMLIFrameElement::removedFromDocument):
        (WebCore::HTMLIFrameElement::detach):        
        * html/HTMLIFrameElement.h:
        Remove the frame in willRemove instead.
        
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::RenderPart):
        (WebCore::RenderPart::~RenderPart):
        * rendering/RenderPart.h:
        Don't call setFrame(0) in the destructor when the element is an iframe element.

2006-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fixed a storage leak noticed by the buildbot

        * page/FrameView.cpp: (WebCore::FrameViewPrivate::~FrameViewPrivate):
        Delete m_scheduledEvents.

2006-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fixed a couple of storage leaks noticed by the buildbot

        * html/HTMLOptGroupElement.cpp: (WebCore::HTMLOptGroupElement::attach):
        Call deref on the style after calling setRenderStyle, since styleForRenderer
        returns us a "ref'd" RenderStyle object.
        * html/HTMLOptionElement.cpp: (WebCore::HTMLOptionElement::attach): Ditto.

2006-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix some license mistakes

        * LICENSE-APPLE: Added more years of publication to the copyright here.

        * html/CanvasGradient.idl: Corrected license on this file. It had the wrong one.
        * html/CanvasPattern.idl: Ditto.
        * html/CanvasRenderingContext2D.idl: Ditto.
        * html/HTMLCanvasElement.idl: Ditto.

2006-07-06  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin

        Improved table editing: pressing delete directly before or after a table will now select
        the table first, then delete it, instead of just deleting it. Useful for when the table's
        existence is non-obvious.

        * bridge/mac/FrameMac.h: Added shouldDeleteSelection, which allows WebCore to trigger
        deletion editing deligates
        * bridge/mac/FrameMac.mm: ditto
        (WebCore::FrameMac::shouldDeleteSelection):
        * bridge/mac/WebCoreFrameBridge.h: ditto
        * editing/TypingCommand.cpp: Implemented check for a caret position next to a table, and
        subsequent selection (as opposed to removal)
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * page/Frame.cpp: shouldDeleteSelection added
        (WebCore::Frame::shouldDeleteSelection):
        * page/Frame.h: ditto

2006-07-07  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9768
          Split XSLImportRule out of XSLStyleSheet.* into separate 
          files (one class per file).

        * WebCore.xcodeproj/project.pbxproj:
        * xml/XSLImportRule.cpp: Added.
        (WebCore::XSLImportRule::XSLImportRule):
        (WebCore::XSLImportRule::parentStyleSheet):
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLImportRule.h: Added.
        * xml/XSLStyleSheet.cpp:
        * xml/XSLStyleSheet.h:

2006-07-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=8300
        REGRESSION: First mouse click is randomly ignored when clicking on checkbox and radio buttons
        
        * css/html4.css:
        Set "-webkit-user-select: ignore" on radio buttons and check boxes .
        
2006-07-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Tim Hatcher.

        - fix 20 Node leaks on fast/events tests - these should be the last ones

        * bindings/objc/DOMEvents.mm:
        (-[DOMEvent dealloc]): implement - deref the event!
        (-[DOMEvent finalize]): ditto

2006-07-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Tim Hatcher.

        - fix 26 Node leaks on fast/dom tests

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef): delete tokenizer - if we are still parsing at this point, we don't
        want nodes held by the parser to keep the document alive.
        * html/HTMLParser.cpp:
        (WebCore::RefNonDocNodePtr::RefNonDocNodePtr): Smart pointer that acts like RefPtr for Node,
        but avoids refing document nodes to avoid cycles.
        (WebCore::RefNonDocNodePtr::~RefNonDocNodePtr):
        (WebCore::RefNonDocNodePtr::get):
        (WebCore::RefNonDocNodePtr::operator*):
        (WebCore::RefNonDocNodePtr::operator->):
        (WebCore::RefNonDocNodePtr::operator!):
        (WebCore::RefNonDocNodePtr::operator UnspecifiedBoolType):
        (WebCore::RefNonDocNodePtr::operator=):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::HTMLStackElem): Use a RefNonDocNodePtr instead of RefPtr<Node>
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Use a RefPtr here to avoid crashing

2006-07-06  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fixed new popup control to open up when the spacebar and the up and down arrows are pressed.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=9762
        [Native pop up] Highlighted item text is black instead of white

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::isKeyboardFocusable): Added.
        (WebCore::HTMLSelectElement::isMouseFocusable): Added.
        (WebCore::HTMLSelectElement::defaultEventHandler): Updated to showPopup for up and down arrow keys and spacebar.
        * html/HTMLSelectElement.h: (WebCore::HTMLSelectElement::shouldUseMenuList): Made this const.
        * rendering/RenderPopupMenu.cpp: (WebCore::RenderPopupMenu::populate): Added FIXME.
        * rendering/RenderPopupMenuMac.mm:
        (WebCore::RenderPopupMenuMac::showPopup): Updated to save the NSEvent that triggers the popup, so we can send
        fake mouseUp and keyUp events when the NSMenu returns.
        (WebCore::RenderPopupMenuMac::addGroupLabel): Only set the NSForegroundColorAttributeName attribute if the text isn't black.
        Follow-up bug about other colors: http://bugs.webkit.org/show_bug.cgi?id=9769
        (WebCore::RenderPopupMenuMac::addOption): ditto.
        * bridge/mac/FrameMac.h: (WebCore::FrameMac::currentEvent): Returns the current NSEvent.

2006-07-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4609184>
        Mail crashes at WebCore::Selection::adjustForEditableContent
        <rdar://problem/4609140>
        Crash at WebCore::Range::compareBoundaryPoints
        
        * editing/Selection.cpp:
        (WebCore::Selection::adjustForEditableContent):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next): Moved code into a helper function.
        (WebCore::VisiblePosition::previous): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::comparePositions): Moved from Selection.cpp.
        (WebCore::lowestEditableAncestor): Added.  Returns rootEditableElement
        for a node in editable content and the rootEditableElement for the first
        ancestor that's editable for a node in non-editable content.
        (WebCore::firstEditablePositionAfterPositionInRoot): 
        (WebCore::lastEditablePositionBeforePositionInRoot):
        * editing/htmlediting.h:

2006-07-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=9528
        REGRESSION: arrow key skips '>' in Bugzilla replies due to '\n' in text nodes
        
        Patch by Darin, tweaked by Anders.
        
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):
        Convert newline characters to <br> elements. I've verified that what's done here is what WinIE does when setting innerText.
        
        (WebCore::HTMLElement::setOuterText):
        Fix comment.

        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::textWithHardLineBreaks):
        Remove assert. m_div->firstChild() can be null now because setInnerText doesn't create
        text nodes for empty strings anymore.

2006-07-06  Adele Peterson  <adele@apple.com>

        Reviewed by Tim Hatcher.

        - Speculative fix for <rdar://problem/4605532> unrepro crash at cnn.com after upgrading to 10.4.7 (but happening with 10.4.6 too)

        * page/FrameView.cpp: (WebCore::FrameView::layout): Ref's the view during layout, since a recalcStyle could cause the view to be deleted.
        If we get back from recalcStyle, and there's only one ref, return early since the the view will be deleted when we exit layout.
        * page/FrameView.h: (WebCore::FrameView::hasOneRef): Added.

2006-07-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4610891> Support overflow events
        
        * DerivedSources.make:
        Add generated sources.
        
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.
        
        * bindings/js/kjs_events.cpp:
        (KJS::toJS):
        Support creating wrappers for overflow events..
        
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _eventWith:]):
        (-[DOMOverflowEvent _overflowEvent]):
        (-[DOMOverflowEvent orient]):
        (-[DOMOverflowEvent horizontalOverflow]):
        (-[DOMOverflowEvent verticalOverflow]):
        Add Objective-C wrapper for overflow events.
        
        * dom/Event.cpp:
        (WebCore::Event::isOverflowEvent):        
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/OverflowEvent.cpp: Added.
        (WebCore::OverflowEvent::OverflowEvent):
        (WebCore::OverflowEvent::isOverflowEvent):
        * dom/OverflowEvent.h: Added.
        (WebCore::OverflowEvent::):
        (WebCore::OverflowEvent::orient):
        (WebCore::OverflowEvent::horizontalOverflow):
        (WebCore::OverflowEvent::verticalOverflow):
        * dom/OverflowEvent.idl: Added.
        Add overflow events.
        
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameView::applyOverflowToViewport):        
        (WebCore::FrameView::layout):
        Dispatch any scheduled events when layout is done.
        
        (WebCore::FrameView::scheduleEvent):
        New function which schedules an event.
        
        (WebCore::FrameView::updateOverflowStatus):
        Update overflow status for the viewport.
        
        (WebCore::FrameView::dispatchScheduledEvents):
        New function which dispatches all scheduled events.
        
        * page/FrameView.h:
        Add declarations.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateOverflowStatus):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderLayer.h:
        Schedule overflow events when overflow status changes.

2006-07-06  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4610881> Expose scroll-related JS properties to ObjC DOM interface
        <rdar://problem/4519675> offsetLeft, offsetTop, offsetHeight, and offsetWidth
        properties are not exposed to ObjC

        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLElement offsetLeft]):
        (-[DOMHTMLElement offsetTop]):
        (-[DOMHTMLElement offsetWidth]):
        (-[DOMHTMLElement offsetHeight]):
        (-[DOMHTMLElement offsetParent]):
        (-[DOMHTMLElement clientWidth]):
        (-[DOMHTMLElement clientHeight]):
        (-[DOMHTMLElement scrollLeft]):
        (-[DOMHTMLElement setScrollLeft:]):
        (-[DOMHTMLElement scrollTop]):
        (-[DOMHTMLElement setScrollTop:]):
        (-[DOMHTMLElement scrollWidth]):
        (-[DOMHTMLElement scrollHeight]):

2006-07-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        - fix 435 more layout tests Node leaks

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): fix more instances of leaked DOM ranges

2006-07-06  David Harrison  <harrison@apple.com>

        Reviewed by Geoff

        <rdar://problem/4565031> innerHTML of XMP tag returns special characters like '&gt;' instead of '>'
 
        Test: fast/innerHTML/006.html
       
        * editing/markup.cpp:
        (WebCore::startMarkup):
        (WebCore::createMarkup):
        Do not special quote content of XMP nodes.

2006-07-06  Maciej Stachowiak  <mjs@apple.com>

        - back out earlier leak fix, as it caused a crash on one of the fast/invalid layout tests

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        * html/HTMLParser.cpp:
        (WebCore::HTMLStackElem::HTMLStackElem):
        (WebCore::HTMLParser::popNestedHeaderTag):
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::HTMLParser::reopenResidualStyleTags):
        (WebCore::HTMLParser::popBlock):
        (WebCore::HTMLParser::popOneBlock):

2006-07-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - fix ~3000 Node leaks on the editing tests

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): put a newly created Range in a RefPtr
        to avoid leaking it, as this leaks the whole document.

2006-07-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - fix 26 Node leaks on various fast/dom tests

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef): Delete the tokenizer here, since if we are in mid-parse,
        the parser might hold refs on some of our children that have self-only refs.
        * html/HTMLParser.cpp:
        (WebCore::HTMLStackElem::HTMLStackElem): don't ref the node if it is a document to avoid ref cycles
        (WebCore::HTMLStackElem::~HTMLStackElem): ditto
        (WebCore::HTMLStackElem::node): changed interface a bit to support the above
        (WebCore::HTMLStackElem::setNode): ditto
        (WebCore::HTMLParser::popNestedHeaderTag): use new interface to HTMLStackElem
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): ditto
        (WebCore::HTMLParser::reopenResidualStyleTags): ditto
        (WebCore::HTMLParser::popBlock): ditto
        (WebCore::HTMLParser::popOneBlock): ditto

2006-07-06  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Adele.
        
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::createsAnonymousWrapper): This method replaces
        allowsReusingAnonymousChild() and has the opposite meaning.
        
2006-07-05  Adele Peterson  <adele@apple.com>

        Build fixes.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::calcMinMaxWidth):
        * rendering/RenderPopupMenuWin.h:
        (WebCore::RenderPopupMenuWin::RenderPopupMenuWin):
        * rendering/RenderThemeWin.cpp:

2006-07-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        - fix 308 Node leaks on the editing layout tests

        * dom/Document.cpp: (WebCore::Document::removedLastRef): Clear the markers once there
        are no real refs on the document, otherwise a self-only reference cycle w/ the document
        can occur.

2006-07-05  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej and Hyatt.

        Initial implementation of popup menu control.  This can be turned on by setting -webkit-appearance: menulist on a select element.

        * WebCore.xcodeproj/project.pbxproj: Added RenderMenuList.h, RenderMenuList.cpp, RenderPopupMenu.h, RenderPopupMenu.cpp, 
        RenderPopupMenuWin.h, RenderPopupMenuMac.h, RenderPopupMenuMac.mm, 
    
        * dom/Node.cpp:
        (WebCore::Node::renderStyle): Added. Returns the renderer's style.  If there's no renderer, returns's a RenderStyle that's kept by the node.
        This is important for HTMLOptGroupElement and HTMLOptionElement, which don't have renderers.
        (WebCore::Node::setRenderStyle): Added.
        * dom/Node.h:
        * dom/Element.cpp: (WebCore::Element::recalcStyle): Updated to use renderStyle so recalcStyle will work for HTMLOptionElements and HTMLOptGroupElements.
           
        * css/cssstyleselector.cpp: Updated to call renderStyle method on the node, so resolving style works on elements w/o renderers that cache style. 
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        (WebCore::CSSStyleSelector::checkOneSelector):

        * css/html4.css: Removed display:none from options and optgroups, since we're now caching style for these elements.
        Added font-weight styles for option and optgroup.
        
        * html/HTMLOptGroupElement.h: Added m_style to keep track of a RenderStyle for the element, even though we aren't creating a renderer.
        This will allow us to honor style for optgroups and options for popup menus (and eventually list boxes too).
        (WebCore::HTMLOptGroupElement::rendererIsNeeded): Added.
        (WebCore::HTMLOptGroupElement::renderStyle): Added.
        * html/HTMLOptionElement.h: ditto.
        (WebCore::HTMLOptionElement::rendererIsNeeded): Added.
        (WebCore::HTMLOptionElement::renderStyle): Added.
        
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement): Initialize m_style.
        (WebCore::HTMLOptGroupElement::attach): Set the renderStyle.
        (WebCore::HTMLOptGroupElement::detach): Clear m_style.
        (WebCore::HTMLOptGroupElement::setRenderStyle): Added.
        (WebCore::HTMLOptGroupElement::groupLabelText): Added.
        * html/HTMLOptionElement.cpp: ditto.
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::attach):
        (WebCore::HTMLOptionElement::detach):
        (WebCore::HTMLOptionElement::setRenderStyle):
        (WebCore::HTMLOptionElement::optionText):

        * html/HTMLSelectElement.cpp: Added code to use the new RenderMenuList if the appearance is set to MenuListAppearance, 
        and if we're not creating a list box renderer.
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::createRenderer):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::notifyOptionSelected):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        * html/HTMLSelectElement.h:

        * WebCore.exp: Added _wkPopupMenu.
        * platform/mac/WebCoreSystemInterface.h: Added wkPopupMenu to get the NSMenu to pop up.
        * platform/mac/WebCoreSystemInterface.mm:

        * platform/win/TemporaryLinkStubs.cpp: Added stubs for RenderPopupMenuWin.
        (RenderPopupMenuWin::RenderPopupMenuWin):
        (RenderPopupMenuWin::~RenderPopupMenuWin):
        (RenderPopupMenuWin::clear):
        (RenderPopupMenuWin::populate):
        (RenderPopupMenuWin::showPopup):
        (RenderPopupMenuWin::addSeparator):
        (RenderPopupMenuWin::addGroupLabel):
        (RenderPopupMenuWin::addOption):
        * rendering/RenderPopupMenuWin.h: Added.

        * rendering/RenderPopupMenu.cpp: Added.
        (WebCore::RenderPopupMenu::RenderPopupMenu):
        (WebCore::RenderPopupMenu::~RenderPopupMenu):
        (WebCore::RenderPopupMenu::clear):
        (WebCore::RenderPopupMenu::populate): Walks the DOM tree, and adds separators, options, and group labels to the RenderPopupMenu.
        (WebCore::RenderPopupMenu::showPopup):
        (WebCore::RenderPopupMenu::addSeparator):
        (WebCore::RenderPopupMenu::addGroupLabel):
        (WebCore::RenderPopupMenu::addOption):
        * rendering/RenderPopupMenu.h: Added.
        (WebCore::RenderPopupMenu::renderName):
        (WebCore::RenderPopupMenu::getRenderMenuList):
        * rendering/RenderPopupMenuMac.h: Added.
        * rendering/RenderPopupMenuMac.mm: Added.
        (WebCore::RenderPopupMenuMac::RenderPopupMenuMac):
        (WebCore::RenderPopupMenuMac::~RenderPopupMenuMac):
        (WebCore::RenderPopupMenuMac::clear): Removes all items from the menu.
        (WebCore::RenderPopupMenuMac::populate): Disables menuChangedMessages before populating the menu.
        (WebCore::RenderPopupMenuMac::showPopup): Calculates the right position, and calls wkPopupMenu.
        (WebCore::RenderPopupMenuMac::addSeparator):
        (WebCore::RenderPopupMenuMac::addGroupLabel):
        (WebCore::RenderPopupMenuMac::addOption):
        
        * rendering/RenderMenuList.cpp: Added.
        (WebCore::RenderMenuList::RenderMenuList):
        (WebCore::RenderMenuList::addChild):
        (WebCore::RenderMenuList::removeChild):
        (WebCore::RenderMenuList::setStyle):
        (WebCore::RenderMenuList::updateFromElement): If the options have changed, iterate through the children to find the menu item with the widest text.
        Set the button text to the selected item's text.
        (WebCore::RenderMenuList::setText):
        (WebCore::RenderMenuList::paintObject):
        (WebCore::RenderMenuList::baselinePosition):
        (WebCore::RenderMenuList::calcMinMaxWidth):
        (WebCore::RenderMenuList::showPopup):
        (WebCore::RenderMenuList::layout):
        (WebCore::RenderMenuList::updateSelection):
        (WebCore::RenderMenuList::valueChanged):
        * rendering/RenderMenuList.h: Added.
        (WebCore::RenderMenuList::removeLeftoverAnonymousBoxes):
        (WebCore::RenderMenuList::allowsReusingAnonymousChild):
        (WebCore::RenderMenuList::canHaveChildren):
        (WebCore::RenderMenuList::renderName):
        (WebCore::RenderMenuList::setOptionsChanged):
        (WebCore::RenderMenuList::selectionChanged):
        (WebCore::RenderMenuList::setSelectionChanged):
        (WebCore::RenderMenuList::hasPopupMenu):

        * rendering/RenderTheme.cpp: Added cases for MenuListAppearance.
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::adjustMenuListStyle):
        (WebCore::RenderTheme::createPopupMenu): creates platform-specific RenderPopupMenu.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::sizeOfArrowControl): Added. 
        (WebCore::RenderTheme::paintMenuList): Added.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::createPopupMenu):
        (WebCore::RenderThemeMac::sizeOfArrowControl):
        * rendering/RenderThemeWin.cpp: (WebCore::RenderThemeWin::createPopupMenu):
        * rendering/RenderThemeWin.h:

2006-07-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Omernick.

        IconDatabase now respects private browsing via the use of in memory, temporary tables

        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (-[WebCoreIconDatabaseBridge iconForPageURL:withSize:]):
        (-[WebCoreIconDatabaseBridge iconURLForPageURL:]): Renamed WebCore::IconDatabase methods, changes reflected here

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::clearDatabase):
        (WebCore::IconDatabase::deletePrivateTables):
        (WebCore::IconDatabase::imageDataForIconID):
        (WebCore::IconDatabase::imageDataForIconURL):
        (WebCore::IconDatabase::imageDataForPageURL):
        (WebCore::IconDatabase::setPrivateBrowsingEnabled):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::iconURLForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::performSetIconDataForIconID):
        (WebCore::IconDatabase::establishTemporaryIconIDForEscapedIconURL):
        (WebCore::IconDatabase::establishIconIDForEscapedIconURL):
        (WebCore::IconDatabase::setHaveNoIconForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::performSetIconURLForPageURL):
        (WebCore::IconDatabase::hasIconForIconURL):
        -Some style/comment cleanups, but mainly putting private browsing handling in place

        * icon/IconDatabase.h:  Some methods added, others renamed, some comments added

        * icon/SQLStatement.cpp:
        (WebCore::SQLStatement::getColumnName):
        (WebCore::SQLStatement::getColumnName16):
        (WebCore::SQLStatement::getColumnText):
        (WebCore::SQLStatement::getColumnText16):
        -The above 4 had changes to return String() for empty results instead of "" as it's less expensive;

2006-07-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin and Adele.
        
        - fixed <rdar://problem/4609162> REGRESSION: When tabbing between links on a page, 
        the window doesn't scroll to link that's not in view

        * html/HTMLAnchorElement.cpp:
        * html/HTMLAnchorElement.h:
        removed HTMLAnchorElement::focus and HTMLAnchorElement::blur. 
        
        HTMLAnchorElement::focus just called document()->setFocusNode(). The scroll-to-reveal
        code used to be inside document()->setFocusNode(), but now it's in Element::focus, and this override
        was preventing that code from running.
        
        HTMLAnchorElement::blur was exactly the same implementation as Element::blur (and there aren't any
        other implementations of ::blur in the class hierarchy in between). This change has no practical
        effect, other than removing duplicate code.
        
        Adele and I think that it was an oversight not to remove these two methods on 12/20/05
        these methods were removed from HTMLButtonElementImpl and HTMLInputElementImpl.

2006-07-05  Anders Carlsson  <acarlsson@apple.com>

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::createFrame):
        Fix Win32 build.

2006-07-05  Anders Carlsson  <acarlsson@apple.com>

        * WebCore.xcodeproj/project.pbxproj:
        Revert accidental change of debug format to DWARF.

2006-07-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=3581
        iFrames set to display:none are Missing from frames array

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::FrameMac):
        (WebCore::FrameMac::createFrame):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge initSubframeWithOwnerElement:]):
        (-[WebCoreFrameBridge installInFrame:]):
        Modify to pass the owner element instead of the owner renderer.        

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        Dispatch the node inserted events before attaching the nodes. This is what the
        tokenizer does.
        
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::openURL):
        (WebCore::HTMLFrameElement::attach):
        Pass the element to requestFrame.
        
        (WebCore::HTMLFrameElement::setLocation):
        Don't call attach/detach on an iframe.

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::insertedIntoDocument):
        Load the frame here (using openURL).
        
        (WebCore::HTMLIFrameElement::removedFromDocument):
        Call frameDetached.
        
        (WebCore::HTMLIFrameElement::attach):
        If there's a renderer, attach the content frame to it.
        
        (WebCore::HTMLIFrameElement::detach):
        Reset the renderer's frame.
        
        (WebCore::HTMLIFrameElement::openURL):
        Modify to request the frame.
        
        * html/HTMLIFrameElement.h:
        Add detach.
        
        * page/Frame.cpp:
        (WebCore::parentFromOwnerElement):
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::requestObject):
        (WebCore::Frame::loadSubframe):
        (WebCore::Frame::ownerElement):
        (WebCore::Frame::ownerRenderer):
        (WebCore::Frame::disconnectOwnerElement):
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):        
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::setFrame):
        Modify to keep an owner element around instead of the renderer. 
        
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        Don't do anything for iframes.

2006-07-04  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Maciej, reworked a bit by Darin.

        Compile fixes for wx port / gcc 4.0.2
        
        * platform/PlatformString.h:
        * platform/StringImpl.h:
        Include CoreFoundation for CF-specific code.
        
        * dom/DocPtr.h:
        * doc/EventTargetNode.h:
        Silence warnings about 'extra tokens' after #endif on gcc 4.0.2.
        (Not an error but warnings appear frequently.)
        
        * WebCoreSources.bkl:
        * webcore-base.bkl:
        Synching ports sources file with TOT. Also, making sure SRCDIR variable
        overrides any previous values.
        
        * loader/ImageDocument.cpp:
        Use PLATFORM(MAC) for the parts that are specific to the Macintosh version,
        and move the Objective-C parts to another file.

        * loader/mac/ImageDocumentMac.h: Added.
        * loader/mac/ImageDocumentMac.mm: Added.

2006-07-04  Sam Weinig  <sam.weinig@gmail.com>

        Build fix.

        * platform/Color.cpp:
        (WebCore::makeRGBAFromHSLA):

2006-07-02  David Carson  <dacarson@gmail.com>

        Reviewed by Darin.
  
        - Added HSL color support as specified in CSS3 spec.
        http://bugs.webkit.org/show_bug.cgi?id=9506
        Added parsing support of hsl(h,s,l) and hsla(h,s,l,a)
        Added converting code to convert HSL to RGB

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseColorParameters):
        Moved common code to parse RGB/RGBA values into it's
        own function. This code was duplicated in the parseColorFromValue()
        method.
        (WebCore::CSSParser::parseHSLParameters):
        Common code to parse HSL/HSLA values.
        (WebCore::CSSParser::parseColorFromValue):
        Moved RGB/RGBA parsing out to seperate function as the code was
        duplicated. 
        Added parsing support for hsl( and hsla(
        * css/cssparser.h:
        Added two new functions parseColorParameters() and 
        parseHSLParameters().
        * platform/Color.cpp:
        (WebCore::calcHue):
        Added Hue parameter to RGB color.
        (WebCore::makeRGBAFromHSLA):
        New function to convert HSLA to RGBA.
        * platform/Color.h:
        Added new functions makeRGBAFromHSLA() and calcHue().

2006-07-02  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed and landed by ggaren.

        * platform/gdk/TransferJobManager.cpp
        Fixed broken dowload logic
        * platform/gdk/ScrollViewGdk.cpp 
        Add comment that scrollbarSize is a temporary variable
        * Projects/gdk/webcore-gdk.bkl
        Defined NDEBUG build executable is miscompiled otherwise
        * WebCoreSources.bkl
        added icon/SiteIcon.cpp editing/IndentOutdentCommand.cpp 
        html/HTMLViewSourceDocument.cpp

2006-07-02  Shawn Stricker  <kb1ibt@gmail.com>

        Reviewed by Timothy Hatcher.  Build fix for Linux.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9684
          [GDK] multiple little fixes and a few new things for Templinkstubs

        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::setDrawable): Changed SCROLLBAR_SIZE to scrollbarSize.
        * platform/gdk/TemporaryLinkStubs.cpp:
        (Image::drawTiled): Added missing parameter to argument list.
        * platform/gdk/TransferJobManager.cpp:
        (WebCore::writeCallback): Added missing parenthesis to static_cast.

2006-07-02  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9674
          REGRESSION (r15075): Blank or incomplete pages on digg.com

        Replaced the requestingScript state bit added in the fix for bug 9317
        with a m_requestingScript bool that is set before and restored
        after calling ref() on a CachedScript.
        
        Test: fast/tokenizer/nested-cached-scripts.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::begin):
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::notifyFinished):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::State::):

2006-07-01  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by NOBODY (build fix).

        * platform/gdk/TransferJobManager.cpp:
        (WebCore::writeCallback): Changed 'static_cat' to 'static_cast'.

2006-06-30  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed and worked over a lot by Darin.

        - check in first set of GDK-specific sources

        * platform/gdk/BrowserExtensionGdk.h: Added.
        * platform/gdk/CookieJarGdk.cpp: Added.
        * platform/gdk/CursorGdk.cpp: Added.
        * platform/gdk/FontCacheGdk.cpp: Added.
        * platform/gdk/FontDataGdk.cpp: Added.
        * platform/gdk/FontGdk.cpp: Added.
        * platform/gdk/FontPlatformData.h: Added.
        * platform/gdk/FontPlatformDataGdk.cpp: Added.
        * platform/gdk/FrameGdk.cpp: Added.
        * platform/gdk/FrameGdk.h: Added.
        * platform/gdk/GlyphMapGdk.cpp: Added.
        * platform/gdk/KeyEventGdk.cpp: Added.
        * platform/gdk/KeyboardCodes.h: Added.
        * platform/gdk/MouseEventGdk.cpp: Added.
        * platform/gdk/PageGdk.cpp: Added.
        * platform/gdk/RenderThemeGdk.cpp: Added.
        * platform/gdk/RenderThemeGdk.h: Added.
        * platform/gdk/ScreenGdk.cpp: Added.
        * platform/gdk/ScrollViewGdk.cpp: Added.
        * platform/gdk/SharedTimerLinux.cpp: Added.
        * platform/gdk/SystemTimeLinux.cpp: Added.
        * platform/gdk/TemporaryLinkStubs.cpp: Added.
        * platform/gdk/TransferJobCurl.cpp: Added.
        * platform/gdk/TransferJobManager.cpp: Added.
        * platform/gdk/TransferJobManager.h: Added.
        * platform/gdk/WheelEventGdk.cpp: Added.
        * platform/gdk/WidgetGdk.cpp: Added.
        * platform/gdk/gdk-encodings.txt: Added.

2006-06-30  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed by Darin.

        * WebCoreSources.bkl: Updated for recent file changes.

2006-06-30  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed and enhanced by Darin.

        Compilation fixes for Linux/Gdk.

        * WebCore/platform/FontData.h: Added forward declaration of a class.
        * WebCore/platform/cairo/GraphicsContextCairo.cpp: Fixed case on include.
        * WebCore/bindings/js/kjs_html.cpp: Added <math.h> include.

        * WebCore/css/maketokenizer: Fixed incorrect check for Linux that was
        already true even on Mac OS X. Added some additional includes and
        defines to the Linux extra generated code.

2006-06-30  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7204
          float inserted in fixed height block via DOM not repainted

        Test: fast/repaint/float-move-during-layout.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::repaintOverhangingFloats): Renamed repaintFloatingDescendants()
        to this and limited it to repainting overhanging floats. Added a boolean parameter that forces
        all descendant overhanging floats (that don't have their own layer) to paint.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintDuringLayoutIfMoved): Changed to paint all descendant
        floats.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintOverhangingFloats):
        * rendering/RenderObject.h:

2006-06-30  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin

        * editing/VisiblePosition.cpp: Removed is[Not]EqualIgnoringAffinity and made operator== use the logic that ignores affinity.
        * editing/VisiblePosition.h: Ditto.
        (WebCore::operator==):
        * editing/visible_units.cpp:
        (WebCore::isStartOfParagraph): Changed to compare VisiblePositions using ==.
        (WebCore::isEndOfParagraph): Ditto.
        (WebCore::isStartOfBlock): Ditto.
        (WebCore::isEndOfBlock): Ditto.

=== Safari-521.14 ===

2006-06-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi

        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): Don't insert children into
        object tags while editing.

2006-06-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4598309
        Caret gets stuck when it hits non editable content within an editable body
        <http://bugs.webkit.org/show_bug.cgi?id=9510>
        Caret will jump out of an editable region
        
        * dom/Position.cpp:
        (WebCore::Position::upstream): Don't move into a new editable region so that 
        candidates that that straddle an editable/non-editable boundary will 
        correspond to different VisiblePositions.
        (WebCore::Position::downstream): Ditto.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyMovingRightForward): Use VisiblePosition::next(true)
        (WebCore::SelectionController::modifyMovingLeftBackward): Use VisiblePosition::previous(true)
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next): Added code to jump to the next editable region as long
        as it has the same highest editable root.
        (WebCore::VisiblePosition::previous): Ditto.
        * editing/VisiblePosition.h:
        * editing/htmlediting.cpp:
        (WebCore::highestEditableRoot): Added, returns the highest editable root of a node if that
        node is in editable content, otherwise 0.
        * editing/htmlediting.h:

2006-06-30  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=9358
          REGRESSION: Assertion failure in HTMLInputElement::setValueFromRenderer
          (value == constrainValue(value)) when deleting all text

        Test: editing/deleting/delete-all-text-in-text-field-assertion.html

        Bug 9661 filed to fix the follow-up issue:
        http://bugs.webkit.org/show_bug.cgi?id=9661
        textContent returns "\n" for a <br> even if it is collapsed

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValueFromRenderer): Work around "\n" value
        when all characters are deleted from a text field.

2006-06-30  David Harrison  <harrison@apple.com>

        Reviewed by Tim Omernick

        <rdar://problem/4609481> Crash calling -[WebScriptObject valueForKey:] when JS disabled
        
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::executionContextForDOM):
        Early return if JS is not enabled.

2006-06-30  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Tim H.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9664
          REGRESSION (r15106): Crash in fast/events/mouseover-mouseout2.html

        * page/FrameView.cpp:
        (WebCore::FrameView::handleMouseMoveEvent): Added a check that oldSubframe is
        still a subframe of the view's frame before passing the event to it.

2006-06-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/3694163> -[KWQPageState finalize] is incorrect; design change needed
        <rdar://problem/3694165> -[WebCoreFrameBridge finalize] is incorrect; design change needed

        Added close methods that need to be called before these
        objects can be released. This ensures proper tear-down under GC.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge dealloc]):
        (-[WebCoreFrameBridge finalize]):
        (-[WebCoreFrameBridge close]):
        * bridge/mac/WebCorePageBridge.h:
        * bridge/mac/WebCorePageBridge.mm:
        (-[WebCorePageBridge setMainFrame:]):
        (-[WebCorePageBridge dealloc]):
        (-[WebCorePageBridge finalize]):
        (-[WebCorePageBridge close]):
        (-[WebCorePageBridge mainFrame]):
        (-[WebCorePageBridge setGroupName:]):
        (-[WebCorePageBridge groupName]):
        * kwq/KWQPageState.h:
        * kwq/KWQPageState.mm:
        (-[KWQPageState dealloc]):
        (-[KWQPageState finalize]):
        (-[KWQPageState close]):

2006-06-29  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Hyatt.

        - test for http://bugs.webkit.org/show_bug.cgi?id=4874
        Table with absolute bottom positioning is positioned incorrectly

        Note: patch originally from Mitz, spruced up by Weinig.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2006-06-29  Graham Dennis  <Graham.Dennis@gmail.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9505
          moveParagraphContentsToNewBlockIfNecessary creates a new block outside the current position

        * editing/CompositeEditCommand.cpp:
        Added sanity checking to prevent modifying nodes outside of 
        where we should be
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):

2006-06-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Levi.

        In addition to a few small details, logging changes, and style cleanups, this is a stop-gap hack
        for a problem in SQLite's blob handling.  Querying for a blob in a void* form is reproducibly
        returning a corrupt buffer.  The temporary solution is to query for the blob as "quoted text" and
        manually convert the return string into a character buffer.

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::recreateDatabase):
        (WebCore::IconDatabase::createPrivateTables):

        (WebCore::hexToUnsignedChar): These two functions are the text-to-character-data converters for the time being
        (WebCore::hexStringToVector):

        (WebCore::IconDatabase::imageDataForIconID):
        (WebCore::IconDatabase::imageDataForIconURL):
        (WebCore::IconDatabase::imageDataForPageURL):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::hasIconForIconURL):
        * icon/IconDatabase.h:  changes the icon data accessors to return a Vector<unsigned char> instead of void*

        * icon/SQLStatement.cpp:
        (WebCore::SQLStatement::columnCount):
        (WebCore::SQLStatement::getColumnBlob):
        * icon/SiteIcon.cpp:
        (SiteIcon::getImage):

2006-06-29  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9652
          Assertion failure when changing an RTL table cell to display:none

        Test: fast/table/rtl-cell-display-none-assert.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows): Corrected the index used as
        the last index in the columnPos vector.

2006-06-29  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9622
          showModalDialog returnValue ignored, function result is always "undefined"

        * manual-tests/modal-dialog.html: Added.
        * manual-tests/show-modal-dialog-test.html: Added.

        * page/Frame.cpp: (WebCore::Frame::clear): Call KJSProxy::clear with the
        clearWindowProperties parameter instead of not calling it at all when
        clearWindowProperties is false.

        * bindings/js/kjs_proxy.h: Add boolean clearWindowProperties parameter.
        * bindings/js/kjs_proxy.cpp: (WebCore::KJSProxy::clear): Pass clearWindowProperties
        variable through to Window::clear instead of not calling it at all.

        * bindings/js/kjs_window.h: Add boolean clearWindowProperties parameter.
        * bindings/js/kjs_window.cpp: (KJS::Window::clear): If clearWindowProperties
        is false, do only the returnValue work, not the rest of the work.

        * manual-tests/modal-dialog.html: Added.
        * manual-tests/show-modal-dialog-test.html: Added.

2006-06-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4450615> Add composite mode to background 
        styles

        -webkit-background-composite will set a composite mode on a 
        background image.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in: Add -webkit-background-composite
        * css/CSSValueKeywords.in: Add all possible values (clear, copy, 
        source-over, source-in, source-out, source-atop, destination-over, 
        destination-in, destination-out, destination-atop, xor, plus-
        darker, highlight, and plus-lighter)
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseBackgroundProperty):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundComposite):
        * css/cssstyleselector.h:
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/GraphicsContext.h: drawTiledImage() now takes a 
        composite operator.
        * platform/Image.h: drawTiled() now takes a composite operator.
        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::drawTiled): Set the composite operator.
        * platform/mac/ImageMac.mm:
        (WebCore::Image::drawTiled): Set the composite operator.
        * platform/win/TemporaryLinkStubs.cpp:
        (Image::drawTiled):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended): Send the composite 
        operator in the render style over to the graphics context.
        * rendering/render_style.cpp:
        (WebCore::BackgroundLayer::BackgroundLayer):
        (WebCore::BackgroundLayer::operator=):
        (WebCore::BackgroundLayer::operator==):
        (WebCore::BackgroundLayer::fillUnsetProperties):
        (WebCore::BackgroundLayer::cullEmptyLayers):
        * rendering/render_style.h:
        (WebCore::BackgroundLayer::backgroundComposite):
        (WebCore::BackgroundLayer::isBackgroundCompositeSet):
        (WebCore::BackgroundLayer::setBackgroundComposite):
        (WebCore::BackgroundLayer::clearBackgroundComposite):
        (WebCore::RenderStyle::backgroundComposite):
        (WebCore::RenderStyle::initialBackgroundComposite):

2006-06-29  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9649
        The no-svg build broke after r15091

        * bindings/objc/DOMInternal.h: Added #if XPATH_SUPPORT/#endif.
        * bindings/objc/DOMInternal.mm: Ditto.
        (raiseDOMException):
        * bindings/objc/DOMXPath.h: Ditto.
        * bindings/objc/DOMXPath.mm: Ditto.
        * bindings/objc/DOMXPathInternal.h: Ditto.

2006-06-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O.

        <rdar://problem/4599760> Objective-C XPath support
        
        * WebCore.xcodeproj/project.pbxproj:
        Add files.
        
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        (raiseDOMException):
        Handle XPath exceptions
        
        * bindings/objc/DOMXPath.h: Added.
        (-[DOMXPathNSResolver lookupNamespaceURI:]):
        * bindings/objc/DOMXPath.mm: Added.
        (-[DOMNativeXPathNSResolver dealloc]):
        (-[DOMNativeXPathNSResolver finalize]):
        (-[DOMNativeXPathNSResolver _xpathNSResolver]):
        (-[DOMNativeXPathNSResolver _initWithXPathNSResolver:]):
        (+[DOMNativeXPathNSResolver _xpathNSResolverWith:]):
        (-[DOMNativeXPathNSResolver lookupNamespaceURI:]):
        (-[DOMXPathResult dealloc]):
        (-[DOMXPathResult finalize]):
        (-[DOMXPathResult resultType]):
        (-[DOMXPathResult numberValue]):
        (-[DOMXPathResult stringValue]):
        (-[DOMXPathResult booleanValue]):
        (-[DOMXPathResult singleNodeValue]):
        (-[DOMXPathResult invalidIteratorState]):
        (-[DOMXPathResult snapshotLength]):
        (-[DOMXPathResult iterateNext]):
        (-[DOMXPathResult snapshotItem:]):
        (-[DOMXPathResult _xpathResult]):
        (-[DOMXPathResult _initWithXPathResult:]):
        (+[DOMXPathResult _xpathResultWith:]):
        (-[DOMXPathExpression evaluate:::]):
        (-[DOMXPathExpression _xpathExpression]):
        (-[DOMXPathExpression _initWithXPathExpression:]):
        (+[DOMXPathExpression _xpathExpressionWith:]):
        (-[DOMDocument createExpression::]):
        (-[DOMDocument createNSResolver:]):
        (-[DOMDocument evaluate:::::]):
        * bindings/objc/DOMXPathInternal.h: Added.
        Add Objective-C XPath API.

2006-06-28  David Hyatt  <hyatt@apple.com>

        Add support for custom highlighting to paint at the root line box level
        (and to inflate the box it uses so that it can go outside the bounds of
        the line if necessary).

        Reviewed by harrison

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::customHighlightLineRect):
        (WebCore::FrameMac::paintCustomHighlight):
        * bridge/mac/WebCoreFrameBridge.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCustomHighlight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintCustomHighlight):
        (WebCore::RootInlineBox::paint):
        * rendering/RootInlineBox.h:

2006-06-28  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin

        <rdar://problem/4592005> FormatBlock inserts in the wrong place, disregarding editable content
        <rdar://problem/4590763> FormatBlock for paragraph style doesn't work

        * dom/Node.cpp:
        (WebCore::Node::rootEditableElement): Return inline nodes
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply): Keep from inserting before editable content
        * editing/JSEditor.cpp: Support html braces (<>) around tag names

2006-06-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        svg/custom/text-hit-test.svg was failing

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::positionForCoordinates): Don't skip child
        renderers that have a height of 0 when looking for the closest child
        renderer, they may contain content that overflows.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForCoordinates): Fixed typos.

2006-06-28  David Hyatt  <hyatt@apple.com>

        Make the view source document properly handle <script>.  We don't syntax
        highlight the JS yet, but it shows up properly now.

        Reviewed by john

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):

2006-06-28  Timothy Hatcher  <timothy@apple.com>

        Prefer the Stabs debugging symbols format until DWARF bugs are fixed.

        * WebCore.xcodeproj/project.pbxproj:

2006-06-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        Fixed EditActions for InsertHorizontalRule and RemoveFormat.
        
        * editing/JSEditor.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::editingAction):
        * editing/ReplaceSelectionCommand.h:

2006-06-28  Levi Weintraub  <lweintraub@apple.com>

         Build Fix. Reviewed by NOBODY

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion):

2006-06-28  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin

        http://bugs.webkit.org/show_bug.cgi?id=7568
        Bug 7568: Implement Indent/Outdent

        * WebCore.vcproj/WebCore/WebCore.vcproj: Added IndentOutdentCommand.h/cpp
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * editing/IndentOutdentCommand.cpp: Added.
        (WebCore::IndentOutdentCommand::IndentOutdentCommand):
        (WebCore::enclosingListOrBlockquote):
        (WebCore::IndentOutdentCommand::splitTreeToNode): Splits the DOM tree from a
        descendent node to an ending ancestor, duplicating nodes when necessary. Returns
        the last node split. Used to insert blockquotes at the topmost level.
        (WebCore::IndentOutdentCommand::indentRegion):
        (WebCore::IndentOutdentCommand::outdentParagraph):
        (WebCore::IndentOutdentCommand::outdentRegion):
        (WebCore::IndentOutdentCommand::doApply):
        * editing/IndentOutdentCommand.h: Added.
        (WebCore::IndentOutdentCommand::):
        * editing/JSEditor.cpp: Added the execCommands Indent and Outdent
        * editing/htmlediting.cpp:
        (WebCore::enclosingNodeWithTag): Finds the enclosing node with any specified tag.
        (WebCore::enclosingListChild): Added checks for nill and editable boundaries.
        (WebCore::outermostEnclosingListChild): Returns the highest ancestor list child.
        (WebCore::highestAncestor): Added.
        (WebCore::createElement): Changed the passed in string to a const reference.
        * editing/htmlediting.h:

2006-06-28  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin and Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9561
          REGRESSION: Content property on :before of button causes hang on click or hover

        Test: fast/forms/button-generated-content.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setStyle):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updatePseudoChild): Added. Calls updatePseudoChildForObject()
        on the button itself or on its inner div, if it has one.
        * rendering/RenderButton.h:
        (WebCore::RenderButton::createsAnonymousWrapper): Added. Returns true.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::pseudoChild): Added. Returns the child containing
        generated content of the requested type if there is one, or otherwise the
        child before/after which such generated content should come.
        (WebCore::RenderContainer::updatePseudoChild): Removed the child parameter and moved the guts
        of this method into updatePseudoChildForObject, which this method calls unless the object
        is an anonymous wrapper.
        (WebCore::RenderContainer::updatePseudoChildForObject): Added. Does the what
        updatePseudoChildForObject did previously, but fetches the pseudo style from
        the styledObject parameter.
        * rendering/RenderContainer.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::setStyle):
        (WebCore::RenderInline::addChildToFlow):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::createsAnonymousWrapper): Added. This method replaces
        allowsReusingAnonymousChild and returns the opposite of what that method used to
        return. Returns true if the object creates an anonymous child to contain all its
        other children.

2006-06-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Hookup the new semi-functional SQLite icon database.
        For now, it is living side-by-side with the old DB so one can compare the
        two for debugging purposes.  Also, it is disabled (in WebKit) by default unless you
        compile with ICONDEBUG #defined.

        * WebCore.xcodeproj/project.pbxproj:  Added file SiteIcon.cpp

        * bridge/mac/WebCoreIconDatabaseBridge.h:
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (-[WebCoreIconDatabaseBridge privateBrowsingEnabled]):
        (-[WebCoreIconDatabaseBridge iconForPageURL:withSize:]):
        (-[WebCoreIconDatabaseBridge iconURLForPageURL:]):
        (-[WebCoreIconDatabaseBridge _setIconData:forIconURL:]):

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::isValidDatabase):
        (WebCore::IconDatabase::recreateDatabase):
        (WebCore::IconDatabase::createPrivateTables):
        (WebCore::IconDatabase::deletePrivateTables):
        (WebCore::IconDatabase::imageDataForIconID):
        (WebCore::IconDatabase::imageDataForIconURL):
        (WebCore::IconDatabase::imageDataForPageURL):
        (WebCore::IconDatabase::setPrivateBrowsingEnabled):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::iconURLForURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::establishIconIDForEscapedIconURL):
        (WebCore::IconDatabase::setHaveNoIconForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::hasIconForIconURL):
        * icon/IconDatabase.h:
        (WebCore::SiteIcon::getIconURL):
        (WebCore::IconDatabase::getPrivateBrowsingEnabled):
        
        * icon/SiteIcon.cpp: Added.
        (SiteIcon::SiteIcon):
        (SiteIcon::~SiteIcon):
        (SiteIcon::getImage):
        (SiteIcon::resetExpiration):
        (SiteIcon::getExpiration):

2006-06-27  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9605
        REGRESSION: pageX and pageY are both 0 for events created with initMouseEvent

        Calculate pageX/pageY and clientX/clientY values when using initMouseEvent.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::initMouseEvent):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::initCoordinates):
        * dom/MouseRelatedEvent.h:

2006-06-27  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej and Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9317
          REGRESSION: crash in HTML tokenizer at Japanese Apple support page

        Test: fast/tokenizer/write-unclosed-script.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler): Changed to reset the inScript flag
        and scriptCodeSize before possible script execution, but not afterwards.
        This way, if script execution write()s a <script> tag without closing it,
        the tokenizer is left in inScript state. Added code to set the requestingScript
        flag around the request for the cached script, to let notifiyFinished() know
        that it's being called under scriptHandler().
        (WebCore::HTMLTokenizer::scriptExecution): Removed code that saved and restored
        the inScript flag. This function is always entered now with inScript being false.
        (WebCore::HTMLTokenizer::notifyFinished): Changed to use the new requestingScript
        state flag instead of the inScript flag, which is always false now when entering
        this function.
        * html/HTMLTokenizer.h:
        Added the requestingScript state bit, used to tell notifyFinished() that it
        is being called under scriptHandler() (which happens when the script is already
        in cache).

2006-06-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi

        * editing/JSEditor.cpp: Added RemoveFormat.

2006-06-27  Kevin Decker    <kdecker@apple.com>

        Reviewed by brady.

        Fixed: <rdar://problem/4597679> TOT REGRESSION: popup blocker DOA
        
        Need to add window.open() support to DumpRenderTree before landing an actual layout test.

        * bindings/js/kjs_window.cpp: 
        (KJS::WindowFunc::callAsFunction): Because FrameTree::find() returns true for empty strings, 
        we must check for empty framenames. Otherwise, illegitimate window.open() calls with no name
        will pass right through the popup blocker.

2006-06-28  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Move FIXME comment here.
        
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getComputedStyle):
        Don't do a null check on the renderer here. Everything's handled by 
        CSSComputedStyleDeclaration anyway.

2006-06-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        * rendering/RenderContainer.cpp: Fixed #include formatting.

2006-06-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4599735> Clicking out of a table at the extremes of an editable document doesn't appear to work

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForCoordinates): In the fall through case,
        where we can't find a child block that contains (x, y), pass to RenderFlow
        instead of the last visible child block.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::positionForCoordinates): Don't pass to the closest 
        child renderer if this is a table and (x, y) is outside the table.  Return
        a VisiblePosition before or after the table.
        Fixed the code that finds the closest child renderer.

2006-06-27  David Hyatt  <hyatt@apple.com>

        Preserve entity text in view source mode.  This patch doesn't highlight the
        the entities yet, but it at least prevents their resolution and removal.

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseEntity):

2006-06-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=9623
        REGRESSION: getComputedStyle should do a relayout
        
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getComputedStyle):
        Do a relayout.

2006-06-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele

        - fixed <rdar://problem/4550473> Reproducible hang on www.digg.com
        
        * dom/NodeList.cpp:
        (WebCore::NodeList::recursiveItem): Make NodeList caching also
        work for backwards iteration - if the requested index is before
        the last cached, but closer to it than to the start of the list,
        then search backwards from there.
        (WebCore::NodeList::itemForwardsFromCurrent): Split this out as a
        helper method.
        (WebCore::NodeList::itemBackwardsFromCurrent): New helper, similar
        to the above.
        * dom/NodeList.h:

2006-06-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Levi

        Some SQLDatabase cleanup (style stuff) and enhancements

        * icon/SQLDatabase.cpp:
        (SQLDatabase::open):
        (SQLDatabase::executeCommand):
        (SQLDatabase::returnsAtLeastOneResult):  Accessor to see if this query returns results
        (SQLDatabase::lastInsertRowID):  Accessor for the rowid of the last insert
        * icon/SQLDatabase.h:
        (WebCore::SQLStatement::prepareAndStep):
        * icon/SQLStatement.cpp:
        (WebCore::SQLStatement::bindInt64):
        -All of the following used to require the user to manually prepare and step a statement
        before asking for the result.  Now it will prepare and step itself so you can use a temporary
        object to get a quick result
        (WebCore::SQLStatement::getColumnName):
        (WebCore::SQLStatement::getColumnName16):
        (WebCore::SQLStatement::getColumnText):
        (WebCore::SQLStatement::getColumnText16):
        (WebCore::SQLStatement::getColumnDouble):
        (WebCore::SQLStatement::getColumnInt):
        (WebCore::SQLStatement::getColumnInt64):
        (WebCore::SQLStatement::getColumnBlobAsVector):
        (WebCore::SQLStatement::getColumnBlob):

2006-06-27  Ada Chan <adachan@apple.com>

        Reviewed by sfalken.

        Fixed build.

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-06-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4602635> Media queries must be extended to 
        address CSS pixel scaling factor

        * css/MediaFeatureNames.h: Add -webkit-device-pixel-ratio, -webkit-
        min-device-pixel-ratio, and -webkit-max-device-pixel-ratio to the 
        list of feature names.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::cmpvalue): Added a version of cmpvalue that compares 
        floats.
        (WebCore::device_pixel_ratioMediaFeatureEval):
        (WebCore::min_device_pixel_ratioMediaFeatureEval):
        (WebCore::max_device_pixel_ratioMediaFeatureEval):

2006-06-27  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - finish with http://bugs.webkit.org/show_bug.cgi?id=9606
          REGRESSION: some callers are still using clientX/Y to get pageX/Y

        * rendering/RenderFrameSet.cpp: (WebCore::RenderFrameSet::userResize):
        Change to use pageX/Y, but this really doesn't matter since framesets
        can't be scrolled -- it's the frames that are scrolled. So this change
        has no user-visible effect, but it's still better this way.

2006-06-27  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix 2/3 of http://bugs.webkit.org/show_bug.cgi?id=9606
          REGRESSION: some callers are still using clientX/Y to get pageX/Y

        Test: fast/events/anchor-image-scrolled-x-y.html
        Test: fast/events/input-image-scrolled-x-y.html

        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::defaultEventHandler): Use pageX/Y.
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler): Ditto.

2006-06-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Added functionality to WebCore::Image to get multiple representations/sizes into TIFF data

        * platform/mac/ImageMac.mm:
        (WebCore::Image::getTIFFRepresentation):

2006-06-26  David Hyatt  <hyatt@apple.com>

        Fix for 9538, support syntax highlighted HTML source.  Lots of loose
        ends still (script/style/comments/doctype/entities/accurate whitespace).

        Reviewed by darin

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setInViewSourceMode:]):
        (-[WebCoreFrameBridge inViewSourceMode]):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::loadDefaultStyle):
        (WebCore::CSSStyleSelector::matchUARules):
        * css/cssstyleselector.h:
        * css/view-source.css: Added.
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * dom/xml_tokenizer.h:
        (WebCore::Tokenizer::Tokenizer):
        (WebCore::Tokenizer::~Tokenizer):
        (WebCore::Tokenizer::inViewSourceMode):
        (WebCore::Tokenizer::setInViewSourceMode):
        * html/HTMLAttributeNames.in:
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::init):
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        (WebCore::HTMLFrameElement::attach):
        * html/HTMLFrameElement.h:
        (WebCore::HTMLFrameElement::viewSourceMode):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::continueProcessing):
        (WebCore::HTMLTokenizer::write):
        (WebCore::HTMLTokenizer::timerFired):
        (WebCore::HTMLTokenizer::end):
        (WebCore::HTMLTokenizer::processToken):
        (WebCore::HTMLTokenizer::notifyFinished):
        * html/HTMLTokenizer.h:
        * html/HTMLViewSourceDocument.cpp: Added.
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        (WebCore::HTMLViewSourceDocument::addViewSourceAttribute):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        * html/HTMLViewSourceDocument.h: Added.
        * page/Frame.cpp:
        (WebCore::Frame::begin):
        (WebCore::Frame::inViewSourceMode):
        (WebCore::Frame::setInViewSourceMode):
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):

2006-06-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9031
        REGRESSION: Crash when closing tabs on newegg.com
        
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):        
        * page/Frame.h:
        Add new method which is invoked when the frame's page has been destroyed.
        Currently this function disassociates the JS Window object with the frame, 
        stopping any running JS timers.
        
        * page/Page.cpp:
        (WebCore::Page::~Page):
        Call pageDestroyed on all frames.

2006-06-26  Rob Buis  <buis@kde.org>

        Reviewed and reworked by Darin.

        Code cleanup, calculate clientX/clientY in one central place.

        * dom/EventTargetNode.h:
        * dom/EventTargetNode.cpp: (WebCore::EventTargetNode::dispatchMouseEvent):
        Renamed parameters to pageX/Y since they aren't clientX/Y values.
        Removed code to compute clientX/Y (was a bit confused in naming before),
        because that's now done inside MouseEvent.

        * dom/MouseEvent.h:
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent): Removed clientX/Y parameters.
        (WebCore::MouseEvent::initMouseEvent): Added comments about problems I noticed.
        (WebCore::MouseEvent::which): Fixed comment that confusingly mentioned KHTML,
        when it was talking about the DOM standard.

        * dom/MouseRelatedEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsX): Added helper function.
        (WebCore::contentsY): Ditto.
        (WebCore::MouseRelatedEvent::MouseRelatedEvent): Removed clientX/Y parameter,
        and added code to compute clientX/Y based on pageX/Y.
        (WebCore::MouseRelatedEvent::receivedTarget): Fixed comments.

        * dom/WheelEvent.h:
        * dom/WheelEvent.cpp: (WebCore::WheelEvent::WheelEvent): Removed clientX/Y
        parameter.

        * page/FrameView.cpp: (WebCore::FrameView::dispatchDragEvent): Removed the code
        to compute coordinates, and renamed the confusingly named clientPos (which was
        a page-relative position) to contentsPos.

2006-06-25  David Carson  <dacarson@gmail.com>

        Reviewed and tweaked by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=9185
        REGRESSION: UserID field appears with an incorrect height 
        on americanexpresslogin page
        - Height and Width attribute only applies to IMAGE and HIDDEN
        types.

        * dom/NamedMappedAttrMap.h:
        (WebCore::NamedMappedAttrMap::getAttributeItem):
        Added to static_cast method.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        Update the style decl if input type has changed.
        (WebCore::HTMLInputElement::mapToEntry):
        Only Cache height and width if it is an IMAGE or HIDDEN
        (WebCore::HTMLInputElement::parseMappedAttribute):
        Check type before adding height and width style.
        (WebCore::HTMLInputElement::attach):
        Remove code for discarding width.

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::respectHeightAndWidthAttrs):
        New method added to report if this input type uses height & width.

2006-06-25  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=9537
          REGRESSION: Reproducible crash in WebCore::RenderTextField::textWithHardLineBreaks()

        Test: fast/forms/textarea-hard-linewrap-empty.html

        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::textWithHardLineBreaks): Added null check for
        m_div->firstChild()->renderer().

2006-06-25  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9388
          REGRESSION: outlines don't get erased when removed in some cases

        Test: fast/repaint/outline-shrinking.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): Always repaint with the old style if the outline is
        becoming narrower, even if we are going to relayout.

2006-06-25  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8707:
        event.clientX and event.clientY should be relative to the viewport, not the canvas

        Make sure clientX and clientY take into account the scroll offsets
        of the view.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent):
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseRelatedEvent::initCoordinates):
        * dom/MouseRelatedEvent.h:
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchDragEvent):

2006-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Bug 9574: Drosera should show inline scripts within the original HTML
        http://bugs.webkit.org/show_bug.cgi?id=9574

        * Pass the starting line number and error message to the debugger.
        * Call parsedSource even if there was a script parse error so the
          debugger can show the parse error.
        * Pass NSURL objects to the ObjC delegate for the script URLs.

        * bridge/mac/WebCoreScriptDebugger.h:
        * bridge/mac/WebCoreScriptDebugger.mm:
        (toNSURL):
        (WebCoreScriptDebuggerImp::sourceParsed):

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Build fix.  Reviewed by NOBODY.

        - Backed out patch for http://bugs.webkit.org/show_bug.cgi?id=8707
          event.clientX and event.clientY should be relative to the viewport, not the canvas

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent):
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseRelatedEvent::initCoordinates):
        * dom/MouseRelatedEvent.h:
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):

2006-06-24  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8707:
        event.clientX and event.clientY should be relative to the viewport, not the canvas

        Make sure clientX and clientY take into account the scroll offsets
        of the view.

        Test: fast/dom/window-xy-properties.html

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent):
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseRelatedEvent::initCoordinates):
        * dom/MouseRelatedEvent.h:
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):

2006-06-24  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9352
        Webkit doesn't respect stroke-width in SVG for smaller <circle>s

        Make sure the stroke path is set before applying gradient transforms.

        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (WebCore::KRenderingPaintServerGradientQuartz::setup):
        (WebCore::KRenderingPaintServerGradientQuartz::renderPath):

2006-06-24  Alexey Proskuryakov  <ap@nypop.com>

        Rubber-stamped by Eric.

        Add a -h (do not follow symlinks) option to ln in derived sources build script (without it,
        a symlink was created inside the source directory on second build).

        * WebCore.xcodeproj/project.pbxproj:

2006-06-24  James G. Speth  <speth@end.com>

        Reviewed by Darin.  Copyrights tweaked by ddkilzer.
        
        Bug 8331: DOMNodeLists returned to Objective-C are not properly wrapped
        http://bugs.webkit.org/show_bug.cgi?id=8331
        
        DOMNodes were the only objects handled by createObjcInstanceForValue.
        now it handles all of these: DOMNode, DOMNodeList, DOMNamedNodeMap, DOMStyleSheetList,
        DOMStyleSheet, DOMMediaList, DOMCSSRuleList, DOMCSSRule, DOMCSSStyleDeclaration, and DOMCSSValue
        
        * WebCore.xcodeproj/project.pbxproj: added file DOMCSSInternal.h to project
        * bindings/js/kjs_css.cpp:
        (KJS::): changed ClassInfo for DOMCSSStyleSheet to have DOMStyleSheet as its parent class
        * bindings/objc/DOM.mm:
        (-[DOMDocumentType :]):  moved DOMNamedNodeMap (WebCoreInternal) interface to DOMInternal.h
        * bindings/objc/DOMCSS.mm: moved WebCoreInternal interfaces to DOMCSSInternal.h
        * bindings/objc/DOMCSSInternal.h: Added file, contains WebCoreInternal interface for CSS classes
        * bindings/objc/DOMInternal.h: added DOMNamedNodeMap (WebCoreInternal) interface
        * bindings/objc/DOMUtility.mm:
        (KJS::ScriptInterpreter::createObjcInstanceForValue): support for more classes

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Timothy.

        * Info.plist: Fixed copyright to include 2003-2006.
        * manual-tests/NPN_Invoke/Info.plist: Added copyright statement.

2006-06-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9547
          Resize corner does not track the mouse accurately

        Test: fast/css/resize-corner-tracking.html

        * page/FrameView.cpp:
        (WebCore::FrameView::handleMousePressEvent): Store the offset from the layer's
        resizing corner where dragging has started.
        (WebCore::FrameView::handleMouseMoveEvent): Pass the stored offset to the
        layer's resize method.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize): Added an offset parameter, which is added to
        the mouse location.
        For objects that may have intrinsic margins applied to them,
        added code to lift the margins into the object's style in order to keep them
        constant.
        Changed to take the content size as the base size if the box-sizing property
        is content-box.
        (WebCore::RenderLayer::offsetFromResizeCorner): Added. Returns the offset of the
        given point from the corner that tracks the mouse when resizing.
        * rendering/RenderLayer.h:

2006-06-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9316
          REGRESSION: text field width shrinks on first keystroke

        Test: fast/forms/floating-textfield-relayout.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutRoot): Added. During subtree relayout, returns
        the subtree root. Otherwise returns 0.
        (WebCore::FrameView::layoutPending): Made const.
        * page/FrameView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcWidth): Added early return if this is the root
        of a subtree being laid out. 

2006-06-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9531
          Pages that need only a horizontal scroll bar get a vertical one as well

        The change affects many existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Mark the body renderer as needing layout if
        the view's height has changed and the body stretches to the view's height.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToViewHeight): Added. Moved the logic for when
        the HTML block needs to stretch to the view's height from calcHeight() here.

2006-06-24  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7461
          Always encode the path part of an URI as UTF-8

        Test: http/tests/uri/utf8-path.html

        * platform/KURL.cpp:
        (encodeRelativeString): Always set pathEncoding to UTF-8.

2006-06-24  Graham Dennis  <Graham.Dennis@gmail.com>

        Reviewed by Darin, landed by ap.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=9467
          TreeWalker/NodeIterator do not restrict the traversal
        
        Test: traversal/stay-within-root.html

        * dom/Node.cpp:
        (WebCore::Node::traversePreviousNode):
        * dom/Node.h:
        Add a stayWithin argument to traversePreviousNode just like the other
        traversal functions
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::findNextNode):
        (WebCore::NodeIterator::findPreviousNode):
        Ensure that when moving forward or backward that the root node is not
        exited
        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::previousNode):
        (WebCore::TreeWalker::nextNode):
        Ditto
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):

2006-06-24  Jonas Witt <jonas.witt@gmail.com>

        Reviewed by ggaren, landed by ap.

        - http://bugs.webkit.org/show_bug.cgi?id=9181
          Complete DOMUIEvent Obj-C API to reflect UIEvent

        * WebCore.exp: add new classes DOMKeyboardEvent and DOMWheelEvent to the exported 
          symbols list of WebCore.framework

        Updated DOMUIEvent to include all DOM Level 2 properties
        Added DOMKeyboardEvent (DOM Level 3)
        Added two non-W3C accessors (keyCode, charCode) of DOMKeyboardEvent to a separate file (DOMEventsNonstandard)
        Added DOMWheelEvent (non-W3C) in separate file (DOMEventsNonstandard)
        Added this file (DOMEventsNonstandard) to the build process

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.h:
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _eventWith:]):
        (-[DOMUIEvent _UIEvent]):
        (-[DOMUIEvent view]):
        (-[DOMUIEvent detail]):
        (-[DOMUIEvent initUIEvent:::::]):
        (-[DOMKeyboardEvent _keyboardEvent]):
        (-[DOMKeyboardEvent keyIdentifier]):
        (-[DOMKeyboardEvent keyLocation]):
        (-[DOMKeyboardEvent ctrlKey]):
        (-[DOMKeyboardEvent shiftKey]):
        (-[DOMKeyboardEvent altKey]):
        (-[DOMKeyboardEvent metaKey]):
        (-[DOMKeyboardEvent getModifierState:]):
        (-[DOMMouseEvent button]):
        * bindings/objc/DOMEventsNonstandard.mm: Added.
        (-[DOMWheelEvent _wheelEvent]):
        (-[DOMWheelEvent screenX]):
        (-[DOMWheelEvent screenY]):
        (-[DOMWheelEvent clientX]):
        (-[DOMWheelEvent clientY]):
        (-[DOMWheelEvent ctrlKey]):
        (-[DOMWheelEvent shiftKey]):
        (-[DOMWheelEvent altKey]):
        (-[DOMWheelEvent metaKey]):
        (-[DOMWheelEvent isHorizontal]):
        (-[DOMWheelEvent wheelDelta]):
        (-[DOMKeyboardEvent _keyboardEvent]):
        (-[DOMKeyboardEvent keyCode]):
        (-[DOMKeyboardEvent charCode]):
        * bindings/objc/DOMPrivate.h:

2006-06-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by ap.

        - http://bugs.webkit.org/show_bug.cgi?id=9563
          Remove unused layoutSuppressed field and inLayout() method

        No test added because there is no change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):

2006-06-24  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=8177
        Javascript search incredibly slow

        No change in functionality, thus no test.

        Use info sharing for named collections, too. Moved shared HTMLCollection infos from HTMLDocument 
        to Document.  Renamed collection types to use the preferred WebKit style. Replaced direct
        HTMLCollection creation with using accessors from Document in a few places.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLElement children]):
        (-[DOMHTMLDocument images]):
        (-[DOMHTMLDocument applets]):
        (-[DOMHTMLDocument links]):
        (-[DOMHTMLDocument forms]):
        (-[DOMHTMLDocument anchors]):
        (-[DOMHTMLMapElement areas]):
        (-[DOMHTMLTableSectionElement rows]):
        (-[DOMHTMLTableElement rows]):
        (-[DOMHTMLTableElement tBodies]):
        (-[DOMHTMLTableRowElement cells]):
        * dom/Document.cpp:
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::objects):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        (WebCore::Document::nameCollectionInfo):
        * dom/Document.h:
        (WebCore::Document::collectionInfo):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::traverseNextItem):
        (WebCore::HTMLCollection::checkForNameMatch):
        (WebCore::HTMLCollection::updateNameCache):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::):
        * html/HTMLDocument.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::children):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::areas):
        * html/HTMLNameCollection.h:
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection):
        (WebCore::HTMLNameCollection::traverseNextItem):
        * html/HTMLFormCollection.cpp:
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::collectionInfo):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::rows):
        (WebCore::HTMLTableElement::tBodies):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::cells):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::rows):
        * kwq/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        * page/Frame.cpp:
        (WebCore::Frame::gotoAnchor):

2006-06-24  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=9418
        WebKit will not build when Space exists in path

        * WebCore.xcodeproj/project.pbxproj: Enclose search paths in quotes; create symlinks to 
        avoid passing paths with spaces to make.

2006-06-23  Tim Omernick  <timo@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/4560947> Leopard REGRESSION: Dragging to TileGame Widget is broken

        * page/FrameView.cpp:
        (WebCore::FrameView::updateDragAndDrop):
        Use the passed mouse event, instead of the "current" event.  There is no such thing as
        a "drag event".  Asking for the current event during a drag returns a weird system-
        internal event with an invalid mouse location.

2006-06-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Manual test added: cursor.html

        Bug 9560: should support new CSS3 cursor types to get more resizing directions
        http://bugs.webkit.org/show_bug.cgi?id=9560

        Adds support for ew-resize, ns-resize, nesw-resize, nwse-resize,
        col-resize and row-resize CSS3 cursor values.

        Also converted some of the cursor images to grayscale tiffs,
        some were RGB but had no color data.

        * Resources/eastResizeCursor.tiff:
        * Resources/eastWestResizeCursor.tiff: Added.
        * Resources/helpCursor.tiff:
        * Resources/moveCursor.tiff:
        * Resources/northEastResizeCursor.tiff:
        * Resources/northEastSouthWestResizeCursor.tiff: Added.
        * Resources/northResizeCursor.tiff:
        * Resources/northSouthResizeCursor.tiff: Added.
        * Resources/northWestResizeCursor.tiff:
        * Resources/northWestSouthEastResizeCursor.tiff: Added.
        * Resources/southEastResizeCursor.tiff:
        * Resources/southResizeCursor.tiff:
        * Resources/southWestResizeCursor.tiff:
        * Resources/textAreaResizeCorner.tiff:
        * Resources/waitCursor.tiff:
        * Resources/westResizeCursor.tiff:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * manual-tests/cursor.html: Added.
        * page/FrameView.cpp:
        (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        * platform/win/CursorWin.cpp:
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        * rendering/render_style.h: cursor needs 5 bits now

2006-06-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick
        
        - fixed <rdar://problem/4597685> stale rects for document markers can be left behind in certain cases

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::setRenderedRectForMarker):
        changed parameter from IntRect to const IntRect& at Darin's request
        (WebCore::Document::invalidateRenderedRectsForMarkersInRect):
        new method, tests whether the rendered rect for each marker intersects the
        passed rect. If so, sets the rendered rect back to the placeholder rect that
        means that the rect for this marker isn't known.
        
        * page/Frame.cpp:
        (WebCore::Frame::paint):
        call invalidateRenderedRectsForMarkersInRect on the rect we're about to paint.
        This ensures that old stale rects won't be preserved if the associated marker
        has moved such that it is out of the painted area.

2006-06-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi

        <rdar://problem/4527702>
        REGRESSION: Quote bars go away on first paragraph when I delete reply text

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        Add a rule for when to merge into empty blocks.

=== WebCore-521.13 ===

2006-06-23  Patrick Beard  <beard@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/4223619> Safari crashed in -[NSFont __isSystemFont]
        CFRetain and CFRelease NSFont's when FontPlatformData has a reference.
        We only do this when GC is enabled for performance reasons.
        No tests possible.

        * platform/mac/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):

2006-06-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <http://bugs.webkit.org/show_bug.cgi?id=8074>
        Caret before/after block tables is too small
        <rdar://problem/4598331>
        right arrow out of a table shows cursor in a weird place

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::caretRect): Don't propagate to children, 
        VisiblePositions inside containers don't refer to children.
        Don't use the font height for tables.

2006-06-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Kevin.

        Added 64-bit String::number() functions

        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::number):

2006-06-22  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9497
          REGRESSION: Incomplete repainting when scrolling thumbnails on Flickr

        Test: fast/repaint/clipped-relative.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removePositionedObjects): Removed call to computeRepaintRects().
        Previously, it was needed to update the cached rects before RenderBox::setStyle()
        called updateLayerPositions().
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle): Changed to call updateLayerPositions() for a newly-
        created layer only if it does not need layout. Otherwise,  updateLayerPositions() will
        be called after layout. This saves a repaint in some cases.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::checkForRepaintOnResize): Renamed computeRepaintRects() to
        this and deleted the code that cached the absolute position and repaint rects.
        (WebCore::RenderLayer::updateLayerPositions): Added code to cache the absolute
        position and repaint rects right after updating the layer's position.
        * rendering/RenderLayer.h:

2006-06-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4599015> REGRESSION: Hand on clock widget 
        don't appear at all

        This regression was caused by <rdar://problem/4567520> HIDPI: pixel 
        cracks in weather widget at 1.83 scaling

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): Do the contains 
        check before rounding to integral device pixels.

2006-06-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John.

        <rdar://problem/4529334> REGRESSION: Can't configure RadarInMotion widget for U.S. locations on Leopard (Javascript errors)
        
        * dom/Document.cpp:
        (WebCore::Document::completeURL):
        Check if both the URL and base URL are empty instead of using URL() which returns "about:blank" if the URL is empty.
        
2006-06-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4499675> Package Tracker widget always crashes in WebCore::Frame::jScriptEnabled() const + 0

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::noscriptCreateErrorCheck):
        (WebCore::HTMLParser::canvasCreateErrorCheck):
        (WebCore::HTMLParser::isInline):
        Add null-checks for document->frame() since it can be 0 for documents created using createHTMLDocument.

2006-06-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4524840> Entities contained in DOCTYPE referenced DTD in XSLT source document are unknown
        
        * dom/xml_tokenizer.cpp:
        (WebCore::shouldAllowExternalLoad):
        Use correct path for the catalog.
        
        (WebCore::errorFunc):
        Add error function to keep parser errors from going to the console.
        
        (WebCore::XMLTokenizer::write):
        Remove if (0 &&)
        
        (WebCore::XMLTokenizer::end):
        Pass DocLoader to xmlDocPtrForString.
        
        (WebCore::xmlDocPtrForString):        
        * dom/xml_tokenizer.h:
        Add DocLoader argument to xmlDocPtrForString so external DTDs and entities can be loaded.
        
        * xml/XSLTProcessor.cpp:
        (WebCore::xmlDocPtrFromNode):
        Pass DocLoader to xmlDocPtrForString
        
2006-06-21  David Hyatt  <hyatt@apple.com>

        Back out -webkit-overlay and just rename it back to overlay.

        Reviewed by darin

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2006-06-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData): Fix a bug in the code
        to stop merges across table cells.
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Move the code to stop merges
        across table cells to initializePositionData so that its changes to 
        m_mergeBlocksAfterDelete can take effect on the endingPosition.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Turn into an InsertLineBreak
        instead of splitting/cloning a table cell.

2006-06-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by John.

        Fix for <rdar://problem/3914965> Misspelled text underline doesn't 
        look right at non-standard scale factors

        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForMisspelling): We need to call  
        into our previously-created SPI for pattern-drawing so that the 
        phase is right at all scale factors.

2006-06-21  David Hyatt  <hyatt@apple.com>

        Fix for 7362, implement the CSS3 overflow-x and overflow-y properties.

        Reviewed by adele

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::rightOffset):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::calcMinMaxWidth):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::contentWidth):
        (WebCore::RenderBox::contentHeight):
        (WebCore::RenderBox::sizesToIntrinsicWidth):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcPercentageHeight):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::shouldAutoscroll):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::clientWidth):
        (WebCore::RenderObject::clientHeight):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasAutoVerticalScrollbar):
        (WebCore::RenderObject::hasAutoHorizontalScrollbar):
        (WebCore::RenderObject::scrollsOverflow):
        (WebCore::RenderObject::scrollsOverflowX):
        (WebCore::RenderObject::scrollsOverflowY):
        (WebCore::RenderObject::includeVerticalScrollbarSize):
        (WebCore::RenderObject::includeHorizontalScrollbarSize):
        * rendering/RenderTextArea.cpp:
        (WebCore::RenderTextArea::setStyle):
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::createDivStyle):
        (WebCore::RenderTextField::calcHeight):
        (WebCore::RenderTextField::calcMinMaxWidth):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/render_style.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/render_style.h:
        (WebCore::):
        (WebCore::RenderStyle::NonInheritedFlags::operator==):
        (WebCore::RenderStyle::setBitDefaults):
        (WebCore::RenderStyle::overflowX):
        (WebCore::RenderStyle::overflowY):
        (WebCore::RenderStyle::setOverflowX):
        (WebCore::RenderStyle::setOverflowY):
        (WebCore::RenderStyle::initialOverflowX):
        (WebCore::RenderStyle::initialOverflowY):

2006-06-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4590366>
        REGRESSION: Selection incorrectly paints gaps on TOT

        * dom/Document.cpp:
        (WebCore::Document::updateSelection): Use the leftmost candidate for the end of the
        selection and the rightmost candidate for the start of the selection.
        * dom/Position.cpp:
        (WebCore::Position::upstream): Cross line wraps so that we can use upstream/downstream
        to get to candidates before/after linewraps.
        (WebCore::Position::downstream):
        (WebCore::Position::inRenderedContent):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): 
        Ensure that the leftmost candidate is used.  We should sample the style from that one.
        When the block to insert is after a br, a br should be inserted even in strict mode.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): 
        Insert at the leftmost candidate, get rid of a use of trailingWhitespacePosition.
        Don't apply a style if its unnecessary.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): "pos" can be invalidated, don't use it.
        * editing/VisiblePosition.cpp:
        Renamed initDeepPosition and made it return the canonical position.
        (WebCore::VisiblePosition::init):
        (WebCore::VisiblePosition::canonicalPosition):
        * editing/VisiblePosition.h: 
        (WebCore::VisiblePosition::characterBefore): Added.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionState): When a selection ends at a line wrap, it shouldn't extend
        onto the next line.

2006-06-21  David Hyatt  <hyatt@apple.com>

        Reviewed and committed by Beth.

        Fix for <rdar://problem/4595337> Resizing a containing block 
        strictly vertically does not cause contained height:100% element to 
        also be resized.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): Also layout if the 
        child's min or max height is a percent.

2006-06-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=6058
        XMLTokenizer runs all <script> tags at once instead of as they're encountered
        
        * dom/xml_tokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        Initialize new members.
        
        (WebCore::XMLTokenizer::endElementNs):
        If we've encountered a script tag, execute the script here. If the script
        tag refers to an external resource, pause the parser while loading it.
        
        (WebCore::XMLTokenizer::end):
        Move code from finish() to here
        
        (WebCore::XMLTokenizer::finish):
        Only call end() if the parser isn't paused.
        
        (WebCore::XMLTokenizer::notifyFinished):
        Evaluate the script here and resume the parser.
        
        (WebCore::XMLTokenizer::resumeParsing):
        If finish() was called, call end() after writing all data.

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

        Fix build break

        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::shouldInterruptJavaScript):

2006-06-21  Anders Carlsson  <acarlsson@apple.com>

        Move FrameWin::shouldInterruptJavaScript to TemporaryLinkStubs.cpp
        
        * bridge/win/FrameWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::shouldInterruptJavaScript):

2006-06-21  Ben Goodger <bengoodger@gmail.com>

        Reviewed by Maciej. 

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=9523
        More Win32 build bustage.
 
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::shouldInterruptJavaScript):
        * bridge/win/FrameWin.h:

2006-06-20  Adele Peterson  <adele@apple.com>

        Reviewed by Anders.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=8948
        Switch to use new text field implementation for <textarea>

        * css/html4.css:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::selectionStart):
        (WebCore::HTMLTextAreaElement::selectionEnd):
        (WebCore::HTMLTextAreaElement::setSelectionStart):
        (WebCore::HTMLTextAreaElement::setSelectionEnd):
        (WebCore::HTMLTextAreaElement::select):
        (WebCore::HTMLTextAreaElement::setSelectionRange):
        (WebCore::HTMLTextAreaElement::createRenderer):
        (WebCore::HTMLTextAreaElement::appendFormData):
        (WebCore::HTMLTextAreaElement::isKeyboardFocusable):
        (WebCore::HTMLTextAreaElement::isMouseFocusable):
        (WebCore::HTMLTextAreaElement::focus):
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        (WebCore::HTMLTextAreaElement::updateValue):
        (WebCore::HTMLTextAreaElement::setValue):

2006-06-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Fixed capitalization mistake that I made, someone else fixed, then I accidentally made it go back to the old way

        * icon/SQLStatement.cpp:

2006-06-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej.

        More changes/additions setting the stage for the major IconDatabase hookup.

        * WebCore.xcodeproj/project.pbxproj:  Added SQLTransaction.cpp

        * bridge/mac/WebCoreIconDatabaseBridge.h: Added call-throughs and translations to pass WebKit DB to WebCore DB
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (+[WebCoreIconDatabaseBridge sharedBridgeInstance]):
        (-[WebCoreIconDatabaseBridge setPrivateBrowsingEnabled:]):
        (-[WebCoreIconDatabaseBridge iconForURL:withSize:]):
        (-[WebCoreIconDatabaseBridge iconURLForURL:]):
        (-[WebCoreIconDatabaseBridge defaultIconWithSize:]):
        (-[WebCoreIconDatabaseBridge retainIconForURL:]):
        (-[WebCoreIconDatabaseBridge releaseIconForURL:]):
        (-[WebCoreIconDatabaseBridge _setIconData:forIconURL:]):
        (-[WebCoreIconDatabaseBridge _setHaveNoIconForIconURL:]):
        (-[WebCoreIconDatabaseBridge _setIconURL:forURL:]):
        (-[WebCoreIconDatabaseBridge _hasIconForIconURL:]):

        * bridge/mac/WebCorePageBridge.mm: Added WebCore's IconDatabase logging channel to the user-prefs check
        (initializeLoggingChannelsIfNecessary):

        * icon/IconDatabase.cpp:  Added stubs and basic SQL usage to create the sqlite DB and respond to WebKit calls
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::close):
        (WebCore::IconDatabase::isValidDatabase):
        (WebCore::IconDatabase::recreateDatabase):
        (WebCore::IconDatabase::setPrivateBrowsingEnabled):
        (WebCore::IconDatabase::iconForURL):
        (WebCore::IconDatabase::iconURLForURL):
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::retainIconForURL):
        (WebCore::IconDatabase::releaseIconForURL):
        (WebCore::IconDatabase::setIconForIconURL):
        (WebCore::IconDatabase::setHaveNoIconForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::hasIconForIconURL):

        * icon/IconDatabase.h:  WebIcon will be an internal class used in IconDatabase but is not complete yet
        (WebCore::WebIcon::getExpiration):
        (WebCore::WebIcon::getTouch):

        * icon/SQLDatabase.cpp:  Added more SQLite convenience methods
        (SQLDatabase::setFullsync):
        (SQLDatabase::setBusyTimeout):
        (SQLDatabase::setBusyHandler):
        * icon/SQLDatabase.h:
        * icon/SQLStatement.cpp:
        (WebCore::SQLStatement::returnsAtLeastOneResult):

        * icon/SQLTransaction.cpp: Added basic commit/rollback support with this simple class
        (SQLTransaction::SQLTransaction):
        (SQLTransaction::~SQLTransaction):
        (SQLTransaction::begin):
        (SQLTransaction::commit):
        (SQLTransaction::rollback):

2006-06-20  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fixes for:
        http://bugs.webkit.org/show_bug.cgi?id=8724
        REGRESSION: onSelect handler doesn't work for text fields

        http://bugs.webkit.org/show_bug.cgi?id=7676
        REGRESSION: Selection methods on new text fields don't work if text field is hidden

        http://bugs.webkit.org/show_bug.cgi?id=8867
        REGRESSION: selectionStart/End return 0 for input element once it no longer has focus

        Implemented onSelect for new text fields and textareas.  Also fixed selection restore
        behavior to better match other browsers and Safari 2.0 behavior.

        Tests:
        * fast/forms/input-selection-restore.html
        * fast/forms/input-selection-hidden.html
        * fast/forms/onselect-textarea.html
        * fast/forms/onselect-textfield.html

        * html/HTMLInputElement.h: (WebCore::HTMLInputElement::cacheSelection): Added.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::init): Initializes cached selection.
        (WebCore::HTMLInputElement::selectionStart): If this element doesn't have focus, return the cached selection value.
        (WebCore::HTMLInputElement::selectionEnd): ditto.
        (WebCore::HTMLInputElement::setValue): Restore a caret at the starting point of the old selection.  Matches Safari 2.0 behavior.

        * html/HTMLTextAreaElement.h: (WebCore::HTMLTextAreaElement::cacheSelection): Added.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement): Initializes cached selection.
        (WebCore::HTMLTextAreaElement::selectionStart): If this element doesn't have focus, return the cached selection value.
        (WebCore::HTMLTextAreaElement::selectionEnd): ditto.
        (WebCore::HTMLTextAreaElement::focus): If this is the first focus, set a caret at the end of the text.  Otherwise,
        restore the cached selection.  This matches other browsers' behavior.
        (WebCore::HTMLTextAreaElement::setValue): Restore a caret at the starting point of the old selection.  Matches Safari 2.0 behavior.

        * page/Frame.h: Added notifyRendererOfSelectionChange method. 
        * page/Frame.cpp:
        (WebCore::Frame::notifyRendererOfSelectionChange): Added.  Calls selectionChanged for text fields and textareas.  Forwards a userTriggered
        argument so selectionChanged knows whether or not to fire onSelect.
        (WebCore::Frame::setSelection): Calls notifyRendererOfSelectionChange(false).  This gets called for all selection changes, so the renderer
        can always update its cached selection values.
        (WebCore::Frame::handleMouseReleaseEvent): Calls notifyRendererOfSelectionChange(true) so onSelect will get fired when the user is done
        making a selection with the mouse.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge alterCurrentSelection:direction:granularity:]): Calls notifyRendererOfSelectionChange(true) so onSelect gets
        fired when the user makes a selection with the keyboard.
        (-[WebCoreFrameBridge alterCurrentSelection:verticalDistance:]): ditto.

        * rendering/RenderTextField.h: Add userTriggered parameter to selectionChanged.
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::setSelectionRange): For visibility:hidden, cache the selection and 
        return early since we won't be able to actually set the selection.
        (WebCore::RenderTextField::selectionChanged): Caches the selection.  
        If the selection is a range, and its triggered by user action, then fire the onSelect event.

2006-06-21  Anders Carlsson  <acarlsson@apple.com>

        * bridge/win/FrameWin.cpp:
        (WebCore::shouldInterruptJavaScript):
        * bridge/win/FrameWin.h:
        Try fixing the Windows build.

2006-06-20  Adele Peterson  <adele@apple.com>

        RS by Tim Hatcher.

        Renamed RenderSelect to DeprecatedRenderSelect to prepare for new popup menu and list menu implementations.
       
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::createRenderer):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::notifyOptionSelected):
        * html/HTMLSelectElement.h:
        * rendering/DeprecatedRenderSelect.cpp: Added.
        (WebCore::DeprecatedRenderSelect::DeprecatedRenderSelect):
        (WebCore::DeprecatedRenderSelect::setWidgetWritingDirection):
        (WebCore::DeprecatedRenderSelect::setStyle):
        (WebCore::DeprecatedRenderSelect::updateFromElement):
        (WebCore::DeprecatedRenderSelect::baselinePosition):
        (WebCore::DeprecatedRenderSelect::calcMinMaxWidth):
        (WebCore::DeprecatedRenderSelect::layout):
        (WebCore::DeprecatedRenderSelect::valueChanged):
        (WebCore::DeprecatedRenderSelect::selectionChanged):
        (WebCore::DeprecatedRenderSelect::setOptionsChanged):
        (WebCore::DeprecatedRenderSelect::createListBox):
        (WebCore::DeprecatedRenderSelect::updateSelection):
        * rendering/DeprecatedRenderSelect.h: Added.
        (WebCore::DeprecatedRenderSelect::renderName):
        * rendering/RenderSelect.cpp: Removed.
        * rendering/RenderSelect.h: Removed.

2006-06-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=9509
        Would like a way to pause/resume XML parsing

        * dom/xml_tokenizer.cpp:
        (WebCore::PendingCallbacks::PendingCallbacks):
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::PendingCallbacks::callAndRemoveFirstCallback):
        (WebCore::PendingCallbacks::isEmpty):
        (WebCore::PendingCallbacks::PendingCallback::~PendingCallback):
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::~PendingStartElementNSCallback):
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::call):
        (WebCore::PendingCallbacks::PendingEndElementNSCallback::call):
        (WebCore::PendingCallbacks::PendingCharactersCallback::~PendingCharactersCallback):
        (WebCore::PendingCallbacks::PendingCharactersCallback::call):
        (WebCore::PendingCallbacks::PendingProcessingInstructionCallback::~PendingProcessingInstructionCallback):
        (WebCore::PendingCallbacks::PendingProcessingInstructionCallback::call):
        (WebCore::PendingCallbacks::PendingCDATABlockCallback::~PendingCDATABlockCallback):
        (WebCore::PendingCallbacks::PendingCDATABlockCallback::call):
        (WebCore::PendingCallbacks::PendingCommentCallback::~PendingCommentCallback):
        (WebCore::PendingCallbacks::PendingCommentCallback::call):
        (WebCore::PendingCallbacks::PendingInternalSubsetCallback::~PendingInternalSubsetCallback):
        (WebCore::PendingCallbacks::PendingInternalSubsetCallback::call):
        (WebCore::PendingCallbacks::):
        New classes which manage a list of pending SAX callbacks that have not yet
        been sent to the tokenizer.
        
        (WebCore::XMLTokenizer::XMLTokenizer):
        Initialize new member variables.
        
        (WebCore::XMLTokenizer::~XMLTokenizer):
        Delete PendingCallbacks object.
        
        (WebCore::XMLTokenizer::write):
        If the parser is paused, queue the data to be written.
        
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::XMLTokenizer::characters):
        (WebCore::XMLTokenizer::error):
        (WebCore::XMLTokenizer::processingInstruction):
        (WebCore::XMLTokenizer::cdataBlock):
        (WebCore::XMLTokenizer::comment):
        (WebCore::XMLTokenizer::internalSubset):
        If the parser has been paused, queue the callbacks instead.

        (WebCore::XMLTokenizer::handleError):
        New function, called by both ::error and :PendingCallbacks::callAndRemoveFirstCallback
        
        (WebCore::XMLTokenizer::finish):
        (WebCore::XMLTokenizer::pauseParsing):
         Set m_parserPaused to true.
        
        (WebCore::XMLTokenizer::resumeParsing):
        Call the pending callbacks and then parse the pending source.
        
2006-06-20  David Hyatt  <hyatt@apple.com>

        Don't send the custom highlighter callback when painting is disabled.

        Reviewed by harrison

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):

2006-06-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John

        <rdar://problem/4592244> REGRESSION (417.9.3 - 420+): (some?) plain text files have all lines concatenated into one line
        
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::checkBuffer):
        (WebCore::TextTokenizer::TextTokenizer):
        (WebCore::TextTokenizer::write):        
        (WebCore::TextTokenizer::finish):
        Add a text buffer which is used for translation of CR and CRLF to plain LF, 
        like the HTML tokenizer does.

2006-06-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fix crasher on one of the layout tests caused by my recent checkin

        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):

2006-06-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=5499
        Page reload does not send any cache control headers

        Test: http/tests/misc/refresh-headers.php

        * bindings/js/kjs_window.cpp:
        (KJS::LocationFunc::callAsFunction): Call scheduleRefresh() for Location::Reload.

        * page/Frame.h: Add scheduleRefresh(). Don't derive from TransferJob or implement its methods - that was
        used only for storing response HTTP headers, which was an overkill.

        * page/FramePrivate.h: Replace TransferJob with a HashMap for storing response headers.

        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL): Don't needlessly change d->m_cachePolicy. Don't create a TransferJob.
        (WebCore::Frame::stopLoading): Directly access the metadata map, instead of going through a TransferJob.
        (WebCore::Frame::receivedFirstData): Ditto.
        (WebCore::Frame::addMetaData): Ditto.
        (WebCore::Frame::scheduleRefresh): A new function that schedules a refresh, similarly to what
        scheduleRedirection() does.
        (WebCore::Frame::changeLocation): Set request.reload attribute based on the current cache policy.

2006-06-19  Ben Goodger  <bengoodger@gmail.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9501
        Windows build fails with link error CharsetTable not defined

        * platform/make-charset-table.pl:
        (process_iana_charsets): Move test for equality to alias "None" until after
        normalization steps to ensure escape characters in the input data don't
        interfere with processing.  Convert nearby tabs to 4 spaces in this function.

2006-06-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=9488
        "Animated GIFs do not respect transforms in SVG"
        
        http://bugs.webkit.org/show_bug.cgi?id=6946
        "SVG shows invalidation issues in WebKit"
        
        http://www.treebuilder.de/default.asp?file=441875.xml
        "Invalidation issues with "SVG 3d" demo"
        
        http://code.google.com/webstats/2005-12/pages.html
        "SVG text doesn't repaint correctly"

        * kcanvas/KCanvasContainer.cpp:
        (WebCore::KCanvasContainer::computeAbsoluteRepaintRect): Override base class, and apply
        appropriate transforms, so damage rects in transformed SVG content get propagated up properly.
        (WebCore::KCanvasContainer::getAbsoluteRepaintRect): note a FIXME; this method
        seems wrong.
        * kcanvas/KCanvasContainer.h: Prototype new method.

        * css/svg.css: Don't apply overflow:hidden to foreignObject, since that makes it a RenderLayer
        so it paints twice.
        * kcanvas/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint): Transform the damage rect before passing it down to HTML content,
        so everything paints that is supposed to. Also handle opacity here since we won't get layers.
        (WebCore::RenderForeignObject::computeAbsoluteRepaintRect): Override base class, and apply
        appropriate transforms, so damage rects in HTML embedded in SVG get propagated up properly.
        (WebCore::RenderForeignObject::requiresLayer): Never use a RenderLayer.
        (WebCore::RenderForeignObject::layout): Make sure to dirty our previous bounds when layout
        changes, as by transform.
        * kcanvas/RenderForeignObject.h:

        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint): Transform the damage rect when painting. Also handle opacity 
        here since we won't get layers.
        (WebCore::RenderForeignObject::computeAbsoluteRepaintRect): Override base class, and apply
        appropriate transforms, so damage rects in SVG images  get propagated up properly.
        (WebCore::RenderSVGImage::translationForAttributes): New helper method, factored out of below.
        (WebCore::RenderSVGImage::translateForAttributes): Use above.
        (WebCore::RenderSVGImage::requiresLayer): Never use a RenderLayer.
        (WebCore::RenderSVGImage::layout): Make sure to properly dirty the old bounds, accounting
        for transforms.
        (WebCore::RenderSVGImage::relativeBBox): Correct bbox computation.
        * kcanvas/RenderSVGImage.h:

        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint): Transform incoming damage rect. Handle opacity here since we
        won't get a layer.
        (WebCore::RenderSVGText::computeAbsoluteRepaintRect): Apply transforms.
        (WebCore::RenderSVGText::requiresLayer): Never use a RenderLayer.
        (WebCore::RenderSVGText::layout): Make sure to dirty the old bounds.

        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Instead of transforming rect to device space
        and back to user space, do this for the origin and lower right corner of the rect. Otherwise the
        rect will get inflated if user space is rotated or skewed.

        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::layout): Make sure to dirty the old bounds.
        (WebCore::RenderPath::paint): Hhandle opacity here.
        
        Bonus fix:
        
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint): Fix hit testing. Wasn't applying the x/y
        attribute transform.

2006-06-19  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=9500
          Split dom2_eventsimpl.* into separate files (one class per file).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_html.cpp:
        * bindings/js/kjs_window.cpp:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMEvents.mm:
        * bindings/objc/DOMInternal.mm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/mac/FrameMac.mm:
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.cpp: Added.
        * dom/BeforeUnloadEvent.h: Added.
        (WebCore::BeforeUnloadEvent::result):
        * dom/CharacterData.cpp:
        * dom/Clipboard.h: Added.
        (WebCore::Clipboard::~Clipboard):
        * dom/ClipboardEvent.cpp: Added.
        (WebCore::ClipboardEvent::ClipboardEvent):
        * dom/ClipboardEvent.h: Added.
        (WebCore::ClipboardEvent::clipboard):
        * dom/ContainerNode.cpp:
        * dom/Document.cpp:
        * dom/Event.cpp: Added.
        (WebCore::Event::Event):
        (WebCore::Event::initEvent):
        * dom/Event.h: Added.
        (WebCore::):
        (WebCore::Event::):
        (WebCore::Event::type):
        (WebCore::Event::target):
        (WebCore::Event::currentTarget):
        (WebCore::Event::setCurrentTarget):
        (WebCore::Event::eventPhase):
        (WebCore::Event::setEventPhase):
        (WebCore::Event::bubbles):
        (WebCore::Event::cancelable):
        (WebCore::Event::timeStamp):
        (WebCore::Event::stopPropagation):
        (WebCore::Event::propagationStopped):
        (WebCore::Event::defaultPrevented):
        (WebCore::Event::setDefaultHandled):
        (WebCore::Event::defaultHandled):
        (WebCore::Event::preventDefault):
        (WebCore::Event::setDefaultPrevented):
        (WebCore::Event::setCancelBubble):
        (WebCore::Event::getCancelBubble):
        (WebCore::Event::dispatched):
        * dom/EventTargetNode.cpp:
        * dom/KeyboardEvent.cpp: Added.
        (WebCore::KeyboardEvent::KeyboardEvent):
        (WebCore::KeyboardEvent::initKeyboardEvent):
        * dom/KeyboardEvent.h: Added.
        (WebCore::KeyboardEvent::):
        (WebCore::KeyboardEvent::keyIdentifier):
        (WebCore::KeyboardEvent::keyLocation):
        (WebCore::KeyboardEvent::altGraphKey):
        (WebCore::KeyboardEvent::keyEvent):
        * dom/MouseEvent.cpp: Added.
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        (WebCore::MouseEvent::isDragEvent):
        (WebCore::MouseEvent::toElement):
        (WebCore::MouseEvent::fromElement):
        * dom/MouseEvent.h: Added.
        (WebCore::MouseEvent::button):
        (WebCore::MouseEvent::relatedTarget):
        (WebCore::MouseEvent::clipboard):
        * dom/MouseRelatedEvent.cpp: Added.
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * dom/MouseRelatedEvent.h: Added.
        (WebCore::MouseRelatedEvent::screenX):
        (WebCore::MouseRelatedEvent::screenY):
        (WebCore::MouseRelatedEvent::clientX):
        (WebCore::MouseRelatedEvent::clientY):
        (WebCore::MouseRelatedEvent::layerX):
        (WebCore::MouseRelatedEvent::layerY):
        (WebCore::MouseRelatedEvent::offsetX):
        (WebCore::MouseRelatedEvent::offsetY):
        (WebCore::MouseRelatedEvent::isSimulated):
        * dom/MutationEvent.cpp: Added.
        (WebCore::MutationEvent::MutationEvent):
        (WebCore::MutationEvent::initMutationEvent):
        * dom/MutationEvent.h: Added.
        (WebCore::MutationEvent::):
        (WebCore::MutationEvent::relatedNode):
        (WebCore::MutationEvent::prevValue):
        (WebCore::MutationEvent::newValue):
        (WebCore::MutationEvent::attrName):
        (WebCore::MutationEvent::attrChange):
        * dom/RegisteredEventListener.cpp: Added.
        (WebCore::RegisteredEventListener::RegisteredEventListener):
        (WebCore::operator==):
        * dom/RegisteredEventListener.h: Added.
        (WebCore::RegisteredEventListener::eventType):
        (WebCore::RegisteredEventListener::listener):
        (WebCore::RegisteredEventListener::useCapture):
        (WebCore::RegisteredEventListener::removed):
        (WebCore::RegisteredEventListener::setRemoved):
        (WebCore::operator!=):
        * dom/UIEvent.cpp: Added.
        (WebCore::UIEvent::UIEvent):
        (WebCore::UIEvent::initUIEvent):
        * dom/UIEvent.h: Added.
        (WebCore::UIEvent::view):
        (WebCore::UIEvent::detail):
        * dom/UIEventWithKeyState.h: Added.
        (WebCore::UIEventWithKeyState::UIEventWithKeyState):
        (WebCore::UIEventWithKeyState::ctrlKey):
        (WebCore::UIEventWithKeyState::shiftKey):
        (WebCore::UIEventWithKeyState::altKey):
        (WebCore::UIEventWithKeyState::metaKey):
        * dom/WheelEvent.cpp: Added.
        (WebCore::WheelEvent::WheelEvent):
        * dom/WheelEvent.h: Added.
        (WebCore::WheelEvent::isHorizontal):
        (WebCore::WheelEvent::wheelDelta):
        * dom/dom2_eventsimpl.cpp: Removed.
        * dom/dom2_eventsimpl.h: Removed.
        * editing/EditCommand.cpp:
        * editing/SelectionController.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLButtonElement.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLSelectElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/svg/SVGAElement.cpp:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/PlatformWheelEvent.h:
        * platform/mac/ClipboardMac.h:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderTextField.cpp:
        * xml/xmlhttprequest.cpp:

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

        Reviewed by Brady.

        - removed a few empty/unused files Brady found by tracking down the nm error message

        * editing/VisibleRange.cpp: Removed.
        * editing/VisibleRange.h: Removed.
        * kcanvas/KCanvasImage.cpp: Removed.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed VisibleRange.cpp/h.
        * WebCore.xcodeproj/project.pbxproj: Removed VisibleRange.cpp/h and KCanvasImage.cpp.
        * WebCoreSources.bkl: Removed VisibleRange.cpp.

2006-06-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=9492
        Fix or remove window.debug.

        It was only available in newly created windows, and became undefined after changing the URL
        or reloading. Let's try removing it; hopefully, no-one will notice.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScriptIfNeeded): Don't add window.debug.

2006-06-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=8972
        REGRESSION: invalid UTF-8 sequences are not displayed

        Test: LayoutTests/fast/encoding/invalid-UTF-8.html

        * dom/xml_tokenizer.cpp:
        (WebCore::getXHTMLEntity): Properly null-terminate the result. This didn't matter
        before, because the garbage at the end was guaranteed to be invalid UTF-8, and was 
        omitted in appendOmittingUnwanted();

        * platform/StreamingTextDecoder.cpp:
        (WebCore::StreamingTextDecoder::appendOmittingBOM): Only omit BOM characters.
        Renamed back from appendOmittingUnwanted();

        (WebCore::StreamingTextDecoder::convertUsingICU):
        * platform/StreamingTextDecoder.h:
        Update for the above function renaming.

2006-06-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9498
        Remove dead code left in JSHTMLDocument::getOwnPropertySlot() from r14298 (Bug 7838)

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::getOwnPropertySlot): Remove dead code.

2006-06-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by ggaren.

        * manual-tests/redraw-page-cache-visited-links.html: Changed to use DOM mouse event.

2006-06-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by ggaren.

        - Update a manual test for http://bugs.webkit.org/show_bug.cgi?id=9150
          DumpRenderTree should be able to keep URL history during runs

        * manual-tests/redraw-page-cache-visited-links.html: Added note about window.history hack.
        Fixed coordinates for mouse events.  Added call to keepWebHistory().
        * manual-tests/resources/redraw-page-cache-visited-links-2.html: Added note about
        window.history hack.

2006-06-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::ScriptInterpreter):
        Set the default script timeout.
        
        (KJS::ScriptInterpreter::shouldInterruptScript):
        New function which asks the frame if the script should be interrupted.
        
        * bindings/js/kjs_binding.h:
                
        * bindings/js/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate):
        Add calls to startTimeoutCheck/stopTimeoutCheck
        
        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        Add calls to pauseTimeoutCheck/unpauseTimeoutCheck 
        
        (KJS::ScheduledAction::execute):
        Add calls to startTimeoutCheck/stopTimeoutCheck
        
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::shouldInterruptJavaScript):
        New function which asks the bridge if the script should be interrupted.
        
        * bridge/mac/WebCoreFrameBridge.h:
        * page/Frame.h:
        Add function declarations.
        
2006-06-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by ggaren.

        - http://bugs.webkit.org/show_bug.cgi?id=8131
        Some properties and methods of window and document objects cannot be converted to a string

        Most of the properties were already fixed, this just adds adds a prototype to window.debug.

        Test: fast/dom/everything-to-string.html

        * bindings/js/kjs_proxy.cpp:
        (WebCore::TestFunctionImp::TestFunctionImp): 
        (WebCore::KJSProxy::initScriptIfNeeded):

2006-06-17  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Maciej.

        - Fix capitalization issue for case-sensitive filesystems.

        * icon/SQLStatement.cpp: Change assertions.h to Assertions.h.

2006-06-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7395
          Table not properly re-flowed when floated div removed from layout

        Test: fast/block/float/table-relayout.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout): Added marking
        of children that use lineWidth.
        * rendering/RenderBlock.h: Added a FIXME.

2006-06-17  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6282:
        Adding new Option with new Option(text, value, defaultSelected, selected) fails to update selectedIndex

        Update selectedIndex when a new option is added using javascript.

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLSelectCollection::put):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::setOption):
        (WebCore::HTMLSelectElement::setLength):
        * html/HTMLSelectElement.h:

2006-06-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - test for http://bugs.webkit.org/show_bug.cgi?id=9466
          Assertion failure when dragging an image from the document into Safari's address bar

        * manual-tests/reset-initiatedDrag.html: Added.

2006-06-16  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9463
        REGRESSION (r14879): Assertion failure in CSSParser::sinkFloatingSelector()
        (m_floatingSelectors.contains(selector)) in some CSS tests

        * css/CSSGrammar.y: Create CSSSelector for FUNCTION using CSSParser::createFloatingSelector()
        instead of the bare constructor.

2006-06-16  David Harrison  <harrison@apple.com>

        Reviewed by Hatcher.

        <rdar://problem/4565312> Mail has a weird drawing artifact with dotted red lines running across the window

        Problem was that revision lost a check to not draw the markers
        when paintingDisabled().   This led the markers to be drawn when
        the window deactivated, at which time the view happens to be flipped.

        It is similar but not the same as the Mail ToDo highlighting
        issue, which is due to the custom highlight method
        drawing when the focusView is nil.  Mail team knows this
        and has tested the fix.

        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForMisspelling):
        Early return if paintingDisabled().

2006-06-16  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Adjust padding of inner div so text lines up with text fields.
        Adjust height of textarea so it only leaves room for the horizontal
        scrollbar if overflow is set to scroll, or if overflow is set to
        auto and there's no word wrap.

        These changes will be tested by current layout tests when the
        new textarea implementation takes effect.

        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::createDivStyle):
        (WebCore::RenderTextField::calcHeight):

2006-06-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        - fixed <rdar://problem/4590062> crash in marker code with particular set of steps on daringfireball.net

        * dom/Document.cpp:
        (WebCore::Document::addMarker):
        Store [it - markers.begin()] in a local variable before modifying markers, since modifying markers can
        change value of [it - markers.begin()].

2006-06-16  Adele Peterson  <adele@apple.com>

        Reviewed by Alice.

        Added code to draw Cocoa-like border for textareas instead of just using CSS.

        * WebCore.exp:
        * css/html4.css: Sets a 1px solid border.
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * rendering/RenderThemeMac.h: Formatting changes.
        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::paintTextArea):
        Uses new wkDrawBezeledTextArea to draw border.

2006-06-16  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9432
          REGRESSION: crash in capitalization code due to empty-string generated content

        Test: fast/text/capitalize-empty-generated-string.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText): Skip empty-string text renderers when
        looking for the previous character.

2006-06-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi

        <http://bugs.webkit.org/show_bug.cgi?id=8637>
        REGRESSION (11-16-05): Selection gaps left behind after delete

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved): Invalidate the selection so that 
        selection gaps are invalidated.

2006-06-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff and Darin.
        
        Prefer the DWARF debugging symbols format for use in Xcode 2.3.

        * WebCore.xcodeproj/project.pbxproj:

2006-06-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::hasARenderedDescendant):
        (WebCore::CompositeEditCommand::prune): Ascend using the DOM
        (WebCore::CompositeEditCommand::moveParagraphs): Placeholder insertion
        during deletion is fixed, removing the fall back.

2006-06-15  Nicholas Shanks  <contact@nickshanks.com>

        Reviewed by Hyatt, landed by Joost de Valk.

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

        Add support for the :lang pseudo-class.

        * css/CSSGrammar.y:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::operator == ):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        * css/cssparser.cpp:
        (WebCore::CSSParser::lex):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):
        * css/tokenizer.flex:

2006-06-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=9456>
        REGRESSION (417.9.2-420+): Cmd-G doesn't work in Safari after double-click and Cmd-E
        
        * page/Frame.cpp:
        (WebCore::Frame::findString): When comparing the found range with
        what's currently selected a) build a selection with the found
        range to remove collapsed whitespace and b) compare ranges 
        instead of selection objects to ignore the way that the 
        current selection was made (to ignore the base and extent).

2006-06-15  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by mjs.

        http://bugs.webkit.org/show_bug.cgi?id=9382
        IDL files missing copyright/license headers

        Add Apple BSD license and copyright to IDL files.

        * ksvg2/bindings/idl/svg/GetSVGDocument.idl:
        * ksvg2/bindings/idl/svg/SVGAElement.idl:
        * ksvg2/bindings/idl/svg/SVGAnimateColorElement.idl:
        * ksvg2/bindings/idl/svg/SVGAnimateElement.idl:
        * ksvg2/bindings/idl/svg/SVGAnimateTransformElement.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedAngle.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedBoolean.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedEnumeration.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedInteger.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedLengthList.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedNumber.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedNumberList.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedPathData.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedPoints.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedPreserveAspectRatio.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedRect.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedString.idl:
        * ksvg2/bindings/idl/svg/SVGAnimatedTransformList.idl:
        * ksvg2/bindings/idl/svg/SVGAnimationElement.idl:
        * ksvg2/bindings/idl/svg/SVGCircleElement.idl:
        * ksvg2/bindings/idl/svg/SVGClipPathElement.idl:
        * ksvg2/bindings/idl/svg/SVGComponentTransferFunctionElement.idl:
        * ksvg2/bindings/idl/svg/SVGCursorElement.idl:
        * ksvg2/bindings/idl/svg/SVGDOMImplementation.idl:
        * ksvg2/bindings/idl/svg/SVGDefsElement.idl:
        * ksvg2/bindings/idl/svg/SVGDescElement.idl:
        * ksvg2/bindings/idl/svg/SVGElementInstance.idl:
        * ksvg2/bindings/idl/svg/SVGElementInstanceList.idl:
        * ksvg2/bindings/idl/svg/SVGEllipseElement.idl:
        * ksvg2/bindings/idl/svg/SVGEvent.idl:
        * ksvg2/bindings/idl/svg/SVGException.idl:
        * ksvg2/bindings/idl/svg/SVGExternalResourcesRequired.idl:
        * ksvg2/bindings/idl/svg/SVGFEBlendElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEColorMatrixElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEComponentTransferElement.idl:
        * ksvg2/bindings/idl/svg/SVGFECompositeElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEFloodElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEFuncAElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEFuncBElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEFuncGElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEFuncRElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEGaussianBlurElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEImageElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEMergeElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEMergeNodeElement.idl:
        * ksvg2/bindings/idl/svg/SVGFEOffsetElement.idl:
        * ksvg2/bindings/idl/svg/SVGFETileElement.idl:
        * ksvg2/bindings/idl/svg/SVGFETurbulenceElement.idl:
        * ksvg2/bindings/idl/svg/SVGFilterElement.idl:
        * ksvg2/bindings/idl/svg/SVGFilterPrimitiveStandardAttributes.idl:
        * ksvg2/bindings/idl/svg/SVGFitToViewBox.idl:
        * ksvg2/bindings/idl/svg/SVGGElement.idl:
        * ksvg2/bindings/idl/svg/SVGGradientElement.idl:
        * ksvg2/bindings/idl/svg/SVGICCColor.idl:
        * ksvg2/bindings/idl/svg/SVGImageElement.idl:
        * ksvg2/bindings/idl/svg/SVGLangSpace.idl:
        * ksvg2/bindings/idl/svg/SVGLengthList.idl:
        * ksvg2/bindings/idl/svg/SVGLineElement.idl:
        * ksvg2/bindings/idl/svg/SVGLinearGradientElement.idl:
        * ksvg2/bindings/idl/svg/SVGLocatable.idl:
        * ksvg2/bindings/idl/svg/SVGMarkerElement.idl:
        * ksvg2/bindings/idl/svg/SVGNumberList.idl:
        * ksvg2/bindings/idl/svg/SVGPaint.idl:
        * ksvg2/bindings/idl/svg/SVGPathElement.idl:
        * ksvg2/bindings/idl/svg/SVGPathSeg.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegArc.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegClosePath.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoCubic.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoCubicSmooth.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoQuadratic.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoQuadraticSmooth.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegLineto.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegLinetoHorizontal.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegLinetoVertical.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegList.idl:
        * ksvg2/bindings/idl/svg/SVGPathSegMoveto.idl:
        * ksvg2/bindings/idl/svg/SVGPatternElement.idl:
        * ksvg2/bindings/idl/svg/SVGPointList.idl:
        * ksvg2/bindings/idl/svg/SVGPolygonElement.idl:
        * ksvg2/bindings/idl/svg/SVGPolylineElement.idl:
        * ksvg2/bindings/idl/svg/SVGPreserveAspectRatio.idl:
        * ksvg2/bindings/idl/svg/SVGRadialGradientElement.idl:
        * ksvg2/bindings/idl/svg/SVGRectElement.idl:
        * ksvg2/bindings/idl/svg/SVGRenderingIntent.idl:
        * ksvg2/bindings/idl/svg/SVGScriptElement.idl:
        * ksvg2/bindings/idl/svg/SVGSetElement.idl:
        * ksvg2/bindings/idl/svg/SVGStopElement.idl:
        * ksvg2/bindings/idl/svg/SVGStringList.idl:
        * ksvg2/bindings/idl/svg/SVGStylable.idl:
        * ksvg2/bindings/idl/svg/SVGStyleElement.idl:
        * ksvg2/bindings/idl/svg/SVGSwitchElement.idl:
        * ksvg2/bindings/idl/svg/SVGSymbolElement.idl:
        * ksvg2/bindings/idl/svg/SVGTSpanElement.idl:
        * ksvg2/bindings/idl/svg/SVGTests.idl:
        * ksvg2/bindings/idl/svg/SVGTextContentElement.idl:
        * ksvg2/bindings/idl/svg/SVGTextElement.idl:
        * ksvg2/bindings/idl/svg/SVGTextPositioningElement.idl:
        * ksvg2/bindings/idl/svg/SVGTitleElement.idl:
        * ksvg2/bindings/idl/svg/SVGTransformList.idl:
        * ksvg2/bindings/idl/svg/SVGTransformable.idl:
        * ksvg2/bindings/idl/svg/SVGURIReference.idl:
        * ksvg2/bindings/idl/svg/SVGUnitTypes.idl:
        * ksvg2/bindings/idl/svg/SVGUseElement.idl:
        * ksvg2/bindings/idl/svg/SVGViewElement.idl:
        * ksvg2/bindings/idl/svg/SVGZoomAndPan.idl:
        * ksvg2/bindings/idl/svg/SVGZoomEvent.idl:
        * ksvg2/svg/SVGAnimatedLength.idl:

2006-06-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi

        <rdar://problem/4439248>
        REGRESSION(412-417): [RTL] Serious problem with RTL signatures in Mail.app in 10.4.4 (7766)

        * editing/markup.cpp:
        (WebCore::renderedText): Use plainText so that we'll pull rendered text but in DOM order.

2006-06-14  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin

        <http://bugs.webkit.org/show_bug.cgi?id=7580>
        TinyMCE: Implement execCommand(formatBlock, ...)

        * WebCore.xcodeproj/project.pbxproj: Added FormatBlock.{h,cpp} to the project.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.
        * bridge/mac/WebCoreFrameBridge.h: Added WebUndoActions
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraph): Added a preserveStyle bool.
        (WebCore::CompositeEditCommand::moveParagraphs): Ditto.  downstream() the start
        or else we'll move collapsed whitespace and uncollapse it.
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        (WebCore::DeleteSelectionCommand::handleSpecialCaseBRDelete): Don't update m_endingPosition
        because that's removeNode's responsibility.
        (WebCore::updatePositionForNodeRemoval): Added.
        (WebCore::DeleteSelectionCommand::removeNode): Turned removeFullySelectedNode into a virtual
        overload of removeNode so that we can update positions as we remove nodes.
        (WebCore::updatePositionForTextRemoval): Added.
        (WebCore::DeleteSelectionCommand::deleteTextFromNode):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): 
        (WebCore::DeleteSelectionCommand::fixupWhitespace): Got rid of m_trailingWhitespaceValid
        since m_trailingWhitespace is always valid (we update it as we remove nodes).
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::doApply): Leading and trailing spaces should
        be fixed if they have collapsed before merging paragraphs.
        * editing/DeleteSelectionCommand.h:
        * editing/EditAction.h:
        (WebCore::):
        * editing/FormatBlockCommand.cpp: Added.
        (WebCore::FormatBlockCommand::FormatBlockCommand):
        (WebCore::FormatBlockCommand::modifyRange): Similar to InsertListCommand::modifyRange().
        (WebCore::FormatBlockCommand::doApply):
        * editing/FormatBlockCommand.h: Added.
        (WebCore::FormatBlockCommand::editingAction):
        * editing/InsertListCommand.h:
        (WebCore::InsertListCommand::editingAction):
        * editing/JSEditor.cpp:
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag):
        (WebCore::createElement):
        * editing/htmlediting.h:

2006-06-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - fixed <rdar://problem/4586051> 10.4.7 regression: 'Saved and recent' button on mapquest.com does not work

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

2006-06-14  David Hyatt  <hyatt@apple.com>

        Rename RenderSlider to DeprecatedSlider, so that I can start work on
        the new NSView-less slider.

        Reviewed by john

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createRenderer):
        * rendering/DeprecatedSlider.cpp: Added.
        (WebCore::DeprecatedSlider::DeprecatedSlider):
        (WebCore::DeprecatedSlider::calcMinMaxWidth):
        (WebCore::DeprecatedSlider::updateFromElement):
        (WebCore::DeprecatedSlider::valueChanged):
        * rendering/DeprecatedSlider.h: Added.
        (WebCore::DeprecatedSlider::renderName):
        * rendering/RenderSlider.cpp: Removed.
        * rendering/RenderSlider.h: Removed.

2006-06-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Fixed <rdar://problem/4562192> Creating a new DOMHTMLDocument 
        appears challenging.
        
        - Added createHTMLDocument to Objc bindings, fixed up implementation
        to comply with the DOM 2 Candidate Recommendation in which is was defined.
        (It never made the final spec.) Also removed use of deprecatedString,
        to avoid unnecessary killing of puppies.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMImplementation createHTMLDocument:]):
        * bindings/objc/DOMPrivate.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):

2006-06-13  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele.

        fixed <rdar://problem/4457902> HTMLSelectElement.remove() can't handle an option obj being passed to it, results in hang on http://www.ibc-solar.de/www_ibc/fst_solarmonitoring.jsp

        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::callAsFunction):
        support this by converting the argument to an options object
        before passing to remove()

2006-06-13  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix <rdar://problem/4585333> Changing location for weather on yahoo.com home page redirects to another page

        This patch fixes a bug where the event listener cache does not distinguish
        HTML and non-HTML listeners. Incorrect behavior where stopPropagation also
        prevented default masked a case of this bug on the yahoo.com home page until
        we fixed bug 5180 on 2005-10-03.

        Test: fast/events/event-listener-html-non-html-confusion.html

        * bindings/js/kjs_window.h: Add additional listener maps for HTML event listeners.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::~Window): Go through the additional maps when clearing the window object
        pointer in event listeners.
        (KJS::Window::getJSEventListener): Look in the HTML or non-HTML map depending on the
        argument passed.
        (KJS::Window::getJSUnprotectedEventListener): Ditto.

        * bindings/js/kjs_events.cpp:
        (KJS::JSUnprotectedEventListener::JSUnprotectedEventListener): Add to either the HTML
        or non-HTML map depending on the argument passed.
        (KJS::JSUnprotectedEventListener::~JSUnprotectedEventListener): Remove from either the
        HTML or non-HTML map depending on whether the HTML flag is set.
        (KJS::JSEventListener::JSEventListener): More of the same.
        (KJS::JSEventListener::~JSEventListener): Ditto.
        (KJS::JSLazyEventListener::parseCode): Same thing here. In a lazy event listener there
        is not a listener at construction time, thus the code here to put the listener into a
        map needs the HTML vs. non-HTML logic.

2006-06-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/4583892> 10.4.7 regression: Hang occurs when attempting to load search results at mapquest.com

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent): Don't allow
        "load" events to propagate up to the window. We need this quirk to
        avoid site hangs, because they depend on an old Mozilla bug.

2006-06-13  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=9314
        Relative positioned block size doesnt update root layer size

        - take relative positioning into account in leftmost/rightmost/lowestPosition()
        - ignore zero width/height boxes in leftmost/rightmost/lowestPosition()
        - split relativePositionOffset() to x and y functions
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absolutePosition):
        (WebCore::RenderBox::relativePositionOffsetX):
        (WebCore::RenderBox::relativePositionOffsetY):
        (WebCore::RenderBox::lowestPosition):
        (WebCore::RenderBox::rightmostPosition):
        (WebCore::RenderBox::leftmostPosition):
        * rendering/RenderBox.h:
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::lowestPosition):
        (WebCore::RenderFlow::rightmostPosition):
        (WebCore::RenderFlow::leftmostPosition):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetLeft):
        (WebCore::RenderObject::offsetTop):

2006-06-13  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Dave Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=9427
        xml-stylesheet processing instructions outside of the prolog should have no effect.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        Remove todo comment.
        
        * dom/xml_tokenizer.cpp:
        (WebCore::XMLTokenizer::processingInstruction):
        Only check for style sheet if the root element hasn't yet been encountered.

2006-06-13  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=9406
        REGRESSION: fix for bug 9390 broke two layout tests
        
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        Call finished() after setting up the document structure so we'll emit onload events.

2006-06-12  Geoffrey Garen  <ggaren@apple.com>

        build fix -- forgot to svn add this file
        
        * ForwardingHeaders/kjs/SavedBuiltins.h: Added.

2006-06-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej.

        Fixed a bug in append(char) and append(UChar) where our intended copy-on-write semantics was ignored!

        * platform/String.cpp:
        (WebCore::String::append):

2006-06-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by TimO, Maciej.

        - WebCore part of merging InterpreterImp into Interpreter. No test
        because there's no behavior change.
        
        A substantive change here is that ScriptInterpreter::mark must now chain to
        Interpreter::mark, since Interpreter needs to mark the things that
        InterpreterImp used to mark.
        
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):
        * bridge/mac/WebCoreFrameBridge.mm:
        * bridge/mac/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame evaluateWebScript:]):
        * kwq/KWQPageState.mm:

2006-06-12  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej.

        Changed String::ascii() to return a Vector<char> instead of const char*
        This allows us to use it "regularly" as the returned vector will destruct
        and not leak memory like the previous approach.
        We can now do a String.ascii().data() to get a char* buffer instead of 
        String.deprecatedString().ascii().  It doesn't improve the style much but
        dumping the memory-leak issue is a plus.

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::clearDatabase):
        * icon/SQLDatabase.cpp:
        (SQLDatabase::open):
        * icon/SQLStatement.cpp:
        (WebCore::SQLStatement::prepare):
        (WebCore::SQLStatement::step):
        (WebCore::SQLStatement::returnTextResults):
        (WebCore::SQLStatement::returnTextResults16):
        (WebCore::SQLStatement::returnIntResults):
        (WebCore::SQLStatement::returnInt64Results):
        (WebCore::SQLStatement::returnDoubleResults):
        In addition to the changes to the string classes, changed my database code over to the new
        preferred method.

        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::ascii):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::ascii):
        * platform/StringImpl.h:

2006-06-12  Dave Hyatt <hyatt@apple.com>

        Add the notion of a selection foreground color to the engine for
        Win32.  Rename existing selectionColor methods to be
        selectionBackgroundColor instead.

        Change the 60% alpha blend rule for transparent selection to
        instead be a range from 60-80%, with less transparency being
        used as needed to ensure the transformed color more closely
        approximates the original operating system color when blended
        with a white background.

        Reviewed by mjs

        * platform/Color.cpp:
        (WebCore::blend):
        (WebCore::Color::blendWithWhite):
        * platform/Color.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillHorizontalSelectionGap):
        (WebCore::RenderBlock::fillVerticalSelectionGap):
        (WebCore::RenderBlock::fillLeftSelectionGap):
        (WebCore::RenderBlock::fillRightSelectionGap):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor):
        (WebCore::RenderObject::selectionForegroundColor):
        * rendering/RenderObject.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeSelectionBackgroundColor):
        (WebCore::RenderTheme::inactiveSelectionBackgroundColor):
        (WebCore::RenderTheme::platformActiveSelectionBackgroundColor):
        (WebCore::RenderTheme::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderTheme::platformActiveSelectionForegroundColor):
        (WebCore::RenderTheme::platformInactiveSelectionForegroundColor):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeWin::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeWin::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeWin::platformInactiveSelectionForegroundColor):
        * rendering/RenderThemeWin.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2006-06-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        * page/Frame.cpp:
        (WebCore::Frame::markAllMatchesForText):
        Do a "fake" paint here so that the rectangles for the text matches will have been
        computed by the time this method returns.

2006-06-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Levi and Tim Omernick.

        -Added a skeleton sqlite3 icon database file to IconDatabase
        -Added functionality to validate and recreate this icon.db file
        -Fixed some buggys in SQLDatabase.cpp

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::isValidDatabase):
        (WebCore::IconDatabase::clearDatabase):
        (WebCore::IconDatabase::recreateDatabase):
        * icon/IconDatabase.h:

        * icon/SQLStatement.cpp:
        (WebCore::SQLStatement::columnCount):
        (WebCore::SQLStatement::getColumnName):
        (WebCore::SQLStatement::getColumnName16):
        (WebCore::SQLStatement::getColumnText):
        (WebCore::SQLStatement::getColumnText16):
        (WebCore::SQLStatement::getColumnDouble):
        (WebCore::SQLStatement::getColumnInt):
        (WebCore::SQLStatement::getColumnInt64):
        (WebCore::SQLStatement::getColumnBlob):
        -Added checks to make sure we had a valid working sqlite3_statement as the sqlite3_*
        function calls weren't as error-tolerant as documentation advertised
        (maybe differences between the 3.3 docs I looked at and the 3.1.3 version installed on OSX)

2006-06-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Levi.

        -Added SQLite helper wrappers to ease use of SQLite in the IconDatabase.  
        -Changed the base IconDatabase over to this new framework.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreIconDatabaseBridge.mm:
        (-[WebCoreIconDatabaseBridge closeSharedDatabase]):
            -By popular request, removed an annoying log message I'd accidentally left in

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::close):
        (WebCore::IconDatabase::~IconDatabase):
        * icon/IconDatabase.h:
        (WebCore::IconDatabase::isOpen):
            -Changed over IconDatabase from direct sqlite3_* calls to the new SQLDatabase calls

        * icon/SQLDatabase.cpp: Added.
        (SQLDatabase::SQLDatabase):
        (SQLDatabase::open):
        (SQLDatabase::close):
        (SQLDatabase::executeCommand):
        (SQLDatabase::tableExists):
        * icon/SQLDatabase.h: Added.
        (WebCore::SQLDatabase::isOpen):
        (WebCore::SQLDatabase::getPath):
        (WebCore::SQLDatabase::lastError):
        (WebCore::SQLDatabase::lastErrorMsg):
        (WebCore::SQLStatement::isPrepared):
        (WebCore::SQLStatement::lastError):
        (WebCore::SQLStatement::lastErrorMsg):
        * icon/SQLStatement.cpp: Added.
        (WebCore::SQLStatement::SQLStatement):
        (WebCore::SQLStatement::~SQLStatement):
        (WebCore::SQLStatement::prepare):
        (WebCore::SQLStatement::step):
        (WebCore::SQLStatement::finalize):
        (WebCore::SQLStatement::reset):
        (WebCore::SQLStatement::executeCommand):
        (WebCore::SQLStatement::bindBlob):
        (WebCore::SQLStatement::bindText):
        (WebCore::SQLStatement::columnCount):
        (WebCore::SQLStatement::getColumnName):
        (WebCore::SQLStatement::getColumnName16):
        (WebCore::SQLStatement::getColumnText):
        (WebCore::SQLStatement::getColumnText16):
        (WebCore::SQLStatement::getColumnDouble):
        (WebCore::SQLStatement::getColumnInt):
        (WebCore::SQLStatement::getColumnInt64):
        (WebCore::SQLStatement::getColumnBlob):
        (WebCore::SQLStatement::returnTextResults):
        (WebCore::SQLStatement::returnTextResults16):
        (WebCore::SQLStatement::returnIntResults):
        (WebCore::SQLStatement::returnInt64Results):
        (WebCore::SQLStatement::returnDoubleResults):
            -Initial checking of SQLDatabase framework

        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::String):
            -Added an explicit UChar* constructor to our string class as much of sqlite3's UTF16 handling is based on 
            null-terminated UTF16 which we didn't yet support.

2006-06-11  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9408
        Clean build fails with "make: *** No rule to make target `SVGElementFactory.cpp', needed by `all'. Stop"

        * DerivedSources.make: Fix clean builds.

2006-06-11  Darin Adler  <darin@apple.com>

        - another try at fixing Windows

        * loader/CachedResource.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::setData):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoderPrivate::decode):
        (WebCore::GIFImageDecoder::setData):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::setData):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::setData):
        * platform/image-decoders/png/PNGImageDecoder.h:
        s/DeprecatedByteArray/Vector<char>/

2006-06-11  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * platform/cairo/ImageCairo.cpp: (WebCore::Image::loadResource):
        Use Vector<char> instead of DeprecatedByteArray.

        * platform/win/TemporaryLinkStubs.cpp: (KWQServeSynchronousRequest):
        Don't try to return 0 from a function that returns a Vector<char>.

2006-06-11  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Hyatt, tweaked quite a bit and landed by Darin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=8039
          Remove use of DeprecatedArray in favor of new Vector class

        This removes most of the uses of DeprecatedArray and 
        DeprecatedByteArray, with the exception of DeprecatedCString.

        No test cases added because there is no change in
        functionality.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::bufferData):
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::checkNotify):
        (WebCore::CachedImage::shouldStopAnimation):
        * loader/CachedImage.h:
        * loader/CachedObject.cpp:
        (WebCore::CachedObject::bufferData):
        (WebCore::CachedObject::setExpireDate):
        * loader/CachedObject.h:
        (WebCore::CachedObject::setCharset):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::data):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::data):
        (WebCore::CachedXBLDocument::checkNotify):
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::data):
        * loader/CachedXSLStyleSheet.h:
        * loader/Request.cpp:
        (WebCore::Request::Request):
        (WebCore::Request::~Request):
        * loader/Request.h:
        (WebCore::Request::buffer):
        (WebCore::Request::cachedObject):
        (WebCore::Request::docLoader):
        (WebCore::Request::isIncremental):
        (WebCore::Request::setIsIncremental):
        (WebCore::Request::isMultipart):
        (WebCore::Request::setIsMultipart):
        * loader/loader.cpp:
        (WebCore::crossDomain):
        (WebCore::Loader::Loader):
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::receivedAllData):
        (WebCore::Loader::receivedResponse):
        (WebCore::Loader::receivedData):
        (WebCore::Loader::numRequests):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::removeBackgroundDecodingRequest):
        (WebCore::Loader::jobForRequest):
        * platform/Image.cpp:
        (WebCore::Image::setData):
        * platform/Image.h:
        (WebCore::Image::dataBuffer):

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::init):
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::sortMatchedRules):
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::createStyleForElement):
        (WebCore::CSSStyleSelector::createPseudoStyleForElement):
        * css/cssstyleselector.h:
        (WebCore::CSSStyleSelector::addMatchedRule):
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        * dom/xml_tokenizer.cpp:
        (WebCore::OffsetBuffer::OffsetBuffer):
        (WebCore::openFunc):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::index):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectedIndex):
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::length):
        (WebCore::HTMLSelectElement::remove):
        (WebCore::HTMLSelectElement::value):
        (WebCore::HTMLSelectElement::setValue):
        (WebCore::HTMLSelectElement::state):
        (WebCore::HTMLSelectElement::restoreState):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::optionToListIndex):
        (WebCore::HTMLSelectElement::listToOptionIndex):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::notifyOptionSelected):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::listItems):
        * kwq/KWQLoader.h:
        * kwq/KWQLoader.mm:
        (KWQServeSynchronousRequest):
        * kwq/KWQTextStream.cpp:
        (QTextStream::operator<<):
        * kwq/KWQTextStream.h:
        * loader/FormData.cpp:
        (WebCore::FormData::flatten):
        (WebCore::FormData::flattenToString):
        * loader/FormData.h:
        (WebCore::FormDataElement::FormDataElement):
        * platform/DeprecatedString.cpp:
        * platform/DeprecatedString.h:
        * platform/IntPointArray.cpp: Removed.
        * platform/IntPointArray.h: Removed.
        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::toUnicode):
        * platform/TextEncoding.h:
        * platform/cairo/pixman/src/pixregion.c:
        * platform/cg/PathCG.cpp:
        (WebCore::Path::Path):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorder):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::colToEffCol):
        (WebCore::RenderTable::effColToCol):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::setCellWidths):
        * rendering/RenderTableSection.h:
        * rendering/bidi.cpp:
        (WebCore::addMidpoint):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/render_form.cpp:
        (WebCore::RenderSelect::updateFromElement):
        (WebCore::RenderSelect::layout):
        (WebCore::RenderSelect::valueChanged):
        (WebCore::RenderSelect::selectionChanged):
        (WebCore::RenderSelect::updateSelection):
        * rendering/table_layout.cpp:
        (WebCore::FixedTableLayout::layout):
        * rendering/table_layout.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        * xml/xmlhttprequest.h:

2006-06-11  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9394
        Fix no-SVG build

        * DerivedSources.make: Removed tabs. Create empty SVGElementFactory.cpp on no-svg build.
        * ksvg2/bindings/js/JSSVGElementWrapperFactory.cpp: Added #if SVG_SUPPORT/#endif.
        * ksvg2/bindings/js/JSSVGElementWrapperFactory.h: Ditto.
        * ksvg2/bindings/idl/svg/SVGAElement.idl: Add "Conditional=SVG" to all interfaces.
        * ksvg2/bindings/idl/svg/SVGAnimateColorElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimateElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimateTransformElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedAngle.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedBoolean.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedEnumeration.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedInteger.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedLengthList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedNumber.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedNumberList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedPathData.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedPoints.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedPreserveAspectRatio.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedRect.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedString.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimatedTransformList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGAnimationElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGCircleElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGClipPathElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGComponentTransferFunctionElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGCursorElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGDOMImplementation.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGDefsElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGDescElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGElementInstance.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGElementInstanceList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGEllipseElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGEvent.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGException.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGExternalResourcesRequired.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEBlendElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEColorMatrixElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEComponentTransferElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFECompositeElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEFloodElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEFuncAElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEFuncBElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEFuncGElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEFuncRElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEGaussianBlurElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEImageElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEMergeElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEMergeNodeElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFEOffsetElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFETileElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFETurbulenceElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFilterElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFilterPrimitiveStandardAttributes.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGFitToViewBox.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGGElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGGradientElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGICCColor.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGImageElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGLangSpace.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGLengthList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGLineElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGLinearGradientElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGLocatable.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGMarkerElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGNumberList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPaint.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSeg.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegArc.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegClosePath.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoCubic.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoCubicSmooth.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoQuadratic.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegCurvetoQuadraticSmooth.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegLineto.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegLinetoHorizontal.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegLinetoVertical.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPathSegMoveto.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPatternElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPointList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPolygonElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPolylineElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGPreserveAspectRatio.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGRadialGradientElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGRectElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGRenderingIntent.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGScriptElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGSetElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGStopElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGStringList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGStylable.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGStyleElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGSwitchElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGSymbolElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGTSpanElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGTests.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGTextContentElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGTextElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGTextPositioningElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGTitleElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGTransformList.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGTransformable.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGURIReference.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGUnitTypes.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGUseElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGViewElement.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGZoomAndPan.idl: Ditto.
        * ksvg2/bindings/idl/svg/SVGZoomEvent.idl: Ditto.
        * ksvg2/svg/SVGAngle.idl: Ditto.
        * ksvg2/svg/SVGAnimatedLength.idl: Ditto.
        * ksvg2/svg/SVGColor.idl: Ditto.
        * ksvg2/svg/SVGDocument.idl: Ditto.
        * ksvg2/svg/SVGElement.idl: Ditto.
        * ksvg2/svg/SVGEvent.idl: Ditto.
        * ksvg2/svg/SVGLength.idl: Ditto.
        * ksvg2/svg/SVGMatrix.idl: Ditto.
        * ksvg2/svg/SVGNumber.idl: Ditto.
        * ksvg2/svg/SVGPoint.idl: Ditto.
        * ksvg2/svg/SVGRect.idl: Ditto.
        * ksvg2/svg/SVGSVGElement.idl: Ditto.
        * ksvg2/svg/SVGTransform.idl: Ditto.

2006-06-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=9390
        Move full-frame plugins to WebCore
        
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add PluginDocument
        
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::redirectDataToPlugin):
        Call the bridge.
        
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        Add redirectDataToPlugin which is used to redirect incoming data
        to a plugin.
        
        * bridge/mac/WebCoreViewFactory.h:
        Add pluginSupportsMIMEType which returns whether any plugins support a given MIME type.
        
        * dom/DOMImplementation.cpp:
        * dom/DOMImplementation.h:
        Get rid of createTextDocument and just create a text document explicitly when needed.
        
        * dom/Document.h:
        (WebCore::Document::isPluginDocument):
        * loader/PluginDocument.cpp: Added.
        (WebCore::PluginTokenizer::PluginTokenizer):
        (WebCore::PluginTokenizer::wantsRawData):
        (WebCore::PluginTokenizer::write):
        (WebCore::PluginTokenizer::createDocumentStructure):
        (WebCore::PluginTokenizer::writeRawData):
        (WebCore::PluginTokenizer::stopParsing):
        (WebCore::PluginTokenizer::finish):
        (WebCore::PluginTokenizer::isWaitingForScripts):
        (WebCore::PluginDocument::PluginDocument):
        (WebCore::PluginDocument::createTokenizer):
        * loader/PluginDocument.h: Added.
        (WebCore::PluginDocument::isPluginDocument):
        Add PluginDocument.
        
        * page/Frame.cpp:
        (WebCore::Frame::begin):
        Possibly create a plugin document.
        
        * page/Frame.h:
        (WebCore::Frame::redirectDataToPlugin):
        Add declaration.
        
        * platform/PlugInInfoStore.h:
        * platform/mac/PlugInInfoStoreMac.mm:
        (WebCore::PlugInInfoStore::supportsMIMEType):
        Ask WebCoreViewFactory if the MIME type is supported.

2006-06-10  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9334
          Incomplete repaint when changing block from non-positioned to positioned

        Test: fast/repaint/static-to-positioned.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): If changing from static to positioned, repaint
        as static.

2006-06-10  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9193
          REGRESSION: setting an opacity on an element with an outline causes the outline to disappear completely

        Test: fast/layers/opacity-outline.html

        - fix repainting of layer children's outlines that extend beyond the layer

        Test: fast/repaint/layer-child-outline.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::intersectsDamageRect): Account for outlines.
        (WebCore::RenderLayer::absoluteBoundingBox): Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::maximalOutlineSize): Changed to return the view's maximal
        outline size rather than 0 for PaintPhaseChildOutlines.

2006-06-10  Steve Falkenburg  <sfalken@apple.com>

        Fix build break

        * platform/cairo/GraphicsContextCairo.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::scale):

2006-06-10  Geoffrey Garen  <ggaren@apple.com>

        - http://bugs.webkit.org/show_bug.cgi?id=8515
        Linux porting compile bug
        
        Fix by Mike Emmel, Reviewed by Darin.

        * Projects/gdk/webcore-gdk.bkl:
        * WebCoreSources.bkl:
        * css/maketokenizer:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLImageElement.h:
        * icon/IconDatabase.cpp:
        * make-generated-sources.sh:
        * page/Frame.h:
        * page/FramePrivate.h:
        * platform/Cursor.h:
        * platform/FontData.h:
        (WebCore::FontData::getGlyphIndex):
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        * platform/GraphicsContext.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:
        * platform/ScrollView.h:
        * platform/TransferJob.h:
        (WebCore::TransferJob::getInternal):
        * platform/TransferJobInternal.h:
        (WebCore::TransferJobInternal::TransferJobInternal):
        * platform/Widget.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::roundToDevicePixels):
        * webcore-base.bkl:
        * xpath/impl/XPathValue.cpp:

2006-06-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick and Dave Hyatt.

        WebCore support for computing but not highlighting rects for text matches.

        * dom/Document.h:
        added setRenderedRectForMarker() and renderedRectsForMarkers(), and redefined
        MarkerMap to be a hashtable of node -> (pair of vectors), one vector of markers
        and one vector of rects
        
        * dom/Document.cpp:
        (placeholderRectForMarker()):
        new function, returns a recognizable degenerate rect used until a real rect has been set
        (WebCore::Document::addMarker):
        Reworked for new MarkerMap data structure; now adds parallel placeholder rect
        along with marker
        (WebCore::Document::copyMarkers):
        Reworked for new MarkerMap data structure
        (WebCore::Document::removeMarkers):
        Reworked for new MarkerMap data structure; now removed corresponding rect along
        with marker
        (WebCore::Document::markersForNode):
        Reworked for new MarkerMap data structure
        (WebCore::Document::renderedRectsForMarkers):
        New method, returns an array of all non-placeholder rects for the given marker type
        (WebCore::Document::repaintMarkers):
        Reworked for new MarkerMap data structure
        (WebCore::Document::setRenderedRectForMarker):
        New method, sets the rendered rect for a given marker
        (WebCore::Document::shiftMarkers):
        Reworked for new MarkerMap data structure; resets rendered rects to placeholders.
        
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        removed markedTextMatchesAreHighlighted guard; we always want to call paintTextMatchMarker
        now, but sometimes we will end up only computing the rect, not actually highlighting it.
        (Maybe some names should be improved here?)
        (WebCore::InlineTextBox::paintTextMatchMarker):
        Reorganized to move all the code that actually draws into a block that's guarded by
        markedTextMatchesAreHighlighted. The rest of the code computes where the highlight will
        go, and now we always use that computation in order to call setRenderedRectForMarker.

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge rectsForTextMatches]):
        New method, returns an array of NSValues representing NSRects. Gets them
        from Document::renderedRectsForMarkers
        
2006-06-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Eric.

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::put):
        Call WebCore::JSHTMLElement::put so that autogenerated setters will work 
        for HTMLElement.

2006-06-09  Geoffrey Garen  <ggaren@apple.com>

        - Build fix after last JSC check-in (oops!)
        
        * bridge/mac/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame scopeChain]):
        (-[WebCoreScriptCallFrame functionName]):
        (-[WebCoreScriptCallFrame evaluateWebScript:]):

2006-06-09  David Hyatt  <hyatt@apple.com>

        Rename m_isFocused on the frame to m_isActive, since it isn't really
        about focus but is instead about whether or not the top-level window is
        active.

        Pull code that was incorrectly factored into Mac-only code out of FrameMac
        and back up into Frame.

        Reviewed by andersca

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        * page/Frame.cpp:
        (WebCore::Frame::setFocusNodeIfNeeded):
        (WebCore::Frame::isActive):
        (WebCore::Frame::setIsActive):
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):

2006-06-09  David Hyatt  <hyatt@apple.com>

        Rework selection coloring.  Rename displaysWithFocusAttributes
        to isActive.  Move the white-blending code onto the Color API to make
        it more convenient to mutate colors for selection blending.  Eliminate all
        the selection state from the GraphicsContext and move it to the RenderTheme.
        Implement both Win32 and Mac theme selection colors.

        Reviewed by sfalken

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::setIsActive):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge drawRect:]):
        (-[WebCoreFrameBridge setIsActive:]):
        (-[WebCoreFrameBridge selectionColor]):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):
        * page/Frame.cpp:
        (WebCore::Frame::isActive):
        (WebCore::Frame::setIsActive):
        * page/Frame.h:
        * platform/Color.cpp:
        (WebCore::blend):
        (WebCore::Color::blendWithWhite):
        * platform/Color.h:
        (WebCore::Color::hasAlpha):
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate):
        * platform/GraphicsContext.h:
        * platform/mac/GraphicsContextMac.mm:
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::endTransparencyLayer):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillHorizontalSelectionGap):
        (WebCore::RenderBlock::fillVerticalSelectionGap):
        (WebCore::RenderBlock::fillLeftSelectionGap):
        (WebCore::RenderBlock::fillRightSelectionGap):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionColor):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderReplaced.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeSelectionColor):
        (WebCore::RenderTheme::inactiveSelectionColor):
        (WebCore::RenderTheme::platformActiveSelectionColor):
        (WebCore::RenderTheme::platformInactiveSelectionColor):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveSelectionColor):
        (WebCore::RenderThemeMac::platformInactiveSelectionColor):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::platformActiveSelectionColor):
        (WebCore::RenderThemeWin::platformInactiveSelectionColor):
        * rendering/RenderThemeWin.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2006-06-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4549980>
        REGRESSION: "Find Again" can get stuck when searching for string with a trailing space

        * bridge/mac/FrameMac.h: Moved findString to Frame.
        * bridge/mac/FrameMac.mm: Ditto.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge searchFor:direction:caseSensitive:wrap:]): 
        Convert the NSString to a String.
        * editing/JSEditor.cpp: Added execCommand(FindString, ...)
        * editing/Selection.cpp: Added a constructor for Ranges
        (WebCore::Selection::Selection): 
        * editing/Selection.h:
        * page/Frame.cpp:
        (WebCore::Frame::findString): Moved from FrameMac.  Compare a selection created 
        using the found range with the current selection in case the current selection is
        the found range minus some collapsed whitespace on the edges.
        * page/Frame.h:

2006-06-09  Steve Falkenburg  <sfalken@apple.com>

        Fix build break

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * css/MediaQueryEvaluator.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::addRoundedRectClip):
        (GraphicsContext::addInnerRoundedRectClip):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):

2006-06-09  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Hyatt. Tweaked by Maciej. Tweaks reviewed by Beth. 
        Landed by Beth.

        CSS3 Media Queries implementation.
        <http://bugs.webkit.org/show_bug.cgi?id=4127>

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_css.cpp:
        (KJS::DOMMediaList::put):
        (KJS::KJS::DOMMediaListProtoFunc::callAsFunction):
        * bindings/objc/DOMCSS.mm:
        (-[DOMMediaList setMediaText:]):
        (-[DOMMediaList deleteMedium:]):
        (-[DOMMediaList appendMedium:]):
        * css/CSSGrammar.y:
        * css/MediaFeatureNames.cpp: Added.
        (WebCore::MediaFeatureNames::init):
        * css/MediaFeatureNames.h: Added.
        * css/MediaList.cpp:
        (WebCore::MediaList::MediaList):
        (WebCore::MediaList::~MediaList):
        (WebCore::parseMediaDescriptor):
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::mediaText):
        (WebCore::MediaList::setMediaText):
        (WebCore::MediaList::item):
        (WebCore::MediaList::appendMedium):
        (WebCore::MediaList::appendMediaQuery):
        * css/MediaList.h:
        (WebCore::MediaList::MediaList):
        (WebCore::MediaList::length):
        (WebCore::MediaList::mediaQueries):
        * css/MediaQuery.cpp: Added.
        (WebCore::MediaQuery::MediaQuery):
        (WebCore::MediaQuery::~MediaQuery):
        (WebCore::MediaQuery::operator==):
        (WebCore::MediaQuery::cssText):
        * css/MediaQuery.h: Added.
        (WebCore::MediaQuery::):
        (WebCore::MediaQuery::restrictor):
        (WebCore::MediaQuery::expressions):
        (WebCore::MediaQuery::mediaType):
        (WebCore::MediaQuery::append):
        * css/MediaQueryEvaluator.cpp: Added.
        (WebCore::):
        (WebCore::MediaQueryEvaluator):
        (WebCore::MediaQueryEvaluator::~MediaQueryEvaluator):
        (WebCore::MediaQueryEvaluator::mediaTypeMatch):
        (WebCore::applyRestrictor):
        (WebCore::MediaQueryEvaluator::eval):
        (WebCore::parseAspectRatio):
        (WebCore::cmpvalue):
        (WebCore::numberValue):
        (WebCore::colorMediaFeatureEval):
        (WebCore::monochromeMediaFeatureEval):
        (WebCore::device_aspect_ratioMediaFeatureEval):
        (WebCore::gridMediaFeatureEval):
        (WebCore::device_heightMediaFeatureEval):
        (WebCore::device_widthMediaFeatureEval):
        (WebCore::heightMediaFeatureEval):
        (WebCore::widthMediaFeatureEval):
        (WebCore::min_colorMediaFeatureEval):
        (WebCore::max_colorMediaFeatureEval):
        (WebCore::min_monochromeMediaFeatureEval):
        (WebCore::max_monochromeMediaFeatureEval):
        (WebCore::min_device_aspect_ratioMediaFeatureEval):
        (WebCore::max_device_aspect_ratioMediaFeatureEval):
        (WebCore::min_heightMediaFeatureEval):
        (WebCore::max_heightMediaFeatureEval):
        (WebCore::min_widthMediaFeatureEval):
        (WebCore::max_widthMediaFeatureEval):
        (WebCore::min_device_heightMediaFeatureEval):
        (WebCore::max_device_heightMediaFeatureEval):
        (WebCore::min_device_widthMediaFeatureEval):
        (WebCore::max_device_widthMediaFeatureEval):
        (WebCore::createFunctionMap):
        * css/MediaQueryEvaluator.h: Added.
        * css/MediaQueryExp.cpp: Added.
        (WebCore::MediaQueryExp::MediaQueryExp):
        (WebCore::MediaQueryExp::~MediaQueryExp):
        * css/MediaQueryExp.h: Added.
        (WebCore::MediaQueryExp::mediaFeature):
        (WebCore::MediaQueryExp::value):
        (WebCore::MediaQueryExp::operator==):
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::setMedia):
        * css/cssparser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::setupParser):
        (WebCore::CSSParser::parseMediaQuery):
        (WebCore::CSSParser::createFloatingMediaQueryExp):
        (WebCore::CSSParser::sinkFloatingMediaQueryExp):
        (WebCore::CSSParser::createFloatingMediaQueryExpList):
        (WebCore::CSSParser::sinkFloatingMediaQueryExpList):
        (WebCore::CSSParser::createFloatingMediaQuery):
        (WebCore::CSSParser::sinkFloatingMediaQuery):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::init):
        (WebCore::CSSStyleSelector::~CSSStyleSelector):
        (WebCore::CSSStyleSelector::loadDefaultStyle):
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::updateFont):
        (WebCore::CSSStyleSelector::cacheBorderAndBackground):
        (WebCore::CSSStyleSelector::styleRulesForElement):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        * css/cssstyleselector.h:
        * css/maketokenizer:
        * css/tokenizer.flex:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createCSSStyleSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::setStyleSheet):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::childrenChanged):
        * ksvg2/svg/SVGDOMImplementation.cpp:
        (SVGDOMImplementation::createCSSStyleSheet):
        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::childrenChanged):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * platform/Screen.h:
        * platform/mac/ScreenMac.mm:
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):

2006-06-08  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin
        
        <http://bugs.webkit.org/show_bug.cgi?id=4468>
        Implement execCommand(Insert{Un}OrderedList)

        * WebCore.xcodeproj/project.pbxproj: Added InsertListCommand.{h,cpp} to the project.
        * dom/Position.cpp:
        (WebCore::hasRenderedNonAnonymousDescendantsWithHeight): 
        Added. A block with height is only a candidate if this is false.  This should fix the problems
        getting carets into empty blocks.
        (WebCore::Position::inRenderedContent):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::hasARenderedDescendant):
        (WebCore::CompositeEditCommand::prune): A node can have DOM descendants that are rendered, yet
        have a renderer with no descendants.  Fixed the pruning rule to avoid removing a node like this.
        (WebCore::CompositeEditCommand::mergeIdenticalElements): Put the two elements next to
        each other if they aren't already, as a convenience.
        (WebCore::CompositeEditCommand::moveParagraph): Added code to preserve the current selection.
        (WebCore::CompositeEditCommand::moveParagraphs): Ditto. 
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd): Expansion for special elements should
        continue to happen until it is no longer possible.
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): The code to adjust the start node
        wouldn't always avoid removing the start block.
        * editing/InsertListCommand.cpp: Added.
        (WebCore::InsertListCommand::fixOrphanedListChild): Puts a list item that isn't inside a list
        into a list.
        (WebCore::InsertListCommand::InsertListCommand):
        (WebCore::InsertListCommand::modifyRange):
        (WebCore::InsertListCommand::doApply):
        * editing/InsertListCommand.h: Added.
        (WebCore::InsertListCommand::):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/JSEditor.cpp:
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): Don't handle a node if the end of the range used to create the 
        iterator ends at the start of that node.
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):
        * editing/VisiblePosition.h: 
        Added a parameter to next/previous that can prevent them from leaving the current editable region.
        * editing/htmlediting.cpp:
        (WebCore::highestAncestor):
        (WebCore::enclosingList):
        (WebCore::enclosingListChild):
        (WebCore::outermostEnclosingList):
        (WebCore::createListItemElement):
        * editing/htmlediting.h:
        * page/Frame.cpp:
        (WebCore::Frame::selectionListState): Added.
        * page/Frame.h:

2006-06-08  David Harrison  <harrison@apple.com>

        Reviewed by Geoff and John.

        <rdar://problem/4558879> -[DOMCSSPrimitiveValue setStringValue:] throws an exception (12)
        
        Problem was the primitive value was getting reset to a generic state before the parameter
        check that relies on that state.

        Test: fast/dom/setPrimitiveValue.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::setFloatValue):
        (WebCore::CSSPrimitiveValue::setStringValue):
        Move parameter checks ahead of call to cleanup().

2006-06-08  Alice Liu  <alice.liu@apple.com>

        Reviewed by justin.

        - fixed <rdar://problem/4578115> support Range.isPointInRange
        - fixed <rdar://problem/4578123> support Range.comparePoint

        * dom/Range.cpp:
        (WebCore::Range::isPointInRange):
        added implementation
        (WebCore::Range::comparePoint):
        added implementation
        * dom/Range.h:
        added prototypes
        * dom/Range.idl:
        added bindings

2006-06-08  Darin Adler  <darin@apple.com>

        Reviewed by justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8616
          REGRESSION: TinyMCE: Crash on Undo

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getInnerNonSharedNode:innerNode:URLElement:atPoint:allowShadowContent:]):
        Changed to call nodeInfoAtPoint directly.
        (-[WebCoreFrameBridge _visiblePositionForPoint:]): Changed to call nodeInfoAtPoint directly.
        Also added code to convert coordinates so it works for points that are in nodes in subframes.

        * page/Frame.cpp:
        (WebCore::Frame::setMark): Added assertions to catch if we attempt to set selection
        endpoints in another document.
        (WebCore::Frame::setSelection): Ditto.

2006-06-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        Fixed some comments and removed an unused variable.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeBlockPlaceholder):
        Don't remove a br if it isn't at the start of a block, since
        it isn't really a "block placeholder".
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement):
        * editing/htmlediting.cpp:

2006-06-07  David Hyatt  <hyatt@apple.com>

        Add support for custom highlighting.  This is all ifdefed to be Mac-only.

        Reviewed by justin

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::paintCustomHighlight):
        * bridge/mac/WebCoreFrameBridge.h:
        * platform/mac/ClipboardMac.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintCustomHighlight):
        * rendering/InlineTextBox.h:

2006-06-07  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt 

        Added support for cross-platform resize property.

        * platform/PlatformMouseEvent.h: Removed isMouseButtonDown, since we
        already cache this info when we handle mouse down and mouse up.
        * platform/mac/MouseEventMac.mm: ditto.
        * platform/win/TemporaryLinkStubs.cpp: ditto.

        * page/Frame.cpp:
        (WebCore::Frame::autoscrollTimerFired): Use d->m_bMousePressed instead of isMouseButtonDown.
        * page/FrameView.cpp:
        (WebCore::FrameView::handleMouseMoveEvent): Passes event to layer resize method.
        (WebCore::FrameView::mousePressed): Added.
        * page/FrameView.h: Added mousePressed.

        * rendering/RenderTheme.h: Removed paintResizeControl.
        Since its not dependent on the theme, the layer can just paint this.
        * rendering/RenderTheme.cpp: ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Initializes m_resizeCornerImage.
        (WebCore::RenderLayer::~RenderLayer): Deletes m_resizeCornerImage.
        (WebCore::RenderLayer::resize): Uses passed in event instead of creating a new one.
        (WebCore::RenderLayer::paintResizeControl): Now loads and paints the resize image.
        * rendering/RenderLayer.h: Added m_resizeCornerImage.  Important to have one per-layer for when we allow
        more customization.

        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::loadResource): Loads image resources.

2006-06-07  David Hyatt  <hyatt@apple.com>

        Add support for a new property for custom highlighting.  This patch just
        adds support for the parsing of the property.  It doesn't do anything yet.

        Reviewed by beth

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/render_style.cpp:
        (WebCore::StyleCSS3InheritedData::StyleCSS3InheritedData):
        (WebCore::StyleCSS3InheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/render_style.h:
        (WebCore::RenderStyle::highlight):
        (WebCore::RenderStyle::setHighlight):
        (WebCore::RenderStyle::initialHighlight):

2006-06-07  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Fix suggested by Rob Buis. Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9341
          REGRESSION: Repro crash caused by style="font:bold"

        Test: fast/css/font-shorthand-weight-only.html

        * css/cssparser.cpp: (WebCore::CSSParser::parseFont): Revert part of the change
        made to fix bug 5564.

2006-06-07  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9122
          REGRESSION: Incorrect vertical position for text fields in a "display: table" block

        Test: fast/table/text-field-baseline.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::baselinePosition): Do not descend into replaced objects, just
        use their baseline.

2006-06-07  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt (concept) and Darin (some coding details).

        - fix http://bugs.webkit.org/show_bug.cgi?id=4334
          REGRESSION: Flickering when css-hover should change opacity on floating elements

        Pixel test: fast/block/float/nopaint-after-layer-destruction.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setPaintsFloatingObject): Added. Changes the noPaint flag
        in the block's FloatingObject for the given float and calls setChildNeedsLayout.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::blockThatPaintsFloat): Added this helper function.
        (WebCore::RenderBox::setStyle): Added. Calls to setPaintsFloatingObject when a float
        gains or loses its layer.

2006-06-06  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9121
          REGRESSION: [Incremental Repaint] DHTML movement test failures

        Test (repaint): fast/repaint/containing-block-position-change.html

        * manual-tests/containing-block-position-chage.html: Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Unrelated change: fixed typo from
        the RenderCanvas to RenderView rename.
        (WebCore::RenderBlock::removePositionedObject): Added a return immediately
        after removing the object.
        (WebCore::RenderBlock::removePositionedObjects): Added.
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): Added code to remove absolutely positioned
        descendants from the positioned objects list of their current containing block
        when they are going to have a new one as a result of this block's position
        property changing. 
        * rendering/RenderObject.h:
        (WebCore::RenderObject::removePositionedObjects):

2006-06-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi

        * dom/Node.cpp:
        (WebCore::Node::firstDescendant): Added.
        * dom/Node.h:
        * dom/Range.cpp: Added a constructor that takes in Positions.
        (WebCore::Range::Range):
        * dom/Range.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt): 
        Let this function insert children into empty containers.  
        Calls canHaveChildrenForEditing.
        (WebCore::CompositeEditCommand::appendNode): Assert that the parent canHaveChildrenForEditing.
        (WebCore::CompositeEditCommand::moveParagraph): Tell ReplaceSelectionCommand to select the 
        replacement so that moveParagraph's callers have a valid destination after the move.
        * editing/CompositeEditCommand.h: Moved removeFullySelectedNode to DeleteSelectionCommand,
        made deleteTextFromNode virtual so that DeleteSelectionCommand can update it's endingPosition.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand): 
        Removed m_startNode, used a local variable.
        (WebCore::DeleteSelectionCommand::initializeStartEnd): Fixed special element expansion.
        (WebCore::DeleteSelectionCommand::initializePositionData): Compute the endingPosition up
        front and keep track of it as nodes and text are removed.
        (WebCore::DeleteSelectionCommand::handleSpecialCaseBRDelete): Removed use of m_startNode.
        (WebCore::DeleteSelectionCommand::removeFullySelectedNode): Moved from CompositeEditCommand.
        Update m_endingPosition as we remove nodes.
        (WebCore::DeleteSelectionCommand::deleteTextFromNode): 
        Update m_endingPosition as we delete text.
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): Retain the start block.  Cleaned up.
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Recompute m_endingPosition since moveParagraph
        clobbers the old one.
        (WebCore::DeleteSelectionCommand::doApply): Fixed the logic for placeholder insertion after 
        deletion. Make the placeholder decision before we do special element expansion.
        * editing/DeleteSelectionCommand.h:
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): Fixed a bug where an extra br was inserted and cleaned 
        up the code.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Deletion of the current selection should do
        a merge (added a testcase).
        * editing/RebalanceWhitespaceCommand.cpp:
        (WebCore::RebalanceWhitespaceCommand::doUnapply): Remove/insert in a way that will trigger a layout.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Ditto.
        Merge even when the incoming fragment has interchange newlines (added a testcase).
        Merge when the selection being pasted into starts at the start of a block because not
        doing so would leave one or more hanging empty blocks.
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement):
        Rebalance whitespace using rebalanceWhitespaceAt because rebalanceWhitespace requires
        a selection, and a selection can't be created until whitespace has been rebalanced.
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): Added.
        * editing/htmlediting.h:

2006-06-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4570475> Dashboard regions do not scale for 
        non-1.0 scale factors.

        No test cases added since this only affects non-1.0 resolution 
        scale factors.

        * platform/FloatRect.cpp:
        (WebCore::FloatRect::scale): Added new function that scales a 
        rect's origin and size by a given factor.
        * platform/FloatRect.h:
        * platform/IntRect.cpp:
        (WebCore::IntRect::scale): Same as above.
        * platform/IntRect.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addDashboardRegions): After the bounds and 
        clip rects on the Dashboard region have been calculated, get the 
        user space scale factor, and if it is not 1.0, scale the rects.

2006-06-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        - fixed <rdar://problem/4566087> REGRESSION (420+): Crash occurs while completing a find again query at 
        http://www.apple.com/ (RenderObject::repaint(bool))
        
        This wasn't a new problem in the code, but the recent use of DocumentMarkers for find results brought
        it to the surface.

        * dom/Document.h:
        Use a RefPtr<Node> instead of a Node* in MarkerMap, so the node will be retained

        * dom/Document.cpp:
        (WebCore::Document::removeMarkers):
        Add a .get() to compensate for using RefPtr. Also, only repaint if this node actually had a marker
        removed.
        (WebCore::Document::repaintMarkers):
        Add a .get() to compensate for using RefPtr.

2006-06-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9325
        clientWidth/clientHeight on document element in strict mode should return visible frame size
        
        * dom/Element.cpp:
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        If we're the document element, and in strict mode, return the visible size of the frame.
        
2006-06-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John.

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge containsPlugins]):
        * page/Frame.cpp:
        (WebCore::Frame::containsPlugins):
        * page/Frame.h:
        Add containsPlugins function which returns whether a frame contains plugins
        or not.

2006-06-05  Rob Buis  <buis@kde.org>

        Reviewed by mjs.

        http://bugs.webkit.org/show_bug.cgi?id=5564
        'font' shorthand parsing should be more tolerant in quirks mode

        When not in strict mode accept font property specifications
        lacking a font family part, like WinIE does.

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseFont):

2006-06-05  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4567520> Pixel cracks in weather widget at 
        1.83 scaling

        To prevent pixel cracks at non-integral scaling factors, before we 
        call into CG to draw an image, we have to convert the rect to 
        device space, round the origin and size to integers in device 
        space, and convert back to user space. 
        
        No test cases added since this only affects non-1.0 resolution 
        scale factors.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage): drawImage() now 
        takes FloatRects.
        * html/CanvasPattern.cpp:
        (WebCore::patternCallback): Call roundToDevicePixels()
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): drawImage() now 
        takes FloatRects and call roundToDevicePixels()
        * html/CanvasRenderingContext2D.h: drawImage() now takes 
        FloatRects.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint): Call roundToDevicePixels()
        * kcanvas/device/quartz/QuartzSupport.mm:
        (WebCore::debugDumpCGImageToFile): Same as above.
        * platform/GraphicsContext.h:
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Takes care of 
        converting between coordinate spaces and rounding.
        (WebCore::GraphicsContext::drawLineForText):
        * platform/mac/ImageMac.mm: Call roundToDevicePixels()
        (WebCore::Image::draw): Same as above.
        (WebCore::drawPattern): Same as above.

2006-06-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=9310
        Add missing DOM prototypes and other DOM cleanup

        - Added the built-in object prototype to DOM objects that were missing it
        so that primitive operations like == work on them.
        
        - Removed dead EventConstructor class (it's autogenerated now)
        
        - Changed HTML collections to describe themselves as "[object Collection]",
        to match IE.
        
        - Made DOMCSSRule constructor private because JSCSSRule is the class
        to use.
        
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        * bindings/js/kjs_css.cpp:
        (KJS::DOMStyleSheet::DOMStyleSheet):
        (KJS::DOMStyleSheetList::DOMStyleSheetList):
        (KJS::DOMCSSRule::DOMCSSRule):
        (KJS::DOMCSSValue::DOMCSSValue):
        (KJS::toJS):
        (KJS::DOMRGBColor::DOMRGBColor):
        (KJS::getDOMRGBColor):
        (KJS::DOMRect::DOMRect):
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNodeList::DOMNodeList):
        (KJS::DOMExceptionConstructor::DOMExceptionConstructor):
        (KJS::DOMExceptionConstructor::getOwnPropertySlot):
        (KJS::):
        (KJS::DOMNamedNodesCollection::DOMNamedNodesCollection):
        * bindings/js/kjs_dom.h:
        (KJS::DOMNamedNodesCollection::classInfo):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_html.cpp:
        (KJS::):

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

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9031
          REGRESSION: Crash when closing tabs on newegg.com
        - removed a no-longer-needed Win32-specific workaround (not reviewed)

        * bindings/js/kjs_window.cpp: Added include of <wtf/MathExtras.h>.
        (WebCore::floatFeature): Remove WIN32 ifdef around isnan.
        (WebCore::toJS): Add null checks.

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

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9176
          REGRESSION: repro crash in WebCore::StringImpl::hash() const + 28 (StringImpl.h:67)

        Test: fast/loader/link-no-URL.html

        * loader/Cache.h:
        * loader/Cache.cpp:
        (WebCore::Cache::updateCacheStatus): Removed the URL parameter. Instead get the URL
        from the cached object itself. Callers were passing in the wrong URL. When it was a
        null string, it caused the crash mentioned above. But in other cases it may have
        caused some other minor problems as well. Added an assert to catch cases where the
        URL is null (should never happen).
        (WebCore::Cache::requestImage): Changed call site to not pass URL.
        (WebCore::Cache::requestStyleSheet): Ditto.
        (WebCore::Cache::requestScript): Ditto.
        (WebCore::Cache::requestXSLStyleSheet): Ditto.
        (WebCore::Cache::requestXBLDocument): Ditto.

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

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7291
          REGRESSION: delete key does not work in isIndex fields

        * platform/mac/WebCoreTextField.mm:
        (inputElement): Added. Helper function to get the Objective-C wrapper for an
        input element associated with a QTextEdit. Returns nil if the element is not
        an input element. The bug was caused by passing a non-input element to the
        delegate methods.
        (-[KWQTextFieldController controlTextDidBeginEditing:]): Use inputElement
        and don't make the delegate call at all if there is none. This happens only
        with isindex elements; it's not important to have auto-fill work with those.
        (-[KWQTextFieldController controlTextDidEndEditing:]): Ditto.
        (-[KWQTextFieldController controlTextDidChange:]): Ditto.
        (-[KWQTextFieldController control:textShouldEndEditing:]): Ditto.
        (-[KWQTextFieldController control:textView:doCommandBySelector:]): Ditto.
        (-[KWQTextFieldController textView:shouldHandleEvent:]): Ditto.

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

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8995
          memory leak in XPath code -- seen in layout tests
        - fixed malloc error on exit due to SVGDOMImplementation destructor
        - attempted to fix the no-XPATH_SUPPORT build by adding an #if
        - changed around includes and header-file formatting in XPath code

        * bindings/scripts/CodeGeneratorJS.pm: Include PlatformString.h when
        generating the bindings for XPathNSResolver.

        * dom/DOMImplementation.h: Added a virtual destructor for the benefit of
        SVGDOMImplementation.
        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::~DOMImplementation): Added.

        * ksvg2/svg/SVGDOMImplementation.h: Reformatted a bit, removed unneeded declarations.
        * ksvg2/svg/SVGDOMImplementation.cpp:
        (SVGDOMImplementation::~SVGDOMImplementation): Remove commented-out code.
        (SVGDOMImplementation::createDocument): Remove a reference to KDOMView.

        * xpath/XPathExpression.cpp:
        (WebCore::XPathExpression::createExpression): Called release to avoid a tiny bit of
        reference count churn.
        (WebCore::XPathExpression::evaluate): Set exception code explicitly, because the code
        relies on it being 0 when the function succeeds.

        * xpath/XPathResult.cpp:
        (WebCore::InvalidatingEventListener::InvalidatingEventListener): Removed
        unneeded target node data member.
        (WebCore::XPathResult::XPathResult): Updated for enum name changes and
        InvalidatingEventListener name change. Added an assertion.

        * xpath/impl/XPathFunctions.h: Removed the FunctionLibrary class. Changed the parameter
        for createFunction to be a String instead of char*.
        * xpath/impl/XPathFunctions.cpp: Got rid of local implementation of "round", and
        used <wtf/MathExtras.h> instead. Also removed unused Interval::asString. Marked all
        the Interval functions inline.
        (WebCore::XPath::FunSubstring::doEvaluate): Use lround() instead of (long)round().
        (WebCore::XPath::FunLang::doEvaluate): Removed some unneeded temporary String variables.
        Use equalIgnoringCase() instead of calling lower() on two strings.
        (WebCore::XPath::createFunctionMap): Changed how this works so that it's all local to
        this function. Also removed a duplicate entry for the "last" function.
        (WebCore::XPath::createFunction): Changed from a member function to a separate function.
        Also changed so that if the args are not used in the function they are deleted.
        This was one of the sources of the storage leaks.

        * xpath/impl/XPathGrammar.y: Put XPATH_SUPPORT ifdef in. Replaced <num> with values of
        specific types (numop, eqop). Updated for name change from AxisType to Axis. Changed
        tokens that were declared as <str> but weren't actually using the string to be
        declared with no type (PLUS, MINUS, OR, AND, DOTDOT, SLASHSLASH). Replaced use of
        unregisterString, unregisterPredicateVector, and unregisterExpressionVector to
        call delete functions instead that both unregister and delete. Change call sites for
        createFunction to just use the String, removing the deprecatedString().latin1() call
        that is no longer needed. Added a call to unregisterParseNode that was missing in the
        "FilterExpr DescendantOrSelf RelativeLocationPath" production.

        * xpath/impl/XPathParser.h: Changed Token to hold a String, Step::Axis, NumericOp::Opcode,
        and EqTestOp::Opcode. The token ID number tells us which to use. Rearranged to put the private
        part of the Parser class last. Moved a number of private things inside the cpp file.
        * xpath/impl/XPathParser.cpp:
        (WebCore::XPath::charCat): Made this a separate function, instead of a static member.
        (WebCore::XPath::isAxisName): Ditto. Also put the global axis map inside the function,
        allowing use of a map instead of a map pointer.
        (WebCore::XPath::isNodeTypeName): Ditto.
        (WebCore::XPath::Parser::isOperatorContext): Made this const.
        (WebCore::XPath::Parser::makeTokenAndAdvance): Got rid of the "int" version of this.
        By using the actual types, we can safely use overload instead.
        (WebCore::XPath::Parser::lexString): Use substring() instead of deprecatedString().mid().
        (WebCore::XPath::Parser::lexNumber): Ditto.
        (WebCore::XPath::Parser::lexNCName): Changed to return a bool and a String instead of a
        Token. This avoids the hack of using a token value of "ERROR + 1" which I found quite
        confusing and is also a bit more explicit.
        (WebCore::XPath::Parser::lexQName): Ditto.
        (WebCore::XPath::Parser::nextTokenInternal): Changed to adapt to the changes above and
        to remove some unneeded else statements.
        (WebCore::XPath::Parser::lex): Changed the logic that sets up yylval to use the token ID
        to decide what the type is. This matches what the grammar expects, and removes the need
        for the token object to track which part of the value is good and the need to reserve 0
        to have a special meaning.
        (WebCore::XPath::Parser::parseStatement): Added code to delete the predicates and the
        expressions in the predicate and expression vectors. Before, we were only deleting
        the vectors. This was one of the sources of the storage leaks.
        (WebCore::XPath::Parser::deletePredicateVector): Renamed, and changed to delete
        the vector. However this does not delete the predicates in the vector.
        (WebCore::XPath::Parser::deleteExpressionVector): Renamed, and changed to delete
        the vector. However this does not delete the expressions in the vector.
        (WebCore::XPath::Parser::deleteString): Renamed, and changed to delete the string.

        * xpath/impl/XPathPredicate.h:
        * xpath/impl/XPathPredicate.cpp:
        (WebCore::XPath::NumericOp::NumericOp): Changed opcode from an int to an enum, and
        renamed to "opcode" instead of "opCode".
        (WebCore::XPath::NumericOp::doEvaluate): More of the same.
        (WebCore::XPath::EqTestOp::EqTestOp): Ditto.
        (WebCore::XPath::EqTestOp::doEvaluate): Ditto.
        (WebCore::XPath::LogicalOp::LogicalOp): Ditto.
        (WebCore::XPath::LogicalOp::shortCircuitOn): Ditto.
        (WebCore::XPath::Predicate::evaluate): Removed an unneeded "new".

        * xpath/impl/XPathStep.h:
        * xpath/impl/XPathStep.cpp: Renamed AxisType to Axis. Removed unused axisAsString
        function and default constructor.

        * xpath/impl/XPathValue.h: Renamed the type constants to have a Value suffix,
        instead of the underscore suffix used before on NodeVector and String.
        * xpath/impl/XPathValue.cpp: Updated for name change. Added asserts.

        * xpath/impl/XPathVariableReference.cpp: (WebCore::XPath::VariableReference::doEvaluate):
        Use a reference instead of a pointer.

        * xpath/XPathEvaluator.cpp:
        * xpath/XPathEvaluator.h:
        * xpath/XPathExpression.h:
        * xpath/XPathNSResolver.cpp:
        * xpath/XPathNSResolver.h:
        * xpath/XPathNamespace.cpp:
        * xpath/XPathNamespace.h:
        * xpath/XPathResult.h:
        * xpath/impl/XPathExpressionNode.cpp:
        * xpath/impl/XPathExpressionNode.h:
        * xpath/impl/XPathPath.cpp:
        * xpath/impl/XPathPath.h:
        * xpath/impl/XPathUtil.cpp:
        * xpath/impl/XPathUtil.h:
        * xpath/impl/XPathVariableReference.h:
        Reformatted and changed includes around; no substantive changes.

2006-06-04  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by hyatt.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=9213
          Absolutely positioned objects with relatively positioned inline 
          containing blocks are rendered incorrectly

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        * rendering/RenderBox.h:

2006-06-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9035
        document.evaluate and createNSResolver miss on namespaced elements
        
        * xpath/XPathExpression.cpp:
        (WebCore::XPathExpression::createExpression):
        Pass the resolver to the parser.
        
        * xpath/XPathResult.cpp:
        (WebCore::XPathResult::iterateNext):
        Fix off-by-one error.
        
        * xpath/impl/XPathExpressionNode.h:
        (WebCore::XPath::EvaluationContext::EvaluationContext):
        Get rid of the resolver in the evaluation context.
        
        * xpath/impl/XPathGrammar.y:
        Fetch the resolver from the parser. Only return the local name.
        
        * xpath/impl/XPathParser.cpp:        
        (WebCore::XPath::Parser::parseStatement):
        * xpath/impl/XPathParser.h:
        (WebCore::XPath::Parser::resolver):
        Update to hold the resolver.
        
        * xpath/impl/XPathStep.cpp:
        (WebCore::XPath::Step::Step):
        If the parser has stored a namespace URI, set it.
        
        (WebCore::XPath::Step::nodeTestMatches):
        Check namespace URIs.
        
        * xpath/impl/XPathStep.h:
        Add m_namespaceURI.

2006-06-03  Rob Buis  <buis@kde.org>

        Reviewed by mjs.  Tweaked and landed by ddkilzer.

        http://bugs.webkit.org/show_bug.cgi?id=7281
        With java disabled wrong information is displayed.

        Test: fast/replaced/applet-rendering-java-disabled.html

        Match WinIE, render applet content inline when java is
        disabled. 

        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed RenderEmptyApplet.cpp and RenderEmptyApplet.h.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createRenderer):
        * rendering/RenderEmptyApplet.cpp: Removed.
        * rendering/RenderEmptyApplet.h: Removed.

2006-06-03  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9252
          REGRESSION: Very odd roll-over issues (content disappearing)

        Test: fast/dom/HTMLLinkElement/pending-stylesheet-count.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement): If the stylesheet was being
        loaded, call stylesheetLoaded() on the document, to keep the pending stylesheet
        count correct.

2006-06-03  Darin Adler  <darin@apple.com>

        - fix Windows build

        * platform/Widget.h: Moved scaleFactor function out of Apple-specific
        section of the header into the common part.

2006-06-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4537274> HiDPI: <canvas> needs to apply a 
        scale. <canvas> needs to scale itself along with whatever scale 
        factor is set on the window.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createDrawingContext): Get the scale 
        factor and use it to create a larger buffer and to scale the 
        CGContext.
        * platform/Widget.h: Provide a new function that returns the user 
        space scale factor.
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::scaleFactor): Get the scale factor from the 
        window and return it.
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::scaleFactor): Just return 1.0f for now.

2006-06-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by hyatt.

        Don't send empty referrers.  Fixes image load fail on Spinneret default content.

        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJob::start):

2006-06-02  Adele Peterson  <adele@apple.com>

        Reviewed by Darin. 

        Windows theme for textareas.  Also made some formatting changes. 

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):
        (WebCore::RenderThemeWin::paintTextArea):
        * rendering/RenderThemeWin.h:
        (WebCore::RenderThemeWin::supportsHover):

2006-06-02  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Hyatt, checked in by Tim H.

        Explicitly run perl on *.pl files instead of relying
        on Windows shell figuring out which program to run for
        this extention.

        * DerivedSources.make:

2006-06-02  David Carson  <dacarson@gmail.com>

        Reviewed by Hyatt, checked in by Tim H.

        fixes http://bugs.webkit.org/show_bug.cgi?id=9115
        Changed RenderLayer to only render layers that are not
        totally transparent.

        * rendering/RenderLayer.cpp
        (RenderLayer::paintLayer):
        Changed function to also check if the layer is totally transparent
        and if it is, don't bother painting it.

2006-06-02  Rob Buis  <buis@kde.org>

        Reviewed by Hyatt, checked in by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=8223
        WebKit fails to update style on element via DOM

        Handle !important by detecting it and using a different code
        path from normal priority.

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::setProperty):
        * css/CSSStyleDeclaration.h:

2006-06-02  Darin Adler  <darin@apple.com>
        
        Reviewed by Geoff, checked in by Maciej.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=9236
        REGRESSION: focus method does not work on some elements before they are laid out
        
        * dom/Element.cpp: (WebCore::Element::focus): Do the updateLayout call before
        calling isFocusable, since isFocusable looks at the size of the renderer.
        
2006-06-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by darin.

        Platform hookup fixes

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::setTitle):
        (WebCore::FrameWin::setStatusBarText):
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::overrideMediaType):
        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJobWndProc):
        (WebCore::TransferJob::start):
        (WebCore::TransferJob::fileLoadTimer):
        (WebCore::TransferJob::cancel):

2006-06-02  Rémi Zara  <remi_zara@mac.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3379
          attr(X) does not work

        Test: fast/css-generated-content/016.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Don't share style
        if the unique bit is set.
        (WebCore::CSSStyleSelector::applyProperty): When applying the "attr" property,
        set the unique bit and add to m_selectorAttrs.

        * rendering/render_style.cpp: Did a lot of reformatting, and this one real change.
        (WebCore::RenderStyle::RenderStyle): Initialize m_unique to false.

        * rendering/render_style.h:
        (WebCore::RenderStyle::unique): Added. Returns value of m_unique.
        (WebCore::RenderStyle::setUnique): Added. Sets m_unique.

2006-06-02  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by mjs.

        http://bugs.webkit.org/show_bug.cgi?id=9183
        Finish renaming of RenderCanvas to RenderView

        * rendering/RenderView.h: Changed renderName from "RenderCanvas" to "RenderView".

2006-06-01  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * bridge/win/FrameWin.cpp: Added include of Decoder.h.

2006-06-01  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - WebCore doesn't need to load WebKit images any more; removed code for that

        * WebCore.exp: Removed WebCoreImageRendererFactory.
        * WebCore.xcodeproj/project.pbxproj: Removed WebCoreImageRendererFactory.h/mm.
        * bridge/mac/WebCoreFrameBridge.mm: Removed include of WebCoreImageRendererFactory.h.
        * platform/mac/ImageMac.mm: Removed include of WebCoreImageRendererFactory.h.
        * platform/mac/WebCoreImageRendererFactory.h: Removed.
        * platform/mac/WebCoreImageRendererFactory.m: Removed.

2006-06-01  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Geoff, tweaked a bit by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=9064
          Split dom2_traversalimpl.* into separate files (one class per file).

        * WebCore.xcodeproj/project.pbxproj: Updated for new files.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.

        * bindings/js/kjs_traversal.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/objc/DOM.mm:
        * dom/Document.cpp:
        * dom/Document.h:
        Updated includes.

        * dom/NodeFilter.cpp: Added.
        * dom/NodeFilter.h: Added.
        * dom/NodeFilterCondition.cpp: Added.
        * dom/NodeFilterCondition.h: Added.
        * dom/NodeIterator.cpp: Added.
        * dom/NodeIterator.h: Added.
        * dom/Traversal.cpp: Added.
        * dom/Traversal.h: Added.
        * dom/TreeWalker.cpp: Added.
        * dom/TreeWalker.h: Added.

        * dom/dom2_traversalimpl.cpp: Removed.
        * dom/dom2_traversalimpl.h: Removed.

2006-06-01  David Carson  <dacarson@gmail.com>

        Reviewed by Maciej and Adele

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8398
        REGRESSION: LABEL in OPTION element is clobbering display #TEXT
        Patch provided by Darin.
        
        * rendering/RenderSelect.cpp
        (RenderSelect::updateFromElement): 
        Changed to use the containing text by default, and not the label text

2006-06-01  David Carson  <dacarson@gmail.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8646
        Correcting the value returned for window.screen.pixelDepth and
        window.screen.colorDepth
        
        * platform/mac/ScreenMac.mm
        (screenDepth): 
        Changed to return the BitsPerPixelFromDepth rather than the WindowDepth

2006-06-01  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Missed an initialization in my last checkin which caused too many
        resizers to be drawn.

        * rendering/render_style.cpp: (WebCore::resize):
        Initialize resize to RESIZE_NONE.

2006-06-01  Dave Hyatt <hyatt@apple.com>

        Implement form POST using WinINet.  This code is crazy... CRAZY!

        * platform/TransferJobInternal.h:
        (WebCore::TransferJobInternal::TransferJobInternal):
        * platform/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJobWndProc):
        (WebCore::TransferJob::start):

2006-06-01  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=9216
        Implement CSS3 resize property

        * css/html4.css: Sets resize:both for textareas. This won't affect old-style textareas.

        * css/CSSPropertyNames.in: Added resize property.
        * css/cssparser.cpp: (WebCore::CSSParser::parseValue): Added case for CSS_PROP_RESIZE.
        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::applyProperty): ditto.
        * css/CSSComputedStyleDeclaration.cpp: (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): ditto.

        * rendering/render_style.cpp: (WebCore::StyleCSS3InheritedData): Initialize resize.
        * rendering/render_style.h:
        (WebCore::): Added EResize enum.
        (WebCore::RenderStyle::resize):
        (WebCore::RenderStyle::setResize):
        (WebCore::RenderStyle::initialResize):

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Added m_resizeLayer to keep track of a layer that has begun resizing.
        (WebCore::FrameViewPrivate::reset): Reset m_resizeLayer.
        (WebCore::FrameView::handleMousePressEvent): If the mouse was pressed in a layer's resize control, then put the layer into resize mode.
        (WebCore::selectCursor): Updated so we get a pointer cursor for the resize control.
        (WebCore::FrameView::handleMouseMoveEvent): If there's a layer currently resizing, then tell the layer to continue resizing.
        (WebCore::FrameView::handleMouseReleaseEvent): If there's a layer currently resizing, then pull it out of resize mode.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::isPointInScrollbar): Updated so the resize control isn't considered part of the scrollbar.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Initialize m_inResizeMode
        (WebCore::RenderLayer::updateLayerPositions): Calls positionResizeControl.
        (WebCore::RenderLayer::resize): Added. Sets a new width and height based on the current mouse point.
        (WebCore::RenderLayer::isPointInResizeControl): Added.
        (WebCore::RenderLayer::positionResizeControl): Added.
        (WebCore::RenderLayer::positionScrollbars): Calls positionResizeControl.
        (WebCore::RenderLayer::paintScrollbars): Calls positionResizeControl.
        (WebCore::RenderLayer::paintResizeControl): Added.
        (WebCore::RenderLayer::paintLayer): Calls paintResizeControl.
        * rendering/RenderLayer.h: Added m_inResizeMode.
        (WebCore::RenderLayer::resizeControlRect):
        (WebCore::RenderLayer::setResizeControlRect):
        (WebCore::RenderLayer::inResizeMode): Added.
        (WebCore::RenderLayer::setInResizeMode): Added. 

        * platform/mac/ImageMac.mm: (WebCore::Image::loadResource): Moved code from WebImageRendererFactory.  Now loads images from WebCore's resources.
        WebImageRendererFactory is no longer used and should be removed.
        * Resources/missingImage.tiff: Added. Copied from WebKit.
        * WebCore.xcodeproj/project.pbxproj: Added missingImage.tiff
        * loader/Cache.cpp: (WebCore::Cache::init): Updated name from missing_image to missingImage.

        * rendering/RenderTheme.h:
        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::paintResizeControl): Added.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac): Initialize resizeCornerImage.
        (WebCore::RenderThemeMac::paintResizeControl): Paints resizeCornerImage.

2006-06-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej.

        Added the beginnings of sqlite-based code in a WebCore
        based version of the Icon Database.  Right now the code
        is very loosely hooked up through a Bridge and only
        creates an sqlite3 database.

        There are also changes to our String classes to allow appending
        a single character to a String without creating a temporary object.

        * WebCore.exp:
        -Added a symbol export

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreIconDatabaseBridge.h: Added.
        * bridge/mac/WebCoreIconDatabaseBridge.mm: Added.
        (-[WebCoreIconDatabaseBridge openSharedDatabaseWithPath:]):
        (-[WebCoreIconDatabaseBridge closeSharedDatabase]):
        (-[WebCoreIconDatabaseBridge isOpen]):
        -This class will eventually shadow WebIconDatabase but for now
        is a minimal interface to make the sql code live

        * icon: Added.
        * icon/IconDatabase.cpp: Added.
        -This class will eventually resemble WebIconDatabase but for now
        is minimal just to make the sql code live
        (WebCore::IconDatabase::sharedIconDatabase):
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::open):
        -This method calls a mkdir to make sure the target directory
        exists
        (WebCore::IconDatabase::close):
        (WebCore::IconDatabase::~IconDatabase):

        * icon/IconDatabase.h: Added.
        (WebCore::IconDatabase::isOpen):
        * platform/Logging.cpp:
        * platform/Logging.h:
        -Added an IconDatabase logging channel

        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::append):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::append):
        * platform/StringImpl.h:
        -Added append(char) and append(UChar) to allow appending a
        single character without creating a temporary object.  Required
        to facilitate manually adding a null character to a unicode 16
        string

2006-06-01  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Anders.

        - fixed all places in the Canvas to RenderView rename patch where
          view() should have been changed to frameView().

        * kwq/WebCoreAXObject.mm:
        (-[WebCoreAXObject position]):
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderTreeAsText.cpp:
        (externalRepresentation):

2006-06-01  Geoffrey Garen  <ggaren@apple.com>

        Fix by Mitz. Reviewed, tweaked, tested, landed by me.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=9113
        REGRESSION (14581): XMLHttpRequest never calls onreadystatechange with 
        a readystate == 4
        
        An XMLHttpRequest must be added to the DOMObject cache so that its
        DOM implementation object can protect it, and by extension, its event
        listeners.
        
        This design seems slightly backwards to me -- the bindings should know
        about the DOM, not the other way around -- but I'm restoring it for
        now to fix the regression.
        
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::JSXMLHttpRequest):
        (KJS::JSXMLHttpRequest::~JSXMLHttpRequest):

2006-06-01  Anders Carlsson  <acarlsson@apple.com>

        * platform/KURL.cpp:
        (equalIgnoringRef):
        Whoops. Fix build.
        
2006-06-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6309
        multiple problems prevent bookmarking/back button technique for AJAX/DHTML applications from working
        
        * bindings/js/kjs_window.cpp:
        (KJS::Location::put):
        Handle the case where the hash starts with a "#". Also, don't do anything if the previous and new hashes
        are equal.
        
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:        
        (WebCore::BrowserExtensionMac::historyURL):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        New function historyURL which returns the complete URL for a given item in the history.
        
        * page/Frame.cpp:
        (WebCore::Frame::scheduleLocationChange):        
        (WebCore::Frame::scheduleHistoryNavigation):
        If the URL of the new location only differs in the hash, don't schedule the load. Instead, load it
        directly.
        
        * platform/KURL.cpp:
        * platform/KURL.h:
        Add equalsIgnoringRef which returns whether two URLs are equal, ignoring the ref.

2006-06-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9212
        dispatchEvent13.html crashes under GuardMalloc

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::addEventListener):
        (WebCore::EventTargetNode::removeEventListener):        
        (WebCore::EventTargetNode::handleLocalEvents):
        
        (WebCore::EventTargetNode::removeHTMLEventListener):
        (WebCore::EventTargetNode::getHTMLEventListener):
        * dom/EventTargetNode.h:
        Make the list of registered event listeners refcount the listeners
        by using a value list of RefPtr objects.
        
        Set removed flag to true in removeEventListener
        Only invoke event listeners if they don't have the removed flag.
        
        * dom/dom2_eventsimpl.cpp:
        (WebCore::RegisteredEventListener::RegisteredEventListener):
        * dom/dom2_eventsimpl.h:
        Make RegisteredEventListener refcounted.
        
        (WebCore::RegisteredEventListener::removed):
        (WebCore::RegisteredEventListener::setRemoved):
        Add removed flag and getter and setter

2006-06-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4567752> When forwarding a message, pressing TAB key to place caret in body actually selects the entire message instead

        * dom/Element.cpp:
        (WebCore::Element::focus):

2006-06-01  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9144
        Test for Bug 8079 (REGRESSION: Redraw from page cache does not show visited links)

        * manual-tests/redraw-page-cache-visited-links.html: Added.
        * manual-tests/resources/redraw-page-cache-visited-links-2.html: Added.

2006-05-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9124
          Drop shadow obscures "add more stuff" bubble at live.com

        Test: fast/css/find-next-layer.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::findNextLayer): Fixed a bug where this function could reach
        two levels down in the layer tree and return 0.

2006-05-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Geoff.

        - http://bugs.webkit.org/show_bug.cgi?id=9109
          Remove bogus assertion in RenderBlock::tabWidth

        Changed the uninitialized value of m_tabWidth to -1 and removed the
        assertion that it cannot be 0.

        * rendering/RenderBlock.cpp:
        (WebCore:::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::setStyle):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::tabWidth):

2006-05-31  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Hyatt.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=9100
          Absolutely positioned replaced elements with all non-auto
          values are rendered incorrectly

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced): Add support for case when all values are specified.
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced): ditto

2006-05-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9012
          Row height not updated when cell heights change

        Test: fast/table/row-height-recalc.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::setStyle): Mark the section as needing recalculation
        if the height property changed.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::setStyle): Ditto.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::recalcCells): Initialize the grid row height
        to the height of the row element (like addChild() does).

2006-05-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=8969
          REGRESSION: typing in textfield repaints whole web page at gamefaqs.com

        No test possible (no functionality change)

        * dom/Document.cpp:
        (WebCore::Document::updateLayout): Changed to ensure that pending subtree
        layouts are performed too.
        * page/Frame.cpp:
        (WebCore::Frame::forceLayout): Force a full layout.
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::layout): Changed to relayout only the subtree rooted
        at d->layoutRoot if it's non-zero and allowSubtree is true.
        (WebCore::FrameView::scheduleRelayout): Change pending subtree relayout into
        normal relayout by clearing d->layoutRoot and propagating needsLayout to the
        root. 
        (WebCore::FrameView::scheduleRelayoutOfSubtree): Added.
        * page/FrameView.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::markContainingBlocksForLayout): Added scheduleRelayout
        parameter. FrameView passes false to force marking all the way to the root
        when turning a pending subtree relayout into a full relayout. Otherwise,
        marking stops at the first textField (or at the root) and
        relayout of the last object reached is scheduled.
        (WebCore::RenderObject::scheduleRelayout):
        * rendering/RenderObject.h:

2006-05-31  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        patch for <http://bugs.webkit.org/show_bug.cgi?id=8910>
        Bug 8910: Various code cleanups in RenderBox
        
        Clean up with some slight optimizations.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::contentWidth):
        (WebCore::RenderBox::contentHeight):
        (WebCore::RenderBox::setPos):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        * rendering/RenderBox.h:

2006-05-31  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Hyatt.

        patch for <http://bugs.webkit.org/show_bug.cgi?id=8899>
        Bug 8899: Removes some unneeded code from RenderBox
        
        Removes the use of WidthType where not needed to simplify
        the code a little.
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::sizesToIntrinsicWidth):
        (WebCore::RenderBox::calcReplacedWidth):
        (WebCore::RenderBox::calcReplacedWidthUsing):
        (WebCore::RenderBox::calcReplacedHeight):
        (WebCore::RenderBox::calcReplacedHeightUsing):
        * rendering/RenderBox.h:
        (WebCore::):
        (WebCore::RenderBox::renderName):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):

2006-05-31  Rob Buis  <buis@kde.org>

        Reviewed by Geoff.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8455
        selectedIndex for a select after a Form reset() has wrong value

        Make sure the list items are reset properly by selecting
        the first option in case no options have the selected attribute
        set.

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::reset):

2006-05-31  Rob Buis  <buis@kde.org>

        Reviewed by Geoff.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8024
        "Go" button (search) doesn't work at fifa.com (document.all.FormName)

        Allow input elements with name attributes as possible named
        items for document.all.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch):
        (WebCore::HTMLCollection::updateNameCache):

2006-05-31  Dave Hyatt <hyatt@apple.com>

        Adding stubs for BMP/ICO/XBM image decoders.  They don't
        do anything yet though.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder):
        * platform/image-decoders/bmp: Added.
        * platform/image-decoders/bmp/BMPImageDecoder.cpp: Added.
        (WebCore::BMPImageDecoder::isSizeAvailable):
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/bmp/BMPImageDecoder.h: Added.
        * platform/image-decoders/ico: Added.
        * platform/image-decoders/ico/ICOImageDecoder.cpp: Added.
        (WebCore::ICOImageDecoder::isSizeAvailable):
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.h: Added.
        * platform/image-decoders/xbm: Added.
        * platform/image-decoders/xbm/XBMImageDecoder.cpp: Added.
        (WebCore::XBMImageDecoder::isSizeAvailable):
        (WebCore::XBMImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/xbm/XBMImageDecoder.h: Added.

2006-05-31  David Hyatt  <hyatt@apple.com>

        Fix for the gmail tab-focus-stealing bug.

        Reviewed by darin

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::focusWindow):
        (WebCore::FrameMac::unfocusWindow):
        * bridge/mac/WebCoreFrameBridge.h:
        * page/Frame.h:
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::focusWindow):
        * platform/win/WidgetWin.cpp:

2006-05-31  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6755 CSS3: 
        Borders rounded with border-radius don't draw the roundings

        This patch does not draw all of the different border styles 
        perfectly, so I have filed a few followup bugs that I will 
        reference from this Bugzilla.

        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawArc): drawArc() has different 
        parameters now, but mostly this needs to be implemented to match 
        the Mac side later.
        (WebCore::GraphicsContext::addRoundedRectClip): Just a stub. 
        Implement this later.
        (WebCore::GraphicsContext::addInnerRoundedRectClip): Just a stub. 
        Implement this later.
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawArc): drawArc() now handles drawing 
        elliptical arcs as well as circular arcs, it also takes a thickness 
        parameter to draw an arc of a given thickness and draws with the 
        appropriate pen style.
        (WebCore::GraphicsContext::addInnerRoundedRectClip): Adds a clip to 
        the inside of an arc instead of to the outside which is already 
        done by addRoundedClipRect()
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorderArc): Draws the border arcs in 
        the appropriate styles.
        (WebCore::RenderObject::paintBorder): Calls drawBorderArc() when 
        border arcs are needed.
        * rendering/RenderObject.h:

2006-05-30  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Add first-cut SVG JS bindings autogeneration.
        SVGSVGElement and various other support classes are generated.
        Various small style fixes.
        http://bugs.webkit.org/show_bug.cgi?id=4249

        * DerivedSources.make:
        * WebCore+SVG/RGBColor.cpp: Removed.
        * WebCore+SVG/RGBColor.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper): renamed from createJSWrapper
        * bindings/js/JSHTMLElementWrapperFactory.h:
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::DOMNode):
        (KJS::DOMNode::toBoolean):
        (KJS::DOMNode::getOwnPropertySlot):
        (KJS::DOMNode::getValueProperty):
        (KJS::DOMNode::put):
        (KJS::DOMNode::putValueProperty):
        (KJS::DOMNode::toPrimitive):
        (KJS::DOMNode::toString):
        (KJS::DOMNodeProtoFunc::callAsFunction):
        (KJS::toEventTargetNode):
        (KJS::DOMEventTargetNode::getOwnPropertySlot):
        (KJS::DOMEventTargetNode::getValueProperty):
        (KJS::DOMEventTargetNode::put):
        (KJS::DOMEventTargetNode::putValueProperty):
        (KJS::DOMEventTargetNode::setListener):
        (KJS::DOMEventTargetNode::getListener):
        (KJS::DOMEventTargetNode::pushEventHandlerScope):
        (KJS::DOMEventTargetNodeProtoFunc::callAsFunction):
        (KJS::DOMNodeList::toPrimitive):
        (KJS::DOMNodeList::getValueProperty):
        (KJS::DOMNodeList::indexGetter):
        (KJS::DOMNodeList::nameGetter):
        (KJS::DOMNodeList::getOwnPropertySlot):
        (KJS::DOMNodeList::callAsFunction):
        (KJS::DOMNodeListFunc::callAsFunction):
        (KJS::toElement):
        (KJS::toDocumentType):
        (KJS::DOMNamedNodeMap::DOMNamedNodeMap):
        (KJS::DOMNamedNodeMap::~DOMNamedNodeMap):
        (KJS::DOMNamedNodeMap::lengthGetter):
        (KJS::DOMNamedNodeMap::indexGetter):
        (KJS::DOMNamedNodeMap::nameGetter):
        (KJS::DOMNamedNodeMapProtoFunc::callAsFunction):
        (KJS::toJS):
        (KJS::checkNodeSecurity):
        (KJS::getRuntimeObject):
        (KJS::DOMExceptionConstructor::getOwnPropertySlot):
        (KJS::DOMExceptionConstructor::getValueProperty):
        (KJS::getDOMExceptionConstructor):
        (KJS::DOMNamedNodesCollection::DOMNamedNodesCollection):
        (KJS::DOMNamedNodesCollection::lengthGetter):
        (KJS::DOMNamedNodesCollection::indexGetter):
        (KJS::DOMNamedNodesCollection::getOwnPropertySlot):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * dom/Element.h:
        * dom/StyledElement.h:
        * ksvg2/bindings/idl/svg/SVGAngle.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGAnimatedLength.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGColor.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGDocument.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGElement.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGLength.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGMatrix.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGNumber.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGPoint.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGRect.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGSVGElement.idl: Removed.
        * ksvg2/bindings/idl/svg/SVGTransform.idl: Removed.
        * ksvg2/bindings/idl/svg/kdomdefs.idl: Removed.
        * ksvg2/bindings/js: Added.
        * ksvg2/bindings/js/JSSVGNumber.cpp: Added.
        (WebCore::):
        (WebCore::JSSVGNumber::~JSSVGNumber):
        (WebCore::JSSVGNumber::getOwnPropertySlot):
        (WebCore::JSSVGNumber::getValue):
        (WebCore::getJSSVGNumber):
        * ksvg2/bindings/js/JSSVGNumber.h: Added.
        (WebCore::JSSVGNumber::JSSVGNumber):
        (WebCore::JSSVGNumber::classInfo):
        * ksvg2/bindings/js/JSSVGPoint.cpp: Added.
        (WebCore::):
        (WebCore::JSSVGPoint::~JSSVGPoint):
        (WebCore::JSSVGPoint::getOwnPropertySlot):
        (WebCore::JSSVGPoint::getValueProperty):
        (WebCore::getJSSVGPoint):
        (WebCore::toFloatPoint):
        * ksvg2/bindings/js/JSSVGPoint.h: Added.
        (WebCore::JSSVGPoint::JSSVGPoint):
        (WebCore::JSSVGPoint::classInfo):
        (WebCore::JSSVGPoint::):
        (WebCore::JSSVGPoint::impl):
        * ksvg2/bindings/js/JSSVGRect.cpp: Added.
        (WebCore::):
        (WebCore::JSSVGRect::~JSSVGRect):
        (WebCore::JSSVGRect::getOwnPropertySlot):
        (WebCore::JSSVGRect::getValueProperty):
        (WebCore::getJSSVGRect):
        (WebCore::toFloatRect):
        * ksvg2/bindings/js/JSSVGRect.h: Added.
        (WebCore::JSSVGRect::JSSVGRect):
        (WebCore::JSSVGRect::classInfo):
        (WebCore::JSSVGRect::):
        (WebCore::JSSVGRect::impl):
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/events/SVGZoomEvent.cpp:
        (SVGZoomEvent::SVGZoomEvent):
        (SVGZoomEvent::zoomRectScreen):
        (SVGZoomEvent::previousTranslate):
        (SVGZoomEvent::newTranslate):
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/ksvg.h:
        (WebCore::):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::SVGDocumentExtensions):
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions):
        (WebCore::SVGDocumentExtensions::addTimeContainer):
        (WebCore::SVGDocumentExtensions::removeTimeContainer):
        (WebCore::SVGDocumentExtensions::startAnimations):
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAngle.h:
        (WebCore::SVGAngle::):
        * ksvg2/svg/SVGAngle.idl: Added.
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
        (WebCore::SVGAnimateColorElement::handleTimerEvent):
        (WebCore::SVGAnimateColorElement::clampColor):
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.cpp:
        (SVGAnimateElement::SVGAnimateElement):
        (SVGAnimateElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        (WebCore::SVGAnimateTransformElement::parseMappedAttribute):
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        (WebCore::SVGAnimateTransformElement::calculateRotationFromMatrix):
        (WebCore::SVGAnimateTransformElement::initialMatrix):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimatedLength.idl: Added.
        * ksvg2/svg/SVGAnimationElement.cpp:
        (SVGAnimationElement::closeRenderer):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::SVGColor):
        (WebCore::SVGColor::rgbColor):
        (WebCore::SVGColor::setRGBColor):
        (WebCore::SVGColor::setRGBColorICCColor):
        (WebCore::SVGColor::setColor):
        (WebCore::SVGColor::color):
        * ksvg2/svg/SVGColor.h:
        (WebCore::SVGColor::):
        (WebCore::SVGColor::setRGBColor):
        * ksvg2/svg/SVGColor.idl: Added.
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGDescElement.h:
        * ksvg2/svg/SVGDocument.idl: Added.
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::isSupported):
        (WebCore::SVGElement::id):
        (WebCore::SVGElement::setId):
        (WebCore::SVGElement::xmlbase):
        (WebCore::SVGElement::setXmlbase):
        (WebCore::SVGElement::ownerSVGElement):
        (WebCore::SVGElement::viewportElement):
        (WebCore::SVGElement::tryGetAttribute):
        (WebCore::SVGElement::tryGetAttributeNS):
        (WebCore::SVGElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElement.idl: Added.
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGEvent.idl: Added.
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDistantLightElement.h:
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEFuncAElement.h:
        * ksvg2/svg/SVGFEFuncBElement.h:
        * ksvg2/svg/SVGFEFuncGElement.h:
        * ksvg2/svg/SVGFEFuncRElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.h:
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFEPointLightElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFESpotLightElement.h:
        * ksvg2/svg/SVGFETileElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGHelper.cpp:
        (WebCore::SVGHelper::PercentageOfViewport):
        (WebCore::SVGHelper::ParseSeperatedList):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLength.h:
        (WebCore::SVGLength::):
        * ksvg2/svg/SVGLength.idl: Added.
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGLocatable.cpp:
        (SVGLocatable::getBBox):
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMatrix.cpp:
        (SVGMatrix::inverse):
        (SVGMatrix::rotateFromVector):
        * ksvg2/svg/SVGMatrix.h:
        * ksvg2/svg/SVGMatrix.idl: Added.
        * ksvg2/svg/SVGNumber.idl: Added.
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getPointAtLength):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::x):
        (WebCore::SVGPatternElement::y):
        (WebCore::SVGPatternElement::width):
        (WebCore::SVGPatternElement::height):
        (WebCore::SVGPatternElement::pushAttributeContext):
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::notifyClientsToRepaint):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        (WebCore::SVGPatternElement::canvasResource):
        (WebCore::SVGPatternElement::getCTM):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPoint.idl: Added.
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/SVGPolygonElement.h:
        * ksvg2/svg/SVGPolylineElement.h:
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGRect.idl: Added.
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::~SVGSVGElement):
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::currentTranslate):
        (WebCore::SVGSVGElement::unsuspendRedraw):
        (WebCore::SVGSVGElement::getIntersectionList):
        (WebCore::SVGSVGElement::getEnclosureList):
        (WebCore::SVGSVGElement::checkIntersection):
        (WebCore::SVGSVGElement::checkEnclosure):
        (WebCore::SVGSVGElement::createSVGNumber):
        (WebCore::SVGSVGElement::createSVGPoint):
        (WebCore::SVGSVGElement::createSVGRect):
        (WebCore::SVGSVGElement::pauseAnimations):
        (WebCore::SVGSVGElement::unpauseAnimations):
        (WebCore::SVGSVGElement::animationsPaused):
        (WebCore::SVGSVGElement::getCurrentTime):
        (WebCore::SVGSVGElement::setCurrentTime):
        * ksvg2/svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::timeScheduler):
        * ksvg2/svg/SVGSVGElement.idl: Added.
        * ksvg2/svg/SVGScriptElement.h:
        * ksvg2/svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::SVGSetElement):
        (WebCore::SVGSetElement::handleTimerEvent):
        * ksvg2/svg/SVGSetElement.h:
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStyleElement.h:
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGStyledLocatableElement.cpp:
        (SVGStyledLocatableElement::getBBox):
        * ksvg2/svg/SVGStyledLocatableElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (SVGStyledTransformableElement::getBBox):
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGSwitchElement.h:
        * ksvg2/svg/SVGSymbolElement.h:
        * ksvg2/svg/SVGTRefElement.h:
        * ksvg2/svg/SVGTSpanElement.h:
        * ksvg2/svg/SVGTextContentElement.cpp:
        (SVGTextContentElement::getStartPositionOfChar):
        (SVGTextContentElement::getEndPositionOfChar):
        (SVGTextContentElement::getExtentOfChar):
        (SVGTextContentElement::getCharNumAtPosition):
        (SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::getBBox):
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTextPositioningElement.h:
        * ksvg2/svg/SVGTitleElement.h:
        * ksvg2/svg/SVGTransform.h:
        (WebCore::SVGTransform::):
        * ksvg2/svg/SVGTransform.idl: Added.
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGViewElement.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::pauseTimeouts):
        (WebCore::Frame::resumeTimeouts):
        * platform/Color.h:
        * rendering/RenderBR.h:
        * rendering/RenderBox.h:
        (WebCore::RenderBox::renderName):
        * rendering/RenderCanvas.h:
        (WebCore::RenderCanvas::view):
        * rendering/RenderContainer.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::RenderFlow):
        * rendering/RenderInline.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderTextFragment.h:
        (WebCore::RenderTextFragment::contentString):
        * xml/xmlattrs.in: Added.

2006-05-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Fixed <rdar://problem/4559720> window sizing: make javascript window 
        and screen sizing methods and properties work @ HIDPI
        
        The general approach here is to change some ints to floats, make 
        a few key functions that scale between WebView and window/screen 
        coordinates, and change other functions that work with screen 
        coordinates to use the scaling functions for their underlying 
        implementations.

        * manual-tests/window-open-features.html: Removed.
        * manual-tests/window-sizing.html: Added. More test coverage.

        * bindings/js/kjs_window.cpp: Changed ints to floats and IntRects to
        FloatRects, because window coordinates can be fractional when scaled 
        to WebView/DOM coordinates.
        (KJS::floatFeature):
        (KJS::showModalDialog):
        (KJS::Window::getValueProperty):
        (KJS::constrainToVisible):
        (KJS::WindowFunc::callAsFunction):
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow): Removed custom scaling
        code and replaced with calls to Page::windowRect and 
        Page::setWindowRect. Renamed 'page' and 'bridge' to 'pageBridge' and
        'frameBridge,' respectively.
        * bridge/mac/PageMac.mm:
        (WebCore::Page::windowRect): Changed to use scaling
        (WebCore::Page::setWindowRect): ditto
        * bridge/mac/WebCoreFrameBridge.mm:
        (globalPoint):
        * page/Page.h:
        * platform/IntRect.h:
        * platform/Screen.h:
        * platform/mac/MouseEventMac.mm:
        (WebCore::globalPositionForEvent): Changed to use flipScreenPoint
        * platform/mac/ScreenMac.mm:
        (WebCore::flipScreenRect): New key function
        (WebCore::flipScreenPoint): New key function
        (WebCore::scaleScreenRectToView): New key function
        (WebCore::scaleViewRectToScreen): New key function
        (WebCore::screenRect): Changed to use scaling
        (WebCore::usableScreenRect): ditto

        Feeble attempt to preserve Windows build:
        
        * platform/win/ScreenWin.cpp:
        (WebCore::scaleScreenRectToWidget): stub -- doesn't actually scale
        (WebCore::scaleWidgetRectToScreen): ditto
        * bridge/win/PageWin.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::widget):

2006-05-30  David Hyatt  <hyatt@apple.com>

        Rename RenderCanvas to RenderView. Rename canvas(), isCanvas()
        to view(), isView().  Rename the frame view accessor on the old canvas
        from view() to frameView() (to avoid view()->view(), since that just looks
        stupid). :)

        Reviewed by andersca

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_window.cpp:
        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge _setupRootForPrinting:]):
        (-[WebCoreFrameBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        (-[WebCoreFrameBridge selectionColor]):
        (-[WebCoreFrameBridge accessibilityTree]):
        * dom/Document.cpp:
        (WebCore::Document::attach):
        (WebCore::Document::updateSelection):
        (WebCore::Document::prepareMouseEvent):
        * editing/SelectionController.cpp:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::rebuildStops):
        * ksvg2/svg/SVGHelper.cpp:
        (SVGHelper::PercentageOfViewport):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getPointAtLength):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentTranslate):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::view):
        (WebCore::SVGStyledElement::pushAttributeContext):
        * ksvg2/svg/SVGStyledElement.h:
        * kwq/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityShouldUseUniqueId]):
        (-[WebCoreAXObject role]):
        (-[WebCoreAXObject value]):
        (-[WebCoreAXObject position]):
        (-[WebCoreAXObject accessibilityIsIgnored]):
        (-[WebCoreAXObject accessibilityAttributeNames]):
        (-[WebCoreAXObject topView]):
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        * page/Frame.cpp:
        (WebCore::Frame::selectionRect):
        (WebCore::Frame::paint):
        (WebCore::Frame::adjustPageHeight):
        (WebCore::Frame::forceLayoutWithPageWidthRange):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * rendering/AutoTableLayout.cpp:
        (WebCore::shouldScaleColumns):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::setSelectionState):
        (WebCore::RenderBlock::isSelectionRoot):
        (WebCore::RenderBlock::fillInlineSelectionGaps):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::calcBlocminMaxWidth):
        (WebCore::RenderBlock::inRootBlockContext):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBackgroundExtended):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::availableHeightUsing):
        * rendering/RenderCanvas.cpp: Removed.
        * rendering/RenderCanvas.h: Removed.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode):
        * rendering/RenderFileButton.cpp:
        (WebCore::RenderFileButton::RenderFileButton):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::destroy):
        (WebCore::RenderFlow::paintLines):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):
        (WebCore::RenderFrameSet::userResize):
        (WebCore::RenderFrameSet::setResizing):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::stackingContext):
        (WebCore::RenderLayer::enclosingPositionedAncestor):
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::isSubframeCanvas):
        (WebCore::RenderLayer::intersectsDamageRect):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isStackingContext):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::scroll):
        (WebCore::RenderObject::containingBlock):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::draggableNode):
        (WebCore::RenderObject::selectionStartEnd):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::viewRect):
        (WebCore::RenderObject::view):
        (WebCore::RenderObject::container):
        (WebCore::RenderObject::removeFromObjectLists):
        (WebCore::RenderObject::scheduleRelayout):
        (WebCore::RenderObject::imageChanged):
        (WebCore::RenderObject::maximalOutlineSize):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderView):
        * rendering/RenderTextArea.cpp:
        (WebCore::RenderTextArea::RenderTextArea):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintCheckbox):
        (WebCore::RenderThemeMac::paintRadio):
        (WebCore::RenderThemeMac::paintButton):
        * rendering/RenderTreeAsText.cpp:
        (externalRepresentation):
        * rendering/RenderView.cpp: Added.
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::~RenderView):
        (WebCore::RenderView::calcHeight):
        (WebCore::RenderView::calcWidth):
        (WebCore::RenderView::calcMinMaxWidth):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::absolutePosition):
        (WebCore::RenderView::paint):
        (WebCore::RenderView::paintBoxDecorations):
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::getAbsoluteRepaintRect):
        (WebCore::RenderView::computeAbsoluteRepaintRect):
        (WebCore::RenderView::absoluteRects):
        (WebCore::RenderView::selectionRect):
        (WebCore::RenderView::setSelection):
        (WebCore::RenderView::clearSelection):
        (WebCore::RenderView::selectionStartEnd):
        (WebCore::RenderView::updateWidgetPositions):
        (WebCore::RenderView::addWidget):
        (WebCore::RenderView::removeWidget):
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::docHeight):
        (WebCore::RenderView::docWidth):
        (WebCore::RenderView::setBestTruncatedAt):
        * rendering/RenderView.h: Added.
        (WebCore::RenderView::renderName):
        (WebCore::RenderView::isRenderView):
        (WebCore::RenderView::frameView):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget):
        (WebCore::RenderWidget::destroy):
        (WebCore::RenderWidget::updateWidgetPosition):
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::widget):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2006-05-30  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4567776> REGRESSION: window.open() links do not work at www.newarchery.com

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        Set the URL in the ResourceRequest; otherwise, it'll be uninitialized and createNewWindow() will
        not be able to load the URL into a pre-existing frame.

2006-05-30  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Maciej, landed by Beth.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=9137
          Children with percentage heights of absolutely positioned element 
          with height: auto and top and bottom non-auto does not lay out 
          correctly

        Adds special case.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::calcReplacedHeightUsing):

2006-05-30  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Hyatt, landed by Beth.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=9085
          Absolutely positioned objects with 'height': auto and 'top': and
          'bottom': non-auto should not be content based

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):

2006-05-30  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Small amount of svg-related code cleanup.
        No test case possible.

        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGLength.cpp:
        (SVGLength::SVGLength):
        (SVGLength::value):
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMatrix.cpp:
        (SVGMatrix::SVGMatrix):
        (SVGMatrix::copy):
        (SVGMatrix::postMultiply):
        (SVGMatrix::inverse):
        (SVGMatrix::postTranslate):
        (SVGMatrix::postScale):
        (SVGMatrix::postScaleNonUniform):
        (SVGMatrix::postRotate):
        (SVGMatrix::postRotateFromVector):
        (SVGMatrix::postFlipX):
        (SVGMatrix::postFlipY):
        (SVGMatrix::postSkewX):
        (SVGMatrix::postSkewY):
        (SVGMatrix::multiply):
        (SVGMatrix::translate):
        (SVGMatrix::scale):
        (SVGMatrix::scaleNonUniform):
        (SVGMatrix::rotate):
        (SVGMatrix::rotateFromVector):
        (SVGMatrix::flipX):
        (SVGMatrix::flipY):
        (SVGMatrix::skewX):
        (SVGMatrix::skewY):
        (SVGMatrix::setMatrix):
        (SVGMatrix::qmatrix):
        (SVGMatrix::removeScale):
        * ksvg2/svg/SVGMatrix.h:

2006-05-30  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Small amount of bindings-related code cleanup.
        No test case possible.

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSXMLSerializer.cpp:
        (WebCore::JSXMLSerializerConstructorImp::JSXMLSerializerConstructorImp):
        (WebCore::JSXMLSerializerConstructorImp::implementsConstruct):
        (WebCore::JSXMLSerializerConstructorImp::construct):
        (WebCore::):
        (WebCore::JSXMLSerializer::JSXMLSerializer):
        (WebCore::JSXMLSerializerProtoFunc::callAsFunction):
        * bindings/js/JSXMLSerializer.h:
        (WebCore::JSXMLSerializer::toBoolean):
        (WebCore::JSXMLSerializer::classInfo):
        (WebCore::JSXMLSerializer::):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):

2006-05-27  Anders Carlsson  <acarlsson@apple.com>

        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        Correct include file names.

2006-05-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4564296> Mail crashes on Leopard9A184 when I attempt to compose a new message

        * dom/Position.cpp:
        (WebCore::Position::inRenderedContent):
        Removed a candidate at [html, 0].
        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): Added early return when there is no selection.
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): Ditto.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Ditto.
        * editing/Selection.cpp:
        (WebCore::Selection::validate): If visible positions can't be created from the endpoints, 
        then create a null selection.  Not doing this was making editing code think there was
        a valid, editable selection even though there wasn't.
        * editing/UnlinkCommand.cpp:
        (WebCore::UnlinkCommand::doApply): Early return.
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::initDeepPosition): Special case the html/body element boundary.
        It looks like a non-editable/editable boundary since rootEditableElement stops at the body
        even if the html element is editable.

2006-05-26  Adele Peterson  <adele@apple.com>

        Reviewed by Justin.

        Fixes a mistake in my last checkin.  Uses maxDeepOffset to get the end position for
        the textarea's inner div.

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::textWithHardLineBreaks):

2006-05-26  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Added support for wrap=hard for new textarea implementation.

        Tests: fast/forms/textarea-appearance-wrap.html

        * dom/Range.h: Added version of toString that will convert BRs to newlines.
        * dom/Range.cpp: (WebCore::Range::toString):
        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplacementFragment::ReplacementFragment): 
          When in plain-text mode, and a white-space mode that doesn't collapse whitespace, create a fragment with one text node.
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition): Subtract scroll offset so the absolute position for the containing block is correct.
        (WebCore::nextLinePosition): ditto.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForCoordinates): If the position is equal to the left edge of the box,
        make the affinity downstream so the position doesn't jump back to the previous line.
        (WebCore::RenderText::atLineWrap): The logic was reversed here in a recent change.
        If the box is not at a line break, then its at a line wrap.
        (WebCore::RenderText::caretRect): Only go to the next text box if its at a line wrap and the
         affinity is also downstream.  If its upstream, then the correct box is on the current line.
        (WebCore::RenderText::inlineBox): ditto.
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::updateFromElement): multi line controls don't need to check
         valueMatchesRenderer before updating the renderer.  For textareas, the renderer should always try to update.
         This matches our old textarea behavior.
        (WebCore::RenderTextField::text): Pass true to textContent so it converts BRs to newlines.
        (WebCore::RenderTextField::textWithHardLineBreaks): Iterate through the RootLineBoxes to find the soft wraps and replace them with newlines.

2006-05-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=9127
        Invoke capturing event listeners when AT_TARGET
        
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::handleLocalEvents):    
        Invoke capturing event listeners for the AT_TARGET phase. This violates the
        DOM spec but it's what Mozilla does.
        
2006-05-26  David Harrison  <harrison@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4514529> Add a list type parameter and a return value to _increaseSelectionListLevel
        
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        - Renamed ModifySelectionListLevelCommand .cpp and .h to ModifySelectionListLevel .cpp and .h
        
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canIncreaseSelectionListLevel]):
        (-[WebCoreFrameBridge canDecreaseSelectionListLevel]):
        (-[WebCoreFrameBridge increaseSelectionListLevel]):
        (-[WebCoreFrameBridge decreaseSelectionListLevel]):
        - Call functions in IncreaseSelectionListLevelCommand or DecreaseSelectionListLevelCommand instead
        of ModifySelectionListLevelCommand.
        
        (-[WebCoreFrameBridge increaseSelectionListLevelOrdered]):
        (-[WebCoreFrameBridge increaseSelectionListLevelUnordered]):
        - Added.
        
        * editing/ModifySelectionListLevel.cpp: Added.
        - Renamed from ModifySelectionListLevelCommand.cpp
        - Made ModifySelectionListLevelCommand class into a useful base class for new
        classes IncreaseSelectionListLevelCommand and DecreaseSelectionListLevelCommand.
        
        (WebCore::ModifySelectionListLevelCommand::ModifySelectionListLevelCommand):
        (WebCore::getStartEndListChildren):
        (WebCore::ModifySelectionListLevelCommand::insertSiblingNodeRangeBefore):
        (WebCore::ModifySelectionListLevelCommand::appendSiblingNodeRange):
        - ModifySelectionListLevelCommand is base class for IncreaseSelectionListLevelCommand and DecreaseSelectionListLevelCommand
        
        (WebCore::IncreaseSelectionListLevelCommand::IncreaseSelectionListLevelCommand):
        (WebCore::IncreaseSelectionListLevelCommand::listElement):
        (WebCore::canIncreaseListLevel):
        (WebCore::IncreaseSelectionListLevelCommand::doApply):
        (WebCore::IncreaseSelectionListLevelCommand::canIncreaseSelectionListLevel):
        (WebCore::increaseSelectionListLevelWithType):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevel):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelOrdered):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelUnordered):
        - Now a subclass of ModifySelectionListLevelCommand
        - Added Ordered and Unordered increaser functions
        - Increaser functions return the list element that the items were moved into
        
        (WebCore::DecreaseSelectionListLevelCommand::DecreaseSelectionListLevelCommand):
        (WebCore::canDecreaseListLevel):
        (WebCore::DecreaseSelectionListLevelCommand::doApply):
        (WebCore::DecreaseSelectionListLevelCommand::canDecreaseSelectionListLevel):
        (WebCore::DecreaseSelectionListLevelCommand::decreaseSelectionListLevel):
        - No functional changes other than to become a subclass of ModifySelectionListLevelCommand

        * editing/ModifySelectionListLevel.h: Added.
        (WebCore::):
         - Renamed from ModifySelectionListLevelCommand.cpp
       
        * editing/ModifySelectionListLevelCommand.cpp: Removed.
        - Renamed to ModifySelectionListLevel.cpp
        
        * editing/ModifySelectionListLevelCommand.h: Removed.
        - Renamed to ModifySelectionListLevel.h

        * editing/htmlediting.cpp:
        (WebCore::createOrderedListElement):
        (WebCore::createUnorderedListElement):
        * editing/htmlediting.h:

2006-05-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by adele.

        Build fixes/tweaks

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * config.h:
        * ksvg2/scripts/make_names.pl:

2006-05-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by adele.

        Fix build

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * config.h:

2006-05-25  Dave Hyatt <hyatt@apple.com>

        Change default font size for fixed pitch to 13 to match Safari
        on Mac (and every other browser on the planet too).

        Reviewed by adele

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontLinkInterface):

2006-05-25  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele.

        * bindings/js/kjs_html.cpp:
        added bindings
        (KJS::HTMLElementFunction::callAsFunction):
        added case to handle namedItem for select elements
        * bindings/js/kjs_html.h:
        added enum value for bindings
        (KJS::JSHTMLElement::):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::namedItem):
        implemented namedItem method
        * html/HTMLSelectElement.h:
        added prototype for namedItem method

2006-05-25  Dave Hyatt <hyatt@apple.com>

        Make soft hyphens work on Win32 by special casing them
        along with normal hyphens.

        Reviewed by mjs

        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition):

2006-05-25  Dave Hyatt <hyatt@apple.com>

        Implement the fallback method containsCharacters for
        checking if a font has the necessary glyphs to be
        selected as a fallback choide.

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::containsCharacters):

2006-05-25  Dave Hyatt <hyatt@apple.com>

        For now eliminate the logical scale factor from Cairo.
        This enables bitmap fonts like MS Sans Serif to work on
        Win32.

        * platform/cairo/cairo/src/cairo-win32-font.c:
        (cairo_win32_scaled_font_select_font):
        * platform/cairo/cairo/src/cairo-win32-private.h:
        * platform/cairo/font-bug-patch.txt: Removed.
        * platform/cairo/scale-removal.txt: Added.
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/win/FontPlatformData.h:
        * platform/win/GlyphMapWin.cpp:
        (WebCore::GlyphMap::fillPage):

2006-05-25  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt.  Landed by eseidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8848
          TFOOT borders are copied to THEAD and TBODY

        Test: fast/table/border-collapsing/border-collapsing-head-foot.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::sectionAbove): Added.
        (WebCore::RenderTable::sectionBelow): Added.
        (WebCore::RenderTable::cellAbove): Changed to call sectionAbove.
        (WebCore::RenderTable::cellBelow): Changed to call sectionBelow.
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedTopBorder): Changed to call sectionAbove.
        (WebCore::RenderTableCell::collapsedBottomBorder): Changed to call sectionBelow.

2006-05-25  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt.  Landed by eseidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3297
          height property is not honored on table rows

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): Assign the row renderer to the
        grid row.
        (WebCore::RenderTableSection::calcRowHeight): Fix off-by-one index bug
        and add vertical spacing only for grid rows that have a renderer.
        (WebCore::RenderTableSection::recalcCells): Assign row renderers to
        grid rows.

2006-05-25  Rob Buis  <buis@kde.org>

        Reviewed by darin.  Landed by eseidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=5978
        WebKIt+SVG should use SVGDocumentImpl for image/svg+xml

        Make sure SVGDocument is created for standalone svg
        documents.

        * ksvg2/svg/SVGDOMImplementation.cpp:
        (SVGDOMImplementation::instance):
        (SVGDOMImplementation::createDocument):
        * ksvg2/svg/SVGDOMImplementation.h:
        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        (WebCore::SVGDocument::~SVGDocument):
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::isValid):
        * ksvg2/svg/SVGTitleElement.cpp:
        * ksvg2/svg/SVGTitleElement.h:
        * page/Frame.cpp:
        (WebCore::Frame::begin):

2006-05-25  Rob Buis  <buis@kde.org>

        Reviewed by darin.  Landed by eseidel.

        http://bugs.webkit.org/show_bug.cgi?id=5889
        HTMLNames.* should be generated using make_names.pl

        Use a patched make_names.pl to autogenerate HTMLNames.*

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLNames.cpp: Removed.
        * html/HTMLNames.h: Removed.
        * html/HTMLTagNames.in: Added.
        * html/HTMLAttributeNames.in: Added.
        * ksvg2/scripts/make_names.pl:

2006-05-25  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Add "HasIndexGetter" support to bindings autogen system.
        http://bugs.webkit.org/show_bug.cgi?id=9057

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLInputElementBase.cpp:
        * bindings/js/kjs_css.cpp:
        (KJS::toJS):
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNamedNodeMap::getOwnPropertySlot):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSValueList.idl: Added.

2006-05-24  David Hyatt  <hyatt@apple.com>

        Implement font aliasing of family names for Courier/Courier New,
        Arial/Helvetica, and Times/Times New Roman.  This behavior matches
        WinIE and Firefox.

        Reviewed by maciej

        Test cases not really possible, since they would have to rely on people
        not having the fonts installed (so not having installed Office).

        * platform/FontCache.cpp:
        (WebCore::alternateFamilyName):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/FontCache.h:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeLeftoverAnonymousBoxes):

=== WebCore-521.11 ===

2006-05-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by levi
        
        <rdar://problem/4549610> REGRESSION: No initial cursor in Mail reply or Blot document
        <rdar://problem/4560698> Mail is very crashy in Leopard9A182, WebCore::Range::compareBoundaryPoints(WebCore::Node*, int, WebCore::Node*, int)

        * page/Frame.cpp:
        (WebCore::Frame::setSelectionFromNone): Find the body and stick a caret 
        in it.

2006-05-24  Geoffrey Garen  <ggaren@apple.com>

        Rubber stamped by Anders.
        
        Removed meaningless 'dom::' prefix in IDL files.

        * dom/Range.idl:
        * html/CanvasRenderingContext2D.idl:
        * html/HTMLOptionElement.idl:

2006-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by andersca.
        
        - Fixed http://bugs.webkit.org/show_bug.cgi?id=9095
        regression: can't select by setting option.selected to true
        
        'text' and 'selected' were erroneously marked read-only for option elements.
        
        * html/HTMLOptionElement.idl:

2006-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        - WebCore half of fix for <rdar://problem/4557926> TOT REGRESSION: Crash
        occurs when attempting to view image in slideshow mode at
        http://d.smugmug.com/gallery/581716 ( KJS::IfNode::execute
        (KJS::ExecState*) + 312)

        On alternate threads, DOMObjects remain in the
        ScriptInterpreter's cache because they're not collected. So, they
        need an opportunity to mark their children.
        
        I'm not particularly happy with this solution because it fails to
        resolve many outstanding issues with the DOM object cache. Since none
        of those issues is a crasher or a serious compatibility concern,
        and since the behavior of other browsers is not much to go on in this
        case, I've filed <rdar://problem/4561439> about that, and I'm moving 
        on with my life.

        Also added functionality for testing garbage collection from inside
        DumpRenderTree.
        
        Also removed XMLHttpRequest from the DOM object cache because XMLHttpRequest
        objects aren't accessed through the DOM.
        
        Also added JS locking around access to some shared data structures in
        WebCoreJavaScript, even though it probably doesn't matter in practice.

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::JSXMLHttpRequest):
        (KJS::JSXMLHttpRequest::~JSXMLHttpRequest):
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::mark):
        * bindings/js/kjs_binding.h:
        * bridge/mac/WebCoreJavaScript.h:
        * bridge/mac/WebCoreJavaScript.mm:
        (collect):
        (+[WebCoreJavaScript objectCount]):
        (+[WebCoreJavaScript interpreterCount]):
        (+[WebCoreJavaScript protectedObjectCount]):
        (+[WebCoreJavaScript garbageCollect]):
        (+[WebCoreJavaScript garbageCollectOnAlternateThread:]):
        (+[WebCoreJavaScript shouldPrintExceptions]):
        (+[WebCoreJavaScript setShouldPrintExceptions:]):

2006-05-24  Dave Hyatt <hyatt@apple.com>

        Fix the font cache corruption problems on Win32.  Move the
        native font destruction code out of FontPlatformData and
        into FontData.  Implement smallCaps.

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::~FontPlatformData):

2006-05-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9093
        Implement document.scripts
        
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::getValueProperty):
        Return document.scripts() instead of a placeholder object.
        
        * dom/Document.cpp:
        (WebCore::Document::scripts):
        * dom/Document.h:
        Add Document::scripts.
        
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::traverseNextItem):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::):
        Add scripts collection type which traverses all script elements.
        
2006-05-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=9092
        innerText is empty for elements without renderers

        * dom/Node.cpp:
        (WebCore::Node::textContent):
        * dom/Node.h:
        Add optional convertBRsToNewlines argument for textContent.
        
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::innerText):
        If the element doesn't have a renderer, return textContent.

2006-05-24  Dave Hyatt <hyatt@apple.com>

        Fix a bug with the computation of the Cairo glyph offsets
        on the Win32 code path.

        * ChangeLog:
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::add):
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

2006-05-23  Dave Hyatt <hyatt@apple.com>

        Disable some code in Cairo that is attempting to clip
        runs of text to their glyph boundaries, since:

        (a) Why re-measure text again when I just gave you
        the glyph bounds anyway.
        (b) It gets the measurements wrong.

        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::add):
        * platform/cairo/cairo/src/cairo-surface-fallback.c:
        (_cairo_surface_fallback_show_glyphs):
        * platform/cairo/clipping-cleartype-font-bug-patch.txt: Added.
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

2006-05-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Remove the recent idl files from the WebCore target to prevent them
        from being copied into the framework resources.

        * WebCore.xcodeproj/project.pbxproj:

2006-05-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Justin Garcia and Levi Weintraub.
        
        - fixed Bug 9072: REGRESSION: Misspelling marker incorrect in editing/deleting/delete-and-undo.html

        * dom/Document.cpp:
        (WebCore::Document::removeMarkers):
        One more time to get this right, ugh. There is still one case where we don't want to advance the
        iterator, and that's when we remove a marker and do not insert a replacement marker. So I undid
        my previous patch, and added it++ to each of the two cases that insert a replacement marker. Now
        the layout tests pass even with the pixel tests enabled.

2006-05-23  Dave Hyatt <hyatt@apple.com>

        Do an initial implementation of CookieJar on Win32.  No policy
        checking yet and the cookies are just always on.

        Reviewed by mjs

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/win/CookieJarWin.cpp: Added.
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/win/TemporaryLinkStubs.cpp:

2006-05-23  Dave Hyatt <hyatt@apple.com>

        Fix the JS autogeneration for WebCore so that the hashtables
        are correct on Win32.

        Switch to using GetCharWidthI so that we can obtain widths
        for glyphs instead of having to obtain them from UChars.

        Reviewed by eric (autogeneration) and maciej (fonts)

        * bindings/scripts/CodeGeneratorJS.pm:
        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        * platform/FontData.cpp:
        (WebCore::m_smallCapsFontData):
        (WebCore::FontData::widthForGlyph):
        * platform/FontData.h:
        * platform/mac/FontDataMac.mm:
        (-[NSFont WebCore]):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformWidthForGlyph):

2006-05-23  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by Hyatt.

        Cleaned up changes to markup by adding the non-virtual
        nodeNamePreservingCase accessor function.

        * dom/Element.cpp:
        (WebCore::Element::nodeNamePreservingCase):
        * dom/Element.h:
        * editing/markup.cpp:
        (WebCore::startMarkup):
        (WebCore::endMarkup):

2006-05-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders Carlsson.

        * dom/Document.cpp:
        (WebCore::Document::removeMarkers):
        Fix to my previous checkin (which broke a layout test).
        Advance the iterator position every time through the loop; formerly it was not advanced in the 
        case where a marker was actually removed, causing an infinite loop in certain cases. Also
        modified a comment that was confusing the situation by falsely claiming that iterating over a 
        just-inserted node would always be OK.

2006-05-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9017
        Weather2.css incorrectly treated as JavaScript file @ www.live.com
        
        * dom/Element.cpp:
        (WebCore::Element::getAttribute):
        (WebCore::Element::setAttribute):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::hasAttribute):
        Use new getAttributeItem method.
        
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::getNamedItem):
        (WebCore::NamedAttrMap::removeNamedItem):
        Use new getAttributeItem method.
        
        (WebCore::NamedAttrMap::getAttributeItem):
        * dom/NamedAttrMap.h:
        New method which returns the attribute based on the nodeName.

2006-05-22  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by adele.

        * bindings/js/kjs_html.h: simple style cleanup.

=== WebCore-521.10 ===

2006-05-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders Carlsson.
        
        - fixed Bug 9038: Rework Document::TextMarker mechanism to not use deprecated data structures

        Changed Document::markersForNode and Document::MarkerMap to use Vector rather than 
        DeprecatedValueList and DeprecatedValueListIterator.
        
        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::addMarker):
        (WebCore::Document::copyMarkers):
        (WebCore::Document::removeMarkers):
        (WebCore::Document::markersForNode):
        (WebCore::Document::repaintMarkers):
        (WebCore::Document::shiftMarkers):
        
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintAllMarkersOfType):

2006-05-22  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by Eric.
        
        - Fix for http://bugs.webkit.org/show_bug.cgi?id=8393
          <br>s created by createMarkup aren't valid xhtml
          Fixed uppered output from innerHTML

        * editing/markup.cpp:
        (WebCore::startMarkup):
        (WebCore::endMarkup):

2006-05-21  Dave Hyatt <hyatt@apple.com>

        Fix Win32 bustage.   I forgot to add a bunch of files.
        Also tweak some existing functions a bit (just cleanup).

        * platform/FontCache.cpp:
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::getFontData):
        * platform/FontCache.h:
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):

2006-05-21  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=9016
        crash loading live.com in TreeShared::ref because accessing RenderTextField::text() can destroy the RenderTextField

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::text):
        Reverting recent change to user innerText instead of textContent.  For textareas,
        we need a better solution than textContent that also takes newlines into account,
        but this should fix this crasher.

2006-05-21  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * ForwardingHeaders/wtf/MathExtras.h: Added.

2006-05-20  Dave Hyatt <hyatt@apple.com>

        Switch on Cairo-based text rendering on Win32.  This is tracked
        by bug 9019.

        Reviewed by maciej

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * config.h:
        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::normalizeVoicingMarks):
        (WebCore::Font::width):
        * platform/Font.h:
        (WebCore::Font::isRoundingHackCharacter):
        * platform/FontCache.cpp:
        (WebCore::computeHash):
        (WebCore::FontPlatformDataCacheKeyTraits::deletedValue):
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontDataCacheKeyTraits::deletedValue):
        (WebCore::FontDataCacheKeyTraits::emptyValue):
        * platform/FontData.cpp:
        (WebCore::m_smallCapsFontData):
        (WebCore::FontData::widthForGlyph):
        * platform/FontData.h:
        * platform/FontPlatformData.h: Removed.
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::clear):
        (WebCore::GlyphBuffer::glyphs):
        (WebCore::GlyphBuffer::advances):
        (WebCore::GlyphBuffer::swap):
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        * platform/GlyphMap.cpp:
        (WebCore::GlyphMap::locatePage):
        * platform/cairo/cairo/src/cairo-win32-font.c:
        (cairo_win32_scaled_font_select_font):
        * platform/cairo/font-bug-patch.txt: Added.
        * platform/mac/FontDataMac.mm:
        (-[NSFont WebCore]):
        * platform/mac/FontPlatformData.h: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/win/FontDataWin.cpp: Added.
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::containsCharacters):
        (WebCore::FontData::determinePitch):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::m_size):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/win/FontWin.cpp:
        (WebCore::notImplemented):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):

2006-05-20  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=8991
          REGRESSION: missing or broken CSS custom cursors are displayed as 
          a missing image icon

        * page/FrameView.cpp:
        (WebCore::selectCursor): Fallback to CURSOR_AUTO if the image is an error image.
        * manual-tests/custom-cursors.html: Added.

2006-05-20  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9009
          REGRESSION: ToT crash in WebCore at Zap2it

        Test: fast/table/empty-section-crash.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint): Return immediately if the section
        has 0 rows or 0 columns.

2006-05-19  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin.
        
        <http://bugs.webkit.org/show_bug.cgi?id=8931>
        Drag caret not painted for editable sub-frames
        
        Moved the drag caret out of Frame and into Page.
        Only the Frame that contains the drag caret will paint it.

        * editing/SelectionController.h:
        * page/Frame.cpp:
        (WebCore::Frame::dragCaret):
        (WebCore::Frame::setDragCaret):
        (WebCore::Frame::paintDragCaret):
        * page/FramePrivate.h:
        * page/Page.cpp:
        (WebCore::Page::dragCaret):
        (WebCore::Page::setDragCaret):
        * page/Page.h:

2006-05-19  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele.

        * html/HTMLButtonElement.idl:
        added support for HTMLButtonElement.click()

2006-05-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric.

        - Fixed non-autogenerated global constructors to match autogenerated
        ones and FF. (Found this bug while @ the GOOG.)

        (1) They're no longer read-only, so they can be overridden.
        (2) They now have the default object prototype, so they can do things 
        like 'toString' and 'valueOf', necessary for general functionality,
        including my layout test.
        (3) Their prototype properties are now enumerable and not read-only.
        
        * bindings/js/JSDOMParser.cpp:
        (KJS::DOMParserConstructorImp::DOMParserConstructorImp):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestConstructorImp::JSXMLHttpRequestConstructorImp):
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/JSXMLSerializer.cpp:
        (KJS::XMLSerializerConstructorImp::XMLSerializerConstructorImp):
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::XSLTProcessorConstructorImp::XSLTProcessorConstructorImp):
        * bindings/js/kjs_html.cpp:
        (KJS::OptionConstructorImp::OptionConstructorImp):
        (KJS::ImageConstructorImp::ImageConstructorImp):
        * bindings/js/kjs_window.cpp:

2006-05-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=8983
        Autogenerate another 22 HTML classes
        
        Already covered by existing DOM tests.

        * DerivedSources.make:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add new IDL files and generated sources.
        
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        Use JSHTMLImageElement::info in inherits.
        
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSWrapper):
        Add macros for the functions and the code to populate the hash set.
        
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        Delete old cruft.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        Add support for creating a JS object from a HTMLCollection.
        
        * html/HTMLAreaElement.idl: Added.
        * html/HTMLBRElement.idl: Added.
        * html/HTMLBaseFontElement.idl: Added.
        * html/HTMLBlockquoteElement.idl: Added.
        
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):
        (WebCore::HTMLBodyElement::scrollHeight):
        (WebCore::HTMLBodyElement::scrollWidth):        
        * html/HTMLBodyElement.h:
        Add new functions that used to be implemented in kjs_html.cpp
        
        * html/HTMLBodyElement.idl: Added.
        * html/HTMLFieldSetElement.idl: Added.
        * html/HTMLFontElement.idl: Added.
        * html/HTMLHRElement.idl: Added.
        * html/HTMLHeadingElement.idl: Added.
        * html/HTMLImageElement.idl: Added.
        * html/HTMLIsIndexElement.idl: Added.
        * html/HTMLLIElement.idl: Added.
        * html/HTMLLabelElement.idl: Added.
        * html/HTMLLegendElement.idl: Added.
        * html/HTMLMapElement.idl: Added.
        * html/HTMLMenuElement.idl: Added.
        * html/HTMLModElement.idl: Added.
        * html/HTMLParagraphElement.idl: Added.
        * html/HTMLParamElement.idl: Added.
        * html/HTMLPreElement.idl: Added.
        * html/HTMLQuoteElement.idl: Added.
        * html/HTMLScriptElement.idl: Added.

2006-05-18  David Hyatt  <hyatt@apple.com>

        Turn off responding to font changes while running.  It doesn't work
        right anyway.

        Reviewed by darin

        * platform/FontCache.cpp:
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/FontCache.h:
        * platform/GlyphMap.h:
        (WebCore::GlyphMap::~GlyphMap):
        * platform/GlyphWidthMap.h:
        (WebCore::GlyphWidthMap::~GlyphWidthMap):
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::platformInit):

2006-05-18  Darin Adler  <darin@apple.com>

        - try to fix the Windows build

        * platform/TextEncoding.h: Changed a ";" to a ",".
        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed
        JSCanvasRenderingContext2DBase.cpp and
        JSCanvasRenderingContext2DBase.h. Added
        JSCanvasRenderingContext2DCustom.cpp.

2006-05-18  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Hyatt.

        Fix for <http://bugs.webkit.org/show_bug.cgi?id=8896>
        Bug 8896: Absolutely positioned elements should use their parent's
        direction when left, right and width are auto in quirks mode.

        Use the parent's direction instead of the containing
        block's in quirks mode for absolute positioning to match
        WinIE.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        * rendering/RenderBox.h:

2006-05-18  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and tweaked (way too much) by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8937
          EncodingMap uses 0 as its empty value but 0 is a valid TextEncodingID

        * platform/CharsetNames.cpp:
        (WebCore::TextEncodingIDHashTraits::emptyValue): Added a non-zero empty value,
        InvalidEncoding, and used InvalidEncoding2 for the deleted value.
        (WebCore::buildCharsetMaps): Added an assertion that the deleted and empty
        values are not valid encodings.
        * platform/TextEncoding.h: Defined InvalidEncoding2.

2006-05-18  David Hyatt  <hyatt@apple.com>

        Horrible glyph map performance regression fix.
        The initial page of the map was being rebuilt over and over again.

        Reviewed by andersca

        * platform/GlyphMap.cpp:
        (WebCore::GlyphMap::locatePage):
        * platform/GlyphWidthMap.cpp:
        (WebCore::GlyphWidthMap::locatePage):

2006-05-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=8964
        Autogenerate more HTML classes
        
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.
        
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createAnchorWrapper):
        (WebCore::createAppletWrapper):
        (WebCore::createDivWrapper):
        (WebCore::createDirectoryWrapper):
        (WebCore::createDListWrapper):
        (WebCore::createHtmlWrapper):
        (WebCore::createOListWrapper):
        (WebCore::createUListWrapper):
        (WebCore::createJSWrapper):
        Add wrappers.
        
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        Delete the old implementations.
        
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::hash):
        (WebCore::HTMLAnchorElement::host):
        (WebCore::HTMLAnchorElement::hostname):
        (WebCore::HTMLAnchorElement::pathname):
        (WebCore::HTMLAnchorElement::port):
        (WebCore::HTMLAnchorElement::protocol):
        (WebCore::HTMLAnchorElement::search):
        (WebCore::HTMLAnchorElement::text):
        * html/HTMLAnchorElement.h:
        Add some new accessor methods which used to be in kjs_html.cpp.
        
        * html/HTMLAnchorElement.idl: Added.
        * html/HTMLAppletElement.idl: Added.
        * html/HTMLDListElement.idl: Added.
        * html/HTMLDirectoryElement.idl: Added.
        * html/HTMLDivElement.idl: Added.
        * html/HTMLHtmlElement.idl: Added.
        * html/HTMLOListElement.idl: Added.
        * html/HTMLUListElement.idl: Added.

2006-05-17  David Hyatt  <hyatt@apple.com>

        Convert the width map for glyphs into the same new HashMap-style as the
        glyph map for characters.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/FontData.cpp:
        (WebCore::FontData::~FontData):
        (WebCore::FontData::widthForGlyph):
        * platform/FontData.h:
        * platform/GlyphWidthMap.cpp: Added.
        (WebCore::GlyphWidthMap::widthForGlyph):
        (WebCore::GlyphWidthMap::setWidthForGlyph):
        (WebCore::GlyphWidthMap::locatePage):
        * platform/GlyphWidthMap.h: Added.
        (WebCore::GlyphWidthMap::GlyphWidthMap):
        (WebCore::GlyphWidthMap::~GlyphWidthMap):
        (WebCore::GlyphWidthMap::GlyphWidthPage::widthForGlyph):
        (WebCore::GlyphWidthMap::GlyphWidthPage::setWidthForGlyph):
        (WebCore::GlyphWidthMap::GlyphWidthPage::setWidthForIndex):

2006-05-17  David Hyatt  <hyatt@apple.com>

        Rename FontData.mm to FontData.cpp, since it has no obj-c in it.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/FontData.cpp: Added.

2006-05-17  David Hyatt  <hyatt@apple.com>

        Split FontData.mm into platform-specific and cross-platform pieces.

        Reviewed by andersca

        * WebCore.xcodeproj/project.pbxproj:
        * platform/FontData.h:
        (WebCore::FontData::xHeight):
        * platform/mac/FontData.mm:
        (WebCore::FontData::widthForGlyph):
        (WebCore::m_smallCapsFontData):
        (WebCore::FontData::~FontData):
        (WebCore::extendWidthMap):

2006-05-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler
        
        Improvement to my previous patch, suggested by Darin

        * dom/Document.cpp:
        (WebCore::Document::repaintMarkers):
        new method, similar in structure to removeMarkers but just repaints each node that
        has a marker of the specified type
        * dom/Document.h:
        declare new method, and tweak style in related method declarations
        
        * page/Frame.cpp:
        (WebCore::Frame::setMarkedTextMatchesAreHighlighted):
        if the value changes, call repaintMarkers

2006-05-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Autogenerate button, optgroup, option, input and textarea js bindings
        http://bugs.webkit.org/show_bug.cgi?id=8953

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createButtonWrapper):
        (WebCore::createInputWrapper):
        (WebCore::createOptGroupWrapper):
        (WebCore::createOptionWrapper):
        (WebCore::createTextAreaWrapper):
        (WebCore::createJSWrapper):
        * bindings/js/JSHTMLInputElementBase.cpp: Added.
        (WebCore::JSHTMLInputElementBaseProtoFunc::callAsFunction):
        (WebCore::):
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase):
        (WebCore::JSHTMLInputElementBase::getOwnPropertySlot):
        * bindings/js/JSHTMLInputElementBase.h: Added.
        (WebCore::JSHTMLInputElementBase::classInfo):
        (WebCore::JSHTMLInputElementBase::):
        (WebCore::JSHTMLInputElementBase::impl):
        * bindings/js/JSHTMLOptionElementConstructor.cpp: Added.
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        (WebCore::JSHTMLOptionElementConstructor::implementsConstruct):
        (WebCore::JSHTMLOptionElementConstructor::construct):
        * bindings/js/JSHTMLOptionElementConstructor.h: Added.
        * bindings/js/kjs_domnode.h:
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::JSHTMLElement::getOwnPropertySlot):
        (KJS::HTMLElementFunction::callAsFunction):
        (KJS::JSHTMLElement::put):
        (KJS::JSHTMLElement::htmlSetter):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLButtonElement.idl: Added.
        * html/HTMLInputElement.idl: Added.
        * html/HTMLOptGroupElement.idl: Added.
        * html/HTMLOptionElement.idl: Added.
        * html/HTMLTextAreaElement.idl: Added.

2006-05-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        First step for http://bugs.webkit.org/show_bug.cgi?id=8948
        Switch to use new text field implementation for <textarea>

        New textareas can be turned on by setting -webkit-appearance:textarea.

        Tests:
        * LayoutTests/fast/block/float/032.html - Updated results.

        * bridge/mac/FrameMac.h: Added textDidChangeinTextArea to send notification over the bridge to form delegate.
        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::textDidChangeInTextArea): ditto.
        * page/Frame.cpp: (WebCore::Frame::textDidChangeInTextArea): ditto.
        * page/Frame.h: ditto.

        * css/CSSValueKeywords.in: Added textarea.
        * css/cssparser.cpp: (WebCore::CSSParser::parseValue): Updates to check for textarea.
        * css/html4.css: Added style for textarea.  Leaved background-color and appearance values commented out.
        * rendering/render_style.h: (WebCore::): Added TextAreaAppearance.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): Updated for textarea.
        (WebCore::RenderTheme::paint): ditto.
        (WebCore::RenderTheme::paintBorderOnly): ditto.
        (WebCore::RenderTheme::isControlStyled): ditto.
        (WebCore::RenderTheme::supportsFocusRing): ditto.
        (WebCore::RenderTheme::adjustTextFieldStyle): ditto.
        (WebCore::RenderTheme::adjustTextAreaStyle): ditto.
        * rendering/RenderTheme.h: (WebCore::RenderTheme::paintTextArea): Added.
        * rendering/RenderThemeMac.h: Added adjustTextAreaStyle.
        Note- I didn't add a paintTextArea function for RenderThemeMac, since we can just paint the border 
        specified in html4.css to match the NSTextView border.  Added a paintTextArea function to the Windows
        theme can override that border.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled): Updated for textarea.
        (WebCore::RenderThemeMac::adjustTextAreaStyle): ditto.

        * html/HTMLGenericFormElement.cpp: (WebCore::HTMLGenericFormElement::HTMLGenericFormElement):
        Moved m_valueMatchesRenderer and its setters and getters into this class so HTMLInputElement and
        HTMLTextArea can share.
        * html/HTMLGenericFormElement.h:
        (WebCore::HTMLGenericFormElement::valueMatchesRenderer): Added.
        (WebCore::HTMLGenericFormElement::setValueMatchesRenderer): Added.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::init): Remove m_valueMatchesRenderer intialization.
        (WebCore::HTMLInputElement::isKeyboardFocusable): Updated spelling.
        (WebCore::HTMLInputElement::createRenderer): Pass multiLine bool to RenderTextField constructor.
        (WebCore::HTMLInputElement::parseMappedAttribute): Use setValueMatchesRenderer instead of m_valueMatchesRenderer.
        (WebCore::HTMLInputElement::detach): ditto.
        (WebCore::HTMLInputElement::setValue): ditto.
        (WebCore::HTMLInputElement::setValueFromRenderer): ditto.
        * html/HTMLInputElement.h: Remove setValueMatchesRenderer and valueMatchesRenderer and m_valueMatchesRenderer.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement): Calls setValueMatchesRenderer to intialize m_valueMatchesRenderer.
        (WebCore::HTMLTextAreaElement::selectionStart): Uses appearance to determine which renderer to use.
        (WebCore::HTMLTextAreaElement::selectionEnd): ditto.
        (WebCore::HTMLTextAreaElement::setSelectionStart): ditto.
        (WebCore::HTMLTextAreaElement::setSelectionEnd): ditto.
        (WebCore::HTMLTextAreaElement::select): ditto.
        (WebCore::HTMLTextAreaElement::setSelectionRange): ditto.
        (WebCore::HTMLTextAreaElement::createRenderer): ditto.
        (WebCore::HTMLTextAreaElement::appendFormData): ditto.
        (WebCore::HTMLTextAreaElement::updateValue): ditto.
        (WebCore::HTMLTextAreaElement::isKeyboardFocusable): Added.
        (WebCore::HTMLTextAreaElement::isMouseFocusable): Added.
        (WebCore::HTMLTextAreaElement::focus): Added.
        (WebCore::HTMLTextAreaElement::defaultEventHandler): Added to forward events to the inner div.
        (WebCore::HTMLTextAreaElement::setValue): Calls setValueMatchesRenderer.
        * html/HTMLTextAreaElement.h: Added defaultEventHandler, isMouseFocusable, isKeyboardFocusable, and focus methods.
        Removed invalidateValue and m_valueMatchesRenderer since those are now handled in the base class.
        * html/HTMLTextFieldInnerElement.cpp: (WebCore::HTMLTextFieldInnerElement::defaultEventHandler):
        Updated to handle textareas.
        * rendering/RenderTextArea.cpp: (WebCore::RenderTextArea::valueChanged):
        Calls setValueMatchesRenderer(false) instead of invalidateValue.

        * rendering/RenderTextField.h: Changed to be a RenderFlexibleBox instead of a RenderBlock.
        This was necessary to get the inner div's height to grow and shrink with the size of the textarea.
        Added m_multiLine bool, and calcHeight, canHaveChildren, baselinePosition, isTextArea, textWithHardLineBreaks, selectionChanged.
        (WebCore::RenderTextField::canHaveChildren): Returns false now so that no renderer gets created for
        the textarea's child text node for its initial contents.
        (WebCore::RenderTextField::isTextField): Returns true if m_multiLine is false.
        (WebCore::RenderTextField::isTextArea): Returns true if m_multiLine is true.
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::RenderTextField):  Initializes m_multiLine.
        (WebCore::RenderTextField::~RenderTextField): Notifies HTMLTextAreaElement that the renderer is being destroyed so the value gets updated.
        (WebCore::RenderTextField::setStyle): Makes sure there's no overflow clip on the RenderTextField, since we're handling overflow on the inner div.
        (WebCore::RenderTextField::createDivStyle): Sets white-space, box-flex, overflow, word-wrap styles needed for text area.
        (WebCore::RenderTextField::updateFromElement): Updated for textarea elements.
        (WebCore::RenderTextField::setSelectionRange): Optimized caret case by checking to see if start is equal to end before calculating
        the same VisiblePosition twice.
        (WebCore::RenderTextField::subtreeHasChanged): Updated for textarea elements.
        (WebCore::RenderTextField::text): Use innerText so newlines are considered.
        (WebCore::RenderTextField::textWithHardLineBreaks): Added.  Not implemented yet. Just calls text method.
        (WebCore::RenderTextField::calcHeight): Added. Sets initial height based on specified number of rows, and then calls the base class.
        (WebCore::RenderTextField::baselinePosition): Added. Unlike text fields, textareas align to the bottom.
        (WebCore::RenderTextField::calcMinMaxWidth): Updated for textareas.
        (WebCore::RenderTextField::selectionChanged): Added. Not implemented yet.

2006-05-17  David Hyatt  <hyatt@apple.com>

        Fix for 8954, separate the glyph map out into its own files and make it
        cross-platform.

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        * platform/FontData.h:
        (WebCore::FontData::glyphDataForCharacter):
        (WebCore::FontData::setGlyphDataForCharacter):
        * platform/GlyphMap.cpp: Added.
        (WebCore::GlyphMap::glyphDataForCharacter):
        (WebCore::GlyphMap::setGlyphDataForCharacter):
        (WebCore::GlyphMap::locatePage):
        * platform/GlyphMap.h: Added.
        (WebCore::GlyphMap::GlyphMap):
        (WebCore::GlyphMap::~GlyphMap):
        (WebCore::GlyphMap::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphMap::GlyphPage::setGlyphDataForCharacter):
        (WebCore::GlyphMap::GlyphPage::setGlyphDataForIndex):
        * platform/mac/FontData.mm:
        (-[NSFont WebCore]):
        (WidthMap::m_ATSUMirrors):
        (WidthMap::FontData::~FontData):
        (WidthMap::FontData::xHeight):
        (WidthMap::FontData::platformInit):
        (WidthMap::extendWidthMap):
        * platform/mac/GlyphMapMac.cpp: Added.
        (WebCore::GlyphMap::fillPage):
        * platform/mac/WebCoreSystemInterface.h:

2006-05-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=8958
        Should be able to have custom implementations for JS methods
        
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasRenderingContext2DBase.cpp: Removed.
        * bindings/js/JSCanvasRenderingContext2DBase.h: Removed.
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp: Added.
        Remove JSCanvasRenderingContext2DBase and add 
        JSCanvasRenderingContext2DCustom with custom implementations.
        
        (WebCore::toJS):
        (WebCore::toHTMLCanvasStyle):
        (WebCore::JSCanvasRenderingContext2D::strokeStyle):
        (WebCore::JSCanvasRenderingContext2D::setStrokeStyle):
        (WebCore::JSCanvasRenderingContext2D::fillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        Move implementations from JSCanvasRenderingContext2DBase.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        Add new "Custom" extended attribute for functions and attributes. When a function or 
        attribute has this attribute, a custom implementation is called instead of calling down to
        the DOM object.
        
        * html/CanvasRenderingContext2D.idl:
        Add bunch of custom attributes and functions.

2006-05-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej.
        
        First step towards making text-matching mechanism more flexible; now caller can 
        control whether or not the matches are highlighted.

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge markAllMatchesForText:caseSensitive:]):
        renamed from highlightAllMatchesForString:
        (-[WebCoreFrameBridge markedTextMatchesAreHighlighted]):
        new getter method
        (-[WebCoreFrameBridge setMarkedTextMatchesAreHighlighted:]):
        new setter method
        (-[WebCoreFrameBridge unmarkAllTextMatches]):
        renamed from clearHighlightedMatches
        
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::markAllMatchesForText):
        renamed from highlightAllMatchesForString
        (WebCore::Ferame::markedTextMatchesAreHighlighted):
        new getter method, uses boolean ivar in FramePrivate
        (WebCore::Frame::setMarkedTextMatchesAreHighlighted):
        new setter method, uses boolean ivar in FramePrivate
        
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        added boolean ivar m_highlightTextMatches, initialized to 0
        
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        respect markedTextMatchesAreHighlighted

        * WebCore.xcodeproj/project.pbxproj:
        newer Xcode removed some obsolete settings
       
2006-05-17  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        * editing/htmlediting.cpp: (WebCore::editingIgnoresContent):
        Reverting change that Darin made a few weeks ago.  He was trying
        to make editingIgnoresContent return true for the new text fields, but the code
        actually didn't change that result.  When the new text fields actually do return
        true for editingIgnoresContent, other editing problems are exposed. For example,
        moving the cursor around an editable area that contains a text field will cross the
        text field boundary and descend into the shadow tree.  So for now, we'll revert this
        change.

2006-05-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej, tweaked by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8951
          AtomicString hash corrupted by high-bit Latin-1

        Test: fast/encoding/high-bit-latin1.html

        * platform/AtomicString.cpp: (WebCore::CStringTranslator::equal): Use an
        unsigned char local.
        * platform/StringImpl.cpp: (WebCore::StringImpl::init): Ditto.

2006-05-17  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=7492
        CSS attribute selectors fail when the setAttribute() method is used
        to create an attribute and the attribute name is not Class or ID.

        Keep track of attributes used in attribute selectors to
        check after setAttribute whether a style recalc is needed.

        Test: fast/css/selector-set-attribute.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):
        (WebCore::CSSStyleSelector::hasSelectorForAttribute):
        * css/cssstyleselector.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):

2006-05-17  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=5264
        document.createElementNS() should not allow to insert a second <html> element

        Do extra checks for document nodes to detect multiple document elements
        and document types.

        Test: fast/dom/createDocumentType2.html
        Test: fast/dom/createElementNS.html

        * dom/Document.cpp:
        (WebCore::Document::childTypeAllowed):
        * dom/Document.h:

2006-05-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * DerivedSources.make:
        Conditionally generate the SVG and XPath related files based on the value of 
        FEATURE_DEFINES. Also, pass FEATURE_DEFINES to the bindings generator.
        
        * WebCore.xcodeproj/project.pbxproj:
        Add FEATURE_DEFINES as a toplevel build setting and set it to "SVG_SUPPORT XPATH_SUPPORT"
        to keep SVG and XPath support turned on. Add FEATURE_DEFINES to the CPP defines.
        
        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException):
        Add #ifdefs around the XPath code.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        Add "Conditional" extended attribute for interfaces. If this is set, the generated code will be
        surrounded by an #if.
        
        * bindings/scripts/IDLParser.pm:
        Pass the define flags on to the preprocessor.
        
        * bindings/scripts/generate-bindings.pl:
        Add a --defines property and pass it on to the parser.
        
        * css/cssstyleselector.h:
        Add DeprecatedString.h include.
        
        * dom/Document.idl:
        Put back #if around the XPath functions
        
        * page/DOMWindow.idl:
        Put #if around the XPath constructors
        
        * xpath/XPathEvaluator.idl:
        * xpath/XPathExpression.idl:
        * xpath/XPathNSResolver.cpp:
        * xpath/XPathNSResolver.idl:
        * xpath/XPathNamespace.cpp:
        * xpath/XPathResult.idl:
        Add "Conditional=XPATH" to all interfaces.
        
2006-05-16  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=8940
          remove extra copy of image code

        * WebCore.xcodeproj/project.pbxproj: Removed WebCoreImageRenderer.h.
        * platform/mac/WebCoreImageRenderer.h: Removed.

        * bridge/mac/WebCoreFrameBridge.h: Added supportedImageResourceMIMETypes.
        Like supportedImageMIMETypes, but includes PDF and PostScript.
        * bridge/mac/WebCoreFrameBridge.mm:
        (+[WebCoreFrameBridge supportedImageResourceMIMETypes]): Added.
        Has code that came from -[WebImageRendererFactory supportedMIMETypes].
        (+[WebCoreFrameBridge supportedImageMIMETypes]):

        * platform/mac/ImageMac.mm:
        (WebCore::Image::supportsType): Instead of calling the old
        -[WebCoreImageRendererFactory supportedMIMETypes], call the new
        +[WebCoreFrameBridge supportedImageResourceMIMETypes].
        (WebCore::Image::drawTiled): Use wkSetPatternPhaseInUserSpace instead of
        the WebCoreImageRendererFactory.

        * platform/mac/ClipboardMac.mm: Removed an unneeded include of
        WebCoreImageRenderer.h.

        * platform/mac/WebCoreImageRendererFactory.h: Removed everything except
        for the one remaining method, imageDataForName:, which gets resources
        from the WebKit localized resources. We should figure out how to remove
        that one too later.
        * platform/mac/WebCoreImageRendererFactory.m: Ditto.

        * platform/mac/WebCoreSystemInterface.h: Added some new calls.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * WebCore.exp: Ditto.

        * platform/cairo/ImageCairo.cpp: Moved a stub to the stubs file. If it's
        here it has to have a FIXME comment and also it contains a big commented-out
        pile of code. Better to have it in the stubs file with all the other stubs.
        * platform/win/TemporaryLinkStubs.cpp: (Image::drawTiled): Put stub here
        instead of having it in ImageCairo.cpp.

2006-05-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Dave Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=8941
        document.cookie undefined for documents of type text/javascript
        
        * loader/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * loader/TextDocument.h:
        Inherit from HTMLDocument.

2006-05-16  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8898
          REGRESSION: Attempting to right-click image in own tab on website causes crash
        - fix http://bugs.webkit.org/show_bug.cgi?id=8919
          REGRESSION: image could not be dragged, subsequent click-drag activity caused crash

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge domain]): Removed unneeded check of isHTMLDocument.
        (-[WebCoreFrameBridge getData:andResponse:forURL:]): Handle document() of 0.
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]): Ditto.

2006-05-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Autogenerate BASE, HEAD, LINK, STYLE and TITLE JS bindings.

        Already covered by existing dom tests.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createBaseWrapper):
        (WebCore::createHeadWrapper):
        (WebCore::createLinkWrapper):
        (WebCore::createStyleWrapper):
        (WebCore::createTitleWrapper):
        (WebCore::createJSWrapper):
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        * bindings/js/kjs_html.h:
        * html/HTMLBaseElement.idl: Added.
        * html/HTMLHeadElement.idl: Added.
        * html/HTMLLinkElement.idl: Added.
        * html/HTMLStyleElement.idl: Added.
        * html/HTMLTitleElement.idl: Added.

2006-05-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=8921
        Use WebCore to render full-frame images.

        * WebCore.xcodeproj/project.pbxproj:
        Add ImageDocument.
        
        * bridge/mac/WebCoreFrameBridge.h:
        Add mainResourceURLResponse and imageTitleForFilename.
        
        * bridge/mac/WebCoreFrameBridge.mm:
        (+[WebCoreFrameBridge supportedNonImageMIMETypes]):
        This used to be supportedMIMETypes but WebKit requires that we handle the
        image MIME types separately.
        
        (+[WebCoreFrameBridge supportedImageMIMETypes]):
        Add image types from WebCoreImageRendererFactory.
        
        (-[WebCoreFrameBridge canProvideDocumentSource]):
        Return no for image types.
        
        * dom/xml_tokenizer.h:
        (WebCore::Tokenizer::wantsRawData):
        (WebCore::Tokenizer::writeRawData):
        New virtual functions which tokenizers can override if they want to get
        raw data (which isn't fed through the decoder)
        
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::setLoadManually):
        New function which calls HTMLImageLoader::setLoadManually
        
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        (WebCore::HTMLImageLoader::updateFromElement):
        Don't request the image from the loader if the load is set to be manual.
        
        * html/HTMLImageLoader.h:
        (WebCore::HTMLImageLoader::setLoadManually):
        New function which decides if the image data should be fed manually or loaded
        by the loader.
        
        * loader/DocLoader.h:
        Add HTMLImageLoader as a friend.
        
        * loader/ImageDocument.cpp: Added.
        (WebCore::ImageTokenizer::ImageTokenizer):
        (WebCore::ImageTokenizer::wantsRawData):
        (WebCore::ImageTokenizer::write):
        (WebCore::ImageTokenizer::writeRawData):
        (WebCore::ImageTokenizer::stopParsing):
        (WebCore::ImageTokenizer::finish):
        (WebCore::ImageTokenizer::isWaitingForScripts):
        (WebCore::ImageDocument::ImageDocument):
        (WebCore::ImageDocument::createTokenizer):
        * loader/ImageDocument.h: Added.
        Add new ImageDocument class which will feed its data to a created image element.

        * loader/TextDocument.h:
        Inherit from HTMLDocument here too, in case any broken web pages want to manipulate
        the DOM of any plain text documents.
        
        * page/Frame.cpp:
        (WebCore::Frame::begin):
        (WebCore::Frame::write):
        Don't create or use the decoder if the tokenizer is in "raw mode".
        
2006-05-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Autogenerate JSHTMLMetaElement.
        http://bugs.webkit.org/show_bug.cgi?id=8938

        Test: fast/dom/HTMLMetaElement/meta-attributes.html

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createMetaWrapper):
        (WebCore::createJSWrapper):
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        * bindings/js/kjs_html.h:
        * html/HTMLMetaElement.h:

2006-05-16  David Hyatt  <hyatt@apple.com>

        Bug 8936, eliminate WebTextRendererFactory and convert it over to the
        new FontCache.

        Reviewed by andersca

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreStringTruncator.mm:
        * kwq/KWQComboBox.mm:
        * kwq/KWQLineEdit.mm:
        * kwq/KWQListBox.mm:
        * platform/Font.h:
        (WebCore::Font::bold):
        * platform/FontCache.cpp: Added.
        (WebCore::FontPlatformDataCacheKey::m_italic):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontPlatformDataCacheKeyHash::hash):
        (WebCore::FontPlatformDataCacheKeyHash::equal):
        (WebCore::FontPlatformDataCacheKeyTraits::deletedValue):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontDataCacheKeyHash::hash):
        (WebCore::FontDataCacheKeyHash::equal):
        (WebCore::FontDataCacheKeyTraits::deletedValue):
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::getFontData):
        (WebCore::FontCache::clearCommonCaches):
        * platform/FontCache.h:
        * platform/FontData.h:
        * platform/FontFamily.cpp:
        (WebCore::FontFamily::FontFamily):
        (WebCore::FontFamily::operator=):
        (WebCore::FontFamily::setFamily):
        * platform/FontFamily.h:
        (WebCore::FontFamily::familyIsEmpty):
        * platform/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/mac/FontCacheMac.mm:
        (WebCore::getAppDefaultValue):
        (WebCore::getUserDefaultValue):
        (WebCore::getLCDScaleParameters):
        (WebCore::fontsChanged):
        (WebCore::FontCache::registerForFontChanges):
        (WebCore::FontCache::clearCaches):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/FontData.mm:
        (-[NSFont WebCore]):
        (WidthMap::FontData::xHeight):
        (WidthMap::FontData::smallCapsFontData):
        (WidthMap::computeWidthForSpace):
        (WidthMap::setUpFont):
        (WidthMap::fillStyleWithAttributes):
        (WidthMap::FontData::determinePitch):
        * platform/mac/FontFallbackListMac.mm:
        (WebCore::FontFallbackList::setPlatformFont):
        * platform/mac/FontFamilyMac.mm: Removed.
        * platform/mac/FontMac.mm:
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreFindFont):
        * platform/mac/WebFontCache.h: Added.
        * platform/mac/WebFontCache.mm: Added.
        (acceptableChoice):
        (betterChoice):
        (+[WebFontCache fontWithFamily:traits:size:]):
        * platform/mac/WebTextRendererFactory.h: Removed.
        * platform/mac/WebTextRendererFactory.mm: Removed.

2006-05-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Add Rect.idl, even though it can't be used quite yet due to generator limitations.

        * WebCore.xcodeproj/project.pbxproj:
        * css/Rect.idl: Added.

2006-05-16  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by darin.  Landed by eseidel.

        Patch for <http://bugs.webkit.org/show_bug.cgi?id=8924>
        Bug 8924: re-apply the 'disabled type=file' change
        from bug 5882 to RenderFileButton
        
        * rendering/RenderFileButton.cpp:
        (WebCore::RenderFileButton::updateFromElement):

2006-05-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Split css_base.* into separate files (one per class).
        http://bugs.webkit.org/show_bug.cgi?id=8935

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_css.cpp:
        * css/CSSBorderImageValue.cpp:
        * css/CSSBorderImageValue.h:
        * css/CSSCharsetRule.h:
        * css/CSSFontFaceRule.h:
        * css/CSSGrammar.y:
        * css/CSSImportRule.h:
        * css/CSSInheritedValue.cpp:
        * css/CSSInitialValue.cpp:
        * css/CSSMediaRule.h:
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSNamespace.h: Added.
        (WebCore::CSSNamespace::CSSNamespace):
        (WebCore::CSSNamespace::namespaceForPrefix):
        * css/CSSPageRule.h:
        * css/CSSPrimitiveValue.h:
        * css/CSSProperty.cpp:
        * css/CSSProperty.h:
        * css/CSSRule.h:
        * css/CSSRuleList.cpp:
        * css/CSSSelector.cpp: Added.
        * css/CSSSelector.h: Added.
        (WebCore::CSSSelector::CSSSelector):
        * css/CSSStyleDeclaration.h:
        * css/CSSStyleRule.cpp:
        * css/CSSStyleRule.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::~CSSStyleSheet):
        * css/CSSStyleSheet.h:
        * css/CSSValue.h:
        * css/CSSValueList.cpp:
        * css/CSSValueList.h:
        * css/FontFamilyValue.cpp:
        * css/FontValue.cpp:
        * css/FontValue.h:
        * css/MediaList.h:
        * css/ShadowValue.cpp:
        * css/ShadowValue.h:
        * css/StyleBase.cpp: Added.
        (WebCore::StyleBase::stylesheet):
        * css/StyleBase.h: Added.
        (WebCore::StyleBase::StyleBase):
        * css/StyleList.cpp: Added.
        * css/StyleList.h: Added.
        * css/StyleSheet.h:
        * css/css_base.cpp: Removed.
        * css/css_base.h: Removed.
        * css/cssparser.cpp:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList):
        * css/cssstyleselector.h:
        * dom/CSSMappedAttributeDeclaration.h:
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::SVGColor):
        (WebCore::SVGColor::setRGBColor):
        (WebCore::SVGColor::setRGBColorICCColor):
        (WebCore::SVGColor::setColor):
        (WebCore::SVGColor::cssText):
        (WebCore::SVGColor::color):
        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::SVGStyledElement):
        (WebCore::SVGStyledElement::className):
        (WebCore::SVGStyledElement::createRenderer):
        (WebCore::SVGStyledElement::parseMappedAttribute):
        (WebCore::SVGStyledElement::notifyAttributeChange):
        (WebCore::SVGStyledElement::attributeChanged):
        (WebCore::SVGStyledElement::canvas):
        (WebCore::SVGStyledElement::updateCanvasItem):
        (WebCore::SVGStyledElement::pushAttributeContext):

2006-05-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Split css_valueimpl.* and css_ruleimpl.* into separate files (one per class).
        http://bugs.webkit.org/show_bug.cgi?id=8934

        * WebCore+SVG/RGBColor.cpp:
        (WebCore::RGBColor::RGBColor):
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSRule::classInfo):
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_html.cpp:
        * bindings/js/kjs_window.cpp:
        * bindings/objc/DOMCSS.mm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSBorderImageValue.cpp: Added.
        (WebCore::CSSBorderImageValue::CSSBorderImageValue):
        * css/CSSBorderImageValue.h: Added.
        * css/CSSCharsetRule.h: Added.
        (WebCore::CSSCharsetRule::CSSCharsetRule):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForShadow):
        (WebCore::):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSFontFaceRule.cpp: Added.
        (WebCore::CSSFontFaceRule::CSSFontFaceRule):
        * css/CSSFontFaceRule.h: Added.
        (WebCore::CSSFontFaceRule::isFontFaceRule):
        * css/CSSGrammar.y:
        * css/CSSImageValue.cpp: Added.
        (WebCore::CSSImageValue::CSSImageValue):
        * css/CSSImageValue.h: Added.
        * css/CSSImportRule.cpp: Added.
        * css/CSSImportRule.h: Added.
        * css/CSSInheritedValue.cpp: Added.
        * css/CSSInheritedValue.h: Added.
        * css/CSSInitialValue.cpp: Added.
        * css/CSSInitialValue.h: Added.
        * css/CSSMediaRule.cpp: Added.
        (WebCore::CSSMediaRule::CSSMediaRule):
        (WebCore::CSSMediaRule::~CSSMediaRule):
        (WebCore::CSSMediaRule::append):
        (WebCore::CSSMediaRule::deleteRule):
        (WebCore::CSSMediaRule::cssText):
        * css/CSSMediaRule.h: Added.
        (WebCore::CSSMediaRule::media):
        (WebCore::CSSMediaRule::cssRules):
        * css/CSSMutableStyleDeclaration.cpp: Added.
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::setChanged):
        * css/CSSMutableStyleDeclaration.h: Added.
        * css/CSSPageRule.cpp: Added.
        (WebCore::CSSPageRule::CSSPageRule):
        * css/CSSPageRule.h: Added.
        (WebCore::CSSPageRule::isPageRule):
        * css/CSSPrimitiveValue.cpp: Added.
        * css/CSSPrimitiveValue.h: Added.
        * css/CSSProperty.cpp: Added.
        (WebCore::CSSProperty::cssText):
        * css/CSSProperty.h: Added.
        (WebCore::CSSProperty::CSSProperty):
        * css/CSSQuirkPrimitiveValue.h: Added.
        * css/CSSRule.cpp: Added.
        * css/CSSRule.h: Added.
        (WebCore::CSSRule::CSSRule):
        * css/CSSRuleList.cpp: Added.
        (WebCore::CSSRuleList::CSSRuleList):
        (WebCore::CSSRuleList::~CSSRuleList):
        (WebCore::CSSRuleList::deleteRule):
        (WebCore::CSSRuleList::append):
        (WebCore::CSSRuleList::insertRule):
        * css/CSSRuleList.h: Added.
        (WebCore::CSSRuleList::item):
        * css/CSSStyleDeclaration.cpp: Added.
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):
        (WebCore::CSSStyleDeclaration::diff):
        * css/CSSStyleDeclaration.h: Added.
        * css/CSSStyleRule.cpp: Added.
        (WebCore::CSSStyleRule::CSSStyleRule):
        (WebCore::CSSStyleRule::selectorText):
        * css/CSSStyleRule.h: Added.
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::ownerRule):
        * css/CSSUnknownRule.h: Added.
        (WebCore::CSSUnknownRule::CSSUnknownRule):
        * css/CSSValue.h: Added.
        * css/CSSValueList.cpp: Added.
        * css/CSSValueList.h: Added.
        * css/Counter.h: Added.
        * css/DashboardRegion.h: Added.
        * css/FontFamilyValue.cpp: Added.
        * css/FontFamilyValue.h: Added.
        (WebCore::FontFamilyValue::genericFamilyType):
        * css/FontValue.cpp: Added.
        (WebCore::FontValue::cssText):
        * css/FontValue.h: Added.
        * css/MediaList.cpp:
        * css/Pair.h: Added.
        (WebCore::Pair::~Pair):
        * css/RectImpl.h: Added.
        (WebCore::RectImpl::~RectImpl):
        * css/ShadowValue.cpp: Added.
        (WebCore::ShadowValue::ShadowValue):
        * css/ShadowValue.h: Added.
        * css/css_base.cpp:
        * css/css_ruleimpl.cpp: Removed.
        * css/css_ruleimpl.h: Removed.
        * css/css_valueimpl.cpp: Removed.
        * css/css_valueimpl.h: Removed.
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseFontFamily):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundImage):
        * css/cssstyleselector.h:
        * dom/CSSMappedAttributeDeclaration.h:
        (WebCore::CSSMappedAttributeDeclaration::CSSMappedAttributeDeclaration):
        * dom/Document.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/CompositeEditCommand.h:
        * editing/EditCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertLineBreakCommand.h:
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::RemoveCSSPropertyCommand):
        (WebCore::RemoveCSSPropertyCommand::~RemoveCSSPropertyCommand):
        * editing/RemoveCSSPropertyCommand.h:
        (WebCore::RemoveCSSPropertyCommand::styleDeclaration):
        * html/HTMLBodyElement.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLScriptElement.h:
        * html/HTMLTokenizer.h:
        * kcanvas/KCanvasFilters.h:
        (WebCore::KCanvasFEColorMatrix::values):
        (WebCore::KCanvasFEColorMatrix::setValues):
        (WebCore::KCanvasFEConvolveMatrix::kernel):
        (WebCore::KCanvasFEConvolveMatrix::setKernel):
        * kcanvas/KCanvasPath.h:
        * kcanvas/KCanvasTreeDebug.h:
        (WebCore::operator<<):
        * kcanvas/RenderPath.h:
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGStrokeDasharray):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/ecma/Ecma.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        * ksvg2/svg/SVGColor.cpp:
        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (SVGFEColorMatrixElement::filterEffect):
        * page/DOMWindow.cpp:
        * page/Frame.cpp:
        * page/FramePrivate.h:
        * platform/DeprecatedValueList.h:
        * rendering/RenderTextField.cpp:

2006-05-15  Darin Adler  <darin@apple.com>

        * WebCore.xcodeproj/project.pbxproj: Removed duplicate files that were
        screwing up Xcode.

2006-05-15  Darin Adler  <darin@apple.com>

        * make-generated-sources.sh: Changed to be executable and removed
        text in the file generated by "svn diff".
        * move-js-headers.sh: Ditto.

2006-05-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Split css_stylesheetimpl.* into separate files (one per class).
        http://bugs.webkit.org/show_bug.cgi?id=8933

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSheet.cpp: Added.
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::addRule):
        (WebCore::CSSStyleSheet::deleteRule):
        (WebCore::CSSStyleSheet::parseString):
        (WebCore::CSSStyleSheet::docLoader):
        * css/CSSStyleSheet.h: Added.
        * css/MediaList.cpp: Added.
        (WebCore::MediaList::MediaList):
        (WebCore::MediaList::contains):
        (WebCore::MediaList::parentStyleSheet):
        (WebCore::MediaList::parentRule):
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::setMediaText):
        * css/MediaList.h: Added.
        * css/StyleSheet.cpp: Added.
        (WebCore::StyleSheet::StyleSheet):
        (WebCore::StyleSheet::parentStyleSheet):
        (WebCore::StyleSheet::setMedia):
        * css/StyleSheet.h: Added.
        (WebCore::StyleSheet::ownerNode):
        * css/StyleSheetList.cpp: Added.
        (WebCore::StyleSheetList::~StyleSheetList):
        (WebCore::StyleSheetList::add):
        (WebCore::StyleSheetList::remove):
        (WebCore::StyleSheetList::item):
        * css/StyleSheetList.h: Added.
        * css/css_stylesheetimpl.cpp: Removed.
        * css/css_stylesheetimpl.h: Removed.

2006-05-15  Eric Seidel  <eseidel@apple.com>

        * WebCore.xcodeproj/project.pbxproj: build fix.

2006-05-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Split dom_xmlimpl.* into separate files (one per class).

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Entity.cpp: Added.
        (WebCore::Entity::Entity):
        * dom/Entity.h: Added.
        * dom/EntityReference.cpp: Added.
        (WebCore::EntityReference::EntityReference):
        * dom/EntityReference.h: Added.
        * dom/Notation.cpp: Added.
        (WebCore::Notation::Notation):
        * dom/Notation.h: Added.
        * dom/ProcessingInstruction.cpp: Added.
        (WebCore::ProcessingInstruction::ProcessingInstruction):
        * dom/ProcessingInstruction.h: Added.
        * dom/dom_xmlimpl.cpp: Removed.
        * dom/dom_xmlimpl.h: Removed.

2006-05-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by Tim Hatcher.

        Split html_imageimpl.* into separate files (one per class).
        http://bugs.webkit.org/show_bug.cgi?id=8929

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasRenderingContext2DBase.cpp:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_html.cpp:
        * bindings/objc/DOMHTML.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * dom/Document.cpp:
        * editing/JSEditor.cpp:
        * html/CanvasRenderingContext2D.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAreaElement.cpp: Added.
        (WebCore::HTMLAreaElement::HTMLAreaElement):
        (WebCore::HTMLAreaElement::mapMouseEvent):
        (WebCore::HTMLAreaElement::getRect):
        (WebCore::HTMLAreaElement::getRegion):
        * html/HTMLAreaElement.h: Added.
        * html/HTMLCanvasElement.h:
        * html/HTMLDocument.cpp:
        * html/HTMLElementFactory.cpp:
        * html/HTMLFormCollection.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLImageElement.cpp: Added.
        (WebCore::HTMLImageElement::HTMLImageElement):
        * html/HTMLImageElement.h: Added.
        * html/HTMLImageLoader.cpp: Added.
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        * html/HTMLImageLoader.h: Added.
        * html/HTMLInputElement.cpp:
        * html/HTMLMapElement.cpp: Added.
        (WebCore::HTMLMapElement::mapMouseEvent):
        (WebCore::HTMLMapElement::parseMappedAttribute):
        * html/HTMLMapElement.h: Added.
        * html/HTMLObjectElement.cpp:
        * html/HTMLParser.cpp:
        * html/html_imageimpl.cpp: Removed.
        * html/html_imageimpl.h: Removed.
        * ksvg2/misc/SVGImageLoader.h:
        * kwq/WebCoreAXObject.mm:
        (-[WebCoreAXObject addChildrenToArray:]):
        * page/Frame.cpp:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::nodeAtPoint):

2006-05-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Split html_blockimpl.* into separate files (one per class).
        http://bugs.webkit.org/show_bug.cgi?id=8927

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_html.cpp:
        * bindings/objc/DOMHTML.mm:
        * html/HTMLBlockquoteElement.cpp: Added.
        (WebCore::HTMLBlockquoteElement::HTMLBlockquoteElement):
        * html/HTMLBlockquoteElement.h: Added.
        * html/HTMLDivElement.cpp: Added.
        * html/HTMLDivElement.h: Added.
        * html/HTMLElementFactory.cpp:
        * html/HTMLHRElement.cpp: Added.
        * html/HTMLHRElement.h: Added.
        * html/HTMLHeadingElement.cpp: Added.
        * html/HTMLHeadingElement.h: Added.
        * html/HTMLMarqueeElement.cpp: Added.
        (WebCore::HTMLMarqueeElement::HTMLMarqueeElement):
        (WebCore::HTMLMarqueeElement::parseMappedAttribute):
        * html/HTMLMarqueeElement.h: Added.
        * html/HTMLParagraphElement.cpp: Added.
        * html/HTMLParagraphElement.h: Added.
        * html/HTMLParser.cpp:
        * html/HTMLPreElement.cpp: Added.
        (WebCore::HTMLPreElement::HTMLPreElement):
        (WebCore::HTMLPreElement::setWrap):
        * html/HTMLPreElement.h: Added.
        * html/HTMLTextFieldInnerElement.h:
        * html/html_blockimpl.cpp: Removed.
        * html/html_blockimpl.h: Removed.
        * rendering/RenderLayer.cpp:

2006-05-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Split render_list.* and html_listimpl.* into separate files (one per class).
        http://bugs.webkit.org/show_bug.cgi?id=8925

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_html.cpp:
        * bindings/objc/DOMHTML.mm:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::attributedString):
        * html/HTMLDListElement.cpp: Added.
        (WebCore::HTMLDListElement::HTMLDListElement):
        * html/HTMLDListElement.h: Added.
        * html/HTMLDirectoryElement.cpp: Added.
        (WebCore::HTMLDirectoryElement::HTMLDirectoryElement):
        * html/HTMLDirectoryElement.h: Added.
        * html/HTMLElementFactory.cpp:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLLIElement.cpp: Added.
        (WebCore::HTMLLIElement::HTMLLIElement):
        (WebCore::HTMLLIElement::parseMappedAttribute):
        (WebCore::HTMLLIElement::attach):
        (WebCore::HTMLLIElement::setType):
        * html/HTMLLIElement.h: Added.
        * html/HTMLMenuElement.cpp: Added.
        (WebCore::HTMLMenuElement::HTMLMenuElement):
        * html/HTMLMenuElement.h: Added.
        * html/HTMLOListElement.cpp: Added.
        (WebCore::HTMLOListElement::HTMLOListElement):
        (WebCore::HTMLOListElement::parseMappedAttribute):
        (WebCore::HTMLOListElement::setType):
        * html/HTMLOListElement.h: Added.
        (WebCore::HTMLOListElement::start):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::checkDTD):
        (WebCore::HTMLOptionElement::text):
        (WebCore::HTMLOptionElement::setText):
        (WebCore::HTMLOptionElement::getSelect):
        (WebCore::HTMLOptionElement::setLabel):
        * html/HTMLOptionElement.h:
        * html/HTMLParser.cpp:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        * html/HTMLUListElement.cpp: Added.
        (WebCore::HTMLUListElement::HTMLUListElement):
        * html/HTMLUListElement.h: Added.
        * html/html_listimpl.cpp: Removed.
        * html/html_listimpl.h: Removed.
        * kwq/WebCoreAXObject.mm:
        * rendering/InlineFlowBox.cpp:
        * rendering/ListMarkerBox.cpp: Added.
        (WebCore::ListMarkerBox::ListMarkerBox):
        (WebCore::ListMarkerBox::isText):
        * rendering/ListMarkerBox.h: Added.
        * rendering/RenderContainer.cpp:
        (WebCore::updateListMarkerNumbers):
        (WebCore::RenderContainer::addChild):
        (WebCore::RenderContainer::removeChild):
        (WebCore::RenderContainer::layout):
        (WebCore::RenderContainer::removeLeftoverAnonymousBoxes):
        (WebCore::RenderContainer::positionForCoordinates):
        (WebCore::RenderContainer::lineBoxRects):
        * rendering/RenderListItem.cpp: Added.
        (WebCore::RenderListItem::RenderListItem):
        (WebCore::RenderListItem::setStyle):
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::markerStringValue):
        * rendering/RenderListItem.h: Added.
        (WebCore::RenderListItem::renderName):
        (WebCore::RenderListItem::setValue):
        (WebCore::RenderListItem::setNotInList):
        (WebCore::RenderListItem::notInList):
        * rendering/RenderListMarker.cpp: Added.
        (WebCore::RenderListMarker::RenderListMarker):
        (WebCore::RenderListMarker::setStyle):
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::calcMinMaxWidth):
        * rendering/RenderListMarker.h: Added.
        (WebCore::RenderListMarker::renderName):
        * rendering/RenderObject.cpp:
        * rendering/render_list.cpp: Removed.
        * rendering/render_list.h: Removed.

2006-05-15  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by eseidel.

        Split render_form.* into separate files (one per class).
        http://bugs.webkit.org/show_bug.cgi?id=8889

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::HTMLButtonElement):
        * html/HTMLFieldSetElement.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLLabelElement.cpp:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::createRenderer):
        * html/HTMLOptionElement.cpp:
        * html/HTMLSelectElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::selectionStart):
        (WebCore::HTMLTextAreaElement::selectionEnd):
        (WebCore::HTMLTextAreaElement::setSelectionStart):
        (WebCore::HTMLTextAreaElement::setSelectionEnd):
        (WebCore::HTMLTextAreaElement::setSelectionRange):
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        (WebCore::HTMLTextAreaElement::createRenderer):
        (WebCore::HTMLTextAreaElement::setValue):
        (WebCore::HTMLTextAreaElement::setDefaultValue):
        (WebCore::HTMLTextAreaElement::setAccessKey):
        * kwq/KWQComboBox.mm:
        * kwq/KWQFileButton.mm:
        * kwq/KWQListBox.mm:
        * kwq/KWQSlider.mm:
        * platform/mac/WebCoreTextField.mm:
        * rendering/RenderFieldset.cpp: Added.
        (WebCore::RenderFieldset::RenderFieldset):
        (WebCore::RenderFieldset::findLegend):
        (WebCore::RenderFieldset::paintBorderMinusLegend):
        (WebCore::RenderFieldset::setStyle):
        * rendering/RenderFieldset.h: Added.
        (WebCore::RenderFieldset::renderName):
        * rendering/RenderFileButton.cpp: Added.
        (WebCore::RenderFileButton::RenderFileButton):
        (WebCore::RenderFileButton::calcMinMaxWidth):
        (WebCore::RenderFileButton::updateFromElement):
        (WebCore::RenderFileButton::click):
        * rendering/RenderFileButton.h: Added.
        (WebCore::RenderFileButton::renderName):
        (WebCore::RenderFileButton::calcReplacedHeight):
        (WebCore::RenderFileButton::isEditable):
        * rendering/RenderFormElement.cpp: Added.
        (WebCore::RenderFormElement::RenderFormElement):
        (WebCore::RenderFormElement::baselinePosition):
        (WebCore::RenderFormElement::layout):
        * rendering/RenderFormElement.h: Added.
        (WebCore::RenderFormElement::renderName):
        (WebCore::RenderFormElement::isFormElement):
        (WebCore::RenderFormElement::borderTop):
        (WebCore::RenderFormElement::borderBottom):
        (WebCore::RenderFormElement::borderLeft):
        (WebCore::RenderFormElement::borderRight):
        (WebCore::RenderFormElement::paddingTop):
        (WebCore::RenderFormElement::paddingBottom):
        (WebCore::RenderFormElement::paddingLeft):
        (WebCore::RenderFormElement::paddingRight):
        (WebCore::RenderFormElement::canHaveIntrinsicMargins):
        (WebCore::RenderFormElement::intrinsicMargin):
        (WebCore::RenderFormElement::isEditable):
        * rendering/RenderImageButton.cpp: Added.
        (WebCore::RenderImageButton::RenderImageButton):
        * rendering/RenderImageButton.h: Added.
        (WebCore::RenderImageButton::renderName):
        (WebCore::RenderImageButton::isImageButton):
        * rendering/RenderLabel.cpp: Added.
        (WebCore::RenderLabel::RenderLabel):
        * rendering/RenderLabel.h: Added.
        (WebCore::RenderLabel::renderName):
        * rendering/RenderLegend.cpp: Added.
        (WebCore::RenderLegend::RenderLegend):
        * rendering/RenderLegend.h: Added.
        (WebCore::RenderLegend::renderName):
        * rendering/RenderLineEdit.cpp: Added.
        (WebCore::RenderLineEdit::RenderLineEdit):
        * rendering/RenderLineEdit.h: Added.
        (WebCore::RenderLineEdit::renderName):
        (WebCore::RenderLineEdit::calcReplacedHeight):
        (WebCore::RenderLineEdit::canHaveIntrinsicMargins):
        (WebCore::RenderLineEdit::isTextField):
        (WebCore::RenderLineEdit::isEditable):
        * rendering/RenderSelect.cpp: Added.
        (WebCore::RenderSelect::RenderSelect):
        (WebCore::RenderSelect::setWidgetWritingDirection):
        (WebCore::RenderSelect::setStyle):
        (WebCore::RenderSelect::updateFromElement):
        (WebCore::RenderSelect::baselinePosition):
        (WebCore::RenderSelect::calcMinMaxWidth):
        (WebCore::RenderSelect::layout):
        (WebCore::RenderSelect::valueChanged):
        (WebCore::RenderSelect::selectionChanged):
        (WebCore::RenderSelect::updateSelection):
        * rendering/RenderSelect.h: Added.
        (WebCore::RenderSelect::renderName):
        (WebCore::RenderSelect::calcReplacedHeight):
        (WebCore::RenderSelect::canHaveIntrinsicMargins):
        (WebCore::RenderSelect::selectionChanged):
        (WebCore::RenderSelect::setSelectionChanged):
        * rendering/RenderSlider.cpp: Added.
        (WebCore::RenderSlider::calcMinMaxWidth):
        (WebCore::RenderSlider::updateFromElement):
        * rendering/RenderSlider.h: Added.
        (WebCore::RenderSlider::renderName):
        (WebCore::RenderSlider::canHaveIntrinsicMargins):
        * rendering/RenderTextArea.cpp: Added.
        (WebCore::RenderTextArea::RenderTextArea):
        (WebCore::RenderTextArea::calcMinMaxWidth):
        (WebCore::RenderTextArea::setStyle):
        (WebCore::RenderTextArea::updateFromElement):
        (WebCore::RenderTextArea::selectionStart):
        (WebCore::RenderTextArea::selectionEnd):
        (WebCore::RenderTextArea::setSelectionStart):
        (WebCore::RenderTextArea::setSelectionEnd):
        (WebCore::RenderTextArea::select):
        (WebCore::RenderTextArea::setSelectionRange):
        * rendering/RenderTextArea.h: Added.
        (WebCore::RenderTextArea::renderName):
        (WebCore::RenderTextArea::isTextArea):
        (WebCore::RenderTextArea::isEdited):
        (WebCore::RenderTextArea::canHaveIntrinsicMargins):
        (WebCore::RenderTextArea::isEditable):
        * rendering/render_form.cpp: Removed.
        * rendering/render_form.h: Removed.

2006-05-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Eric.

        Remove the XPath log calls. They were causing leaks and were never
        really useful.
        
        * bridge/mac/WebCorePageBridge.mm:
        (initializeLoggingChannelsIfNecessary):
        * platform/Logging.cpp:
        * platform/Logging.h:
        * xpath/XPathResult.cpp:
        (WebCore::XPathResult::convertTo):
        * xpath/impl/XPathFunctions.cpp:
        (round):
        (WebCore::XPath::FunCount::doEvaluate):
        (WebCore::XPath::FunSum::doEvaluate):
        (WebCore::XPath::FunctionLibrary::createFunction):
        * xpath/impl/XPathPath.cpp:
        (WebCore::XPath::Filter::doEvaluate):
        (WebCore::XPath::LocationPath::doEvaluate):
        * xpath/impl/XPathPredicate.cpp:
        (WebCore::XPath::Negative::doEvaluate):
        (WebCore::XPath::NumericOp::doEvaluate):
        (WebCore::XPath::Union::doEvaluate):
        * xpath/impl/XPathStep.cpp:
        (WebCore::XPath::Step::evaluate):
        (WebCore::XPath::Step::nodesInAxis):
        (WebCore::XPath::Step::nodeTestMatches):
        * xpath/impl/XPathValue.cpp:
        (WebCore::XPath::Value::toNodeVector):

2006-05-15  Eric Seidel  <eseidel@apple.com>

        Fix linux build.

        * html/HTMLBodyElement.cpp: Fix case of #include "cssstyleselector.h"

2006-05-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=8913
        REGRESSION: Can view source for text files
        
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canProvideDocumentSource]):
        (-[WebCoreFrameBridge canSaveAsWebArchive]):

2006-05-15  David Hyatt  <hyatt@apple.com>

        Remove the .forPrinter boolean from FontPlatformData.  After the initial
        acquisition of an NSFont, the font is then adjusted to printer or screen
        when put into a FontPlatformData.  Then it can simply be used in the hash
        lookup to get a FontData.

        Reviewed by mjs

        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        * platform/FontData.h:
        * platform/FontDescription.h:
        (WebCore::FontDescription::bold):
        * platform/FontPlatformData.h:
        (WebCore::FontPlatformData::syntheticOblique):
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/mac/FontData.mm:
        (WebCore::FontData::smallCapsFontData):
        (WebCore::getSmallCapsFontData):
        (WebCore::setUpFont):
        * platform/mac/FontMac.mm:
        (WebCore::ATSULayoutParameters::initialize):
        * platform/mac/WebTextRendererFactory.h:
        * platform/mac/WebTextRendererFactory.mm:
        (-[WebTextRendererFactory rendererWithFont:]):
        (-[WebTextRendererFactory fontWithDescription:WebCore::familyIndex:]):

2006-05-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        * dom/Document.idl:
        Remove #if XPATH_SUPPORT until we have a way to feed defines to the bindings generator
        (see http://bugs.webkit.org/show_bug.cgi?id=8912)

2006-05-14  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6838
          Incomplete repaint of collapsed table borders
          
        This patch updates the implementation of collapsing borders to match
        the current spec.

        Test: fast/repaint/table-collapsed-border.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::layout): Calculate horizontal overflows.
        (WebCore::RenderTable::calcMinMaxWidth): Added call to recalcHorizontalBorders.
        (WebCore::RenderTable::colElement): Made const.
        (WebCore::RenderTable::calcBorderLeft): Calculates the left border. In the collapsing
        borders model, this is the left border of the leftmost cell of the first row.
        (WebCore::RenderTable::calcBorderRight): Ditto for the right border.
        (WebCore::RenderTable::recalcHorizontalBorders): Added.
        (WebCore::RenderTable::borderTop): Changed to return outerBorderTop in the
        collapsing case.
        (WebCore::RenderTable::borderBottom): Changed to return outerBorderBottom in
        the collapsing case.
        (WebCore::RenderTable::outerBorderTop): Added. Returns the table half of the
        top border, which is half the widest top border on the first row.
        (WebCore::RenderTable::outerBorderBottom): Added. Returns the table half of the
        bottom border, which is half the widest bottom border on the last row.
        (WebCore::RenderTable::outerBorderLeft): Added. Returns the table half of the
        left border, which is half the widest left border on the leftmost column.
        (WebCore::RenderTable::outerBorderRight): Added. Returns the table half of the
        right border, which is half the widest right border on the rightmost column.
        (WebCore::RenderTable::cellAbove): Return 0 if the cell is in the first row
        of the header.
        (WebCore::RenderTable::cellBelow): Return 0 if the cell is in the last row
        of the footer.
        * rendering/RenderTable.h:
        (WebCore::RenderTable::borderLeft):
        (WebCore::RenderTable::borderRight):
        (WebCore::RenderTable::overflowHeight):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::borderLeft): Removed unnecessary use of floats.
        (WebCore::RenderTableCell::borderTop): Ditto.
        (WebCore::RenderTableCell::paint): Account for the table half of the vertical
        borders.
        (WebCore::RenderTableCell::paintCollapsedBorder): Removed unnecessary use of
        floats.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::layoutRows): Added call to recalcOuterBorder.
        (WebCore::RenderTableSection::calcOuterBorderTop): Added. Calculates the outer half of
        the section's top border, which is half the widest top border on the first row.
        (WebCore::RenderTableSection::calcOuterBorderBottom): Ditto for the bottom border.
        (WebCore::RenderTableSection::calcOuterBorderLeft): Ditto for the left border.
        (WebCore::RenderTableSection::calcOuterBorderRight): Ditto for the right border.
        (WebCore::RenderTableSection::recalcOuterBorder): Added.
        (WebCore::RenderTableSection::paint): Account for the table half of the borders.
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::outerBorderTop):
        (WebCore::RenderTableSection::outerBorderBottom):
        (WebCore::RenderTableSection::outerBorderLeft):
        (WebCore::RenderTableSection::outerBorderRight):
        * rendering/render_style.cpp:
        (WebCore::RenderStyle::diff): Changed to return Layout if a border style changed
        from 'hidden' to 'none' or vice versa in the collapsing borders model, since
        'hidden' suppresses other borders.

2006-05-14  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - test for http://bugs.webkit.org/show_bug.cgi?id=8739
          Crash in RenderTableSection::paint due to manipulating DOM on resize

        * manual-tests/dom-manipulation-on-resize.html: Added.

2006-05-14  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=5882:
        disabled type="file" element doesn't appear disabled

        Be sure to call setDisabled on the file button when in
        RenderFileButton::updateFromElement.

        * kwq/KWQFileButton.h:
        * kwq/KWQFileButton.mm:
        (-[WebFileChooserButton setEnabled:]):
        (KWQFileButton::setDisabled):
        * rendering/render_form.cpp:
        (WebCore::RenderFileButton::updateFromElement):

2006-05-14  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build.

        * platform/win/FontWin.cpp:
        (WebCore::FontFallbackList::fontDataAt):
        (WebCore::hackishExtentForString):
        (WebCore::Font::floatWidth):
        (WebCore::Font::drawText):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::offsetForPosition):

2006-05-14  David Hyatt  <hyatt@apple.com>

        Bug 8895.  Rework font substitution and fallback.  Lift the concept of
        substitution and fallback out of FontData and up into the FontFallbackList.
        See the bug for details of issues fixed in the fallback code.

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Font.cpp:
        (WebCore::m_finalRoundingWidth):
        (WebCore::WidthIterator::advance):
        (WebCore::Font::primaryFont):
        (WebCore::Font::fontDataAt):
        (WebCore::Font::fontDataForCharacters):
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::lineSpacing):
        (WebCore::Font::xHeight):
        (WebCore::Font::isFixedPitch):
        * platform/Font.h:
        (WebCore::Font::getNSFont):
        * platform/FontCache.h: Added.
        * platform/FontData.h:
        (WebCore::FontData::pitch):
        (WebCore::FontData::getNSFont):
        (WebCore::):
        * platform/FontFallbackList.cpp: Added.
        (WebCore::m_pitch):
        (WebCore::FontFallbackList::~FontFallbackList):
        (WebCore::FontFallbackList::invalidate):
        (WebCore::FontFallbackList::determinePitch):
        (WebCore::FontFallbackList::fontDataAt):
        (WebCore::FontFallbackList::fontDataForCharacters):
        * platform/FontFallbackList.h:
        (WebCore::FontFallbackList::isFixedPitch):
        (WebCore::FontFallbackList::primaryFont):
        * platform/FontFamily.h:
        * platform/mac/FontCacheMac.mm: Added.
        (WebCore::FontCache::getFontData):
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/mac/FontData.mm:
        (WebCore::FontData::containsCharacters):
        * platform/mac/FontMac.mm:
        (WebCore::ATSULayoutParameters::initialize):
        * platform/mac/WebTextRendererFactory.h:
        * platform/mac/WebTextRendererFactory.mm:
        (-[WebTextRendererFactory fallbackFontWithTraits:size:]):
        (-[WebTextRendererFactory fontWithDescription:WebCore::familyIndex:]):
        * platform/win/FontWin.cpp:
        (WebCore::FontFallbackList::determinePitch):
        (WebCore::FontFallbackList::primaryFont):
        (WebCore::FontFallbackList::fontDataAt):
        (WebCore::FontFallbackList::fontDataForCharacters):

2006-05-14  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Hyatt, landed by ap.

        Fix for <http://bugs.webkit.org/show_bug.cgi?id=8387>
        "border-left/padding-Left do not show up on multiline rtl inline boxes"

        Test: fast/inline/inline-borders-with-bidi-override.html: added

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):

2006-05-14  Steve Falkenburg  <sfalken@apple.com>

        Fix the Windows build the rest of the way

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-05-14  Steve Falkenburg  <sfalken@apple.com>

        Get FontWin.cpp compiling.
        WebCore and JSCore now build, but Spinneret still gets link errors.

        * platform/win/FontWin.cpp:
        (WebCore::Font::offsetForPosition):

2006-05-14  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by maciej.

        Fix Windows build except for fontwin.cpp.

        * WebCore/platform/win/FontWin.cpp:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:

2006-05-13  Kevin M. Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin, landed by ap.

        - http://bugs.webkit.org/show_bug.cgi?id=8528
          Bakefiles (and generated Makefiles) for wx and gdk ports
        
        * make-generated-sources.sh: 
        Added script to configure environment to run DerivedSources.make
        
        * move-js-headers.sh:
        Added script to copy JavaScriptCore includes into one dir so that 
        Framework-style includes will work on all OSes. (written by Mike Emmel)
        
        * platform/wx: New dir, home for the wxWidgets port
        * platform/wx/wx-encodings.txt: Added temp. stub for wx encodings file.
        
        * Projects: New dir, for various project files for ports.
        
        * Projects/gdk: New dir, GDK port files.
        * Projects/webcore-gdk.bkl: Bakefile to generate GDK port project files
        
        * Projects/wx: New dir, wxWidgets port files.
        * Projects/webcore-wx.bkl: Bakefile to generate wxWidgets port project files

2006-05-13  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8485
          iExploder(#11705): Freeze in RenderBlock::layout()

        Test: fast/text/midword-break-hang.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): If this is a mid-word break,
        ignore breakOnlyAfterWhiteSpace.

2006-05-13  Alexey Proskuryakov  <ap@nypop.com>

        Fix release build.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontalValues): Initialize leftValue. 
        This value will never be used, because 'left' and 'right' cannot both be 'auto'.
        (WebCore::RenderBox::calcAbsoluteVerticalValues): Initialize topValue. 
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced): Same changes as above. 

2006-05-13  Alexey Proskuryakov  <ap@nypop.com>

        Re-applied the fix for bug 8835 (REGRESSION: Line moves but selection
        highlight stays behind) to a correct file; removed the stale one.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::adjustPosition): Adjust m_selectionTop
        and m_selectionBottom.
        * rendering/render_line.cpp: Removed.

2006-05-13  Rob Buis  <buis@kde.org>

        Reviewed by Darin, landed by ap.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8132
        CSS parser sometimes accepts real number as integer

        Add a boolean variable per css value to catch whether values
        are specified as floats or integers.

        Test: fast/css/rgb-float.html

        * css/CSSGrammar.y:
        * css/cssparser.cpp:
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::lex):
        * css/cssparser.h:
        * css/tokenizer.flex:

2006-05-13  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Hyatt, landed by ap.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=7604
        calcAbsoluteHorizontalValues() is being getting passed arguments
        in the wrong order in calcAbsoluteHorizontal()

        Cleans up the RenderBox code for absolutely positioned elements
        and adds new functions for replaced absolutely positioned 
        elements. Now uses Length so that magic number -666666 for 
        auto lengths is no longer used.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteVerticalValues): 
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced): Handle replaced
        case separately.
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced): ditto.
        * rendering/RenderBox.h:

2006-05-12  David Hyatt  <hyatt@apple.com>

        Bug 8880, remove the remaining drawing/hit testing code from
        FontData.

        Reviewed by tim h

        * platform/Font.cpp:
        (WebCore::m_finalRoundingWidth):
        (WebCore::WidthIterator::advanceOneCharacter):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::offsetForPosition):
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/Font.h:
        (WebCore::TextRun::makeComplete):
        * platform/FontData.h:
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::clear):
        * platform/mac/FontData.mm:
        * platform/mac/FontMac.mm:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):

2006-05-12  Kevin M. Ollivier  <kevino@theolliviers.com>

        Reviewed by Maciej.

        Add missing include.
        
        * dom/Node.h: Add missing include for DeprecatedString.

2006-05-12  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8835
          REGRESSION: Line moves but selection highlight stays behind

        Test: fast/dynamic/selection-highlight-adjust.html

        * rendering/render_line.cpp:
        (WebCore::RootInlineBox::adjustPosition): Adjust m_selectionTop
        and m_selectionBottom.

2006-05-12  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=7156
        Bug 7156: TinyMCE: Links are actually activated in editable area, not editable.
        
        Links in editable areas will not activate or perform a navigation
        change (on par with WinIE and Firefox.) To visit the link
        you can shift-click. Manual test added.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::setActive):
        * html/HTMLAnchorElement.h:
        * manual-tests/contenteditable-link.html: Added.
        * page/FrameView.cpp:
        (WebCore::selectCursor):

2006-05-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by timo.

        Split out html_inlineimpl.* into separate files (one per class).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_html.cpp:
        * bindings/objc/DOMHTML.mm:
        * editing/CreateLinkCommand.cpp:
        * editing/UnlinkCommand.cpp:
        * html/HTMLAnchorElement.cpp: Added.
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        * html/HTMLAnchorElement.h: Added.
        * html/HTMLBRElement.cpp: Added.
        * html/HTMLBRElement.h: Added.
        * html/HTMLElementFactory.cpp:
        * html/HTMLFontElement.cpp: Added.
        (WebCore::HTMLFontElement::HTMLFontElement):
        (WebCore::HTMLFontElement::setColor):
        (WebCore::HTMLFontElement::setFace):
        (WebCore::HTMLFontElement::setSize):
        * html/HTMLFontElement.h: Added.
        * html/HTMLModElement.cpp: Added.
        (WebCore::HTMLModElement::setCite):
        (WebCore::HTMLModElement::setDateTime):
        * html/HTMLModElement.h: Added.
        * html/HTMLQuoteElement.cpp: Added.
        * html/HTMLQuoteElement.h: Added.
        * html/html_imageimpl.h:
        * html/html_inlineimpl.cpp: Removed.
        * html/html_inlineimpl.h: Removed.
        * page/FrameView.cpp:

2006-05-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Fix build error.

        * rendering/InlineFlowBox.cpp:
        * rendering/RootInlineBox.cpp:

2006-05-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Split out render_line.* into separate files (one per class).

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        * rendering/EllipsisBox.cpp: Added.
        * rendering/EllipsisBox.h: Added.
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/InlineBox.cpp: Added.
        * rendering/InlineBox.h: Added.
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::~InlineBox):
        (WebCore::InlineBox::bottomOverflow):
        (WebCore::InlineBox::rightOverflow):
        * rendering/InlineFlowBox.cpp: Added.
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        * rendering/InlineFlowBox.h: Added.
        * rendering/InlineRunBox.h: Added.
        (WebCore::InlineRunBox::InlineRunBox):
        (WebCore::InlineRunBox::paintBackgroundAndBorder):
        (WebCore::InlineRunBox::paintDecorations):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderFlow.h:
        * rendering/RenderReplaced.cpp:
        * rendering/RootInlineBox.cpp: Added.
        * rendering/RootInlineBox.h: Added.
        (WebCore::RootInlineBox::RootInlineBox):
        * rendering/render_line.h: Removed.

2006-05-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Split out table_layout.* into separate files (one per class).
        Search replace instance variables "foo" with "m_foo" to comply with modern style.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/AutoTableLayout.cpp: Added.
        (WebCore::AutoTableLayout::AutoTableLayout):
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::AutoTableLayout::calcMinMaxWidth):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::insertSpanCell):
        (WebCore::AutoTableLayout::layout):
        (WebCore::AutoTableLayout::calcPercentages):
        * rendering/AutoTableLayout.h: Added.
        (WebCore::AutoTableLayout::totalPercent):
        (WebCore::AutoTableLayout::Layout::Layout):
        * rendering/FixedTableLayout.cpp: Added.
        (WebCore::FixedTableLayout::FixedTableLayout):
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::calcMinMaxWidth):
        (WebCore::FixedTableLayout::layout):
        * rendering/FixedTableLayout.h: Added.
        * rendering/RenderTable.cpp:
        * rendering/TableLayout.h: Added.
        (WebCore::TableLayout::TableLayout):
        * rendering/table_layout.cpp: Removed.
        * rendering/table_layout.h: Removed.

2006-05-12  David Hyatt  <hyatt@apple.com>

        Bug 8877.  Change form controls and the bridge entry points from the
        Safari UI to use Font instead of FontData.

        Reviewed by mjs

        * bridge/mac/WebCoreStringTruncator.mm:
        (stringWidth):
        (truncateString):
        (+[WebCoreStringTruncator widthOfString:font:]):
        (+[WebCoreStringTruncator clear]):
        * kwq/KWQComboBox.mm:
        (QComboBox::sizeHint):
        * kwq/KWQLineEdit.mm:
        (QLineEdit::sizeForCharacterWidth):
        * kwq/KWQListBox.mm:
        (itemTextRenderer):
        (groupLabelTextRenderer):
        (QListBox::sizeForNumberOfLines):
        (QListBox::clearCachedTextRenderers):
        (-[KWQTableView drawRow:clipRect:]):
        * platform/Font.cpp:
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawText):
        * platform/Font.h:
        (WebCore::TextStyle::disableRoundingHacks):
        (WebCore::TextStyle::setRTL):
        * platform/FontData.h:
        * platform/FontFallbackList.h:
        * platform/FontPlatformData.h:
        (WebCore::FontPlatformData::syntheticOblique):
        * platform/Pen.h:
        * platform/mac/FontData.mm:
        (WebCore::FontData::smallCapsFontData):
        (WebCore::findSubstituteRenderer):
        * platform/mac/FontMac.mm:
        (WebCore::FontFallbackList::setPlatformFont):
        (WebCore::m_wordSpacing):
        (WebCore::Font::drawComplexText):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        (WebCoreTextFloatWidth):
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawText):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::positionForOffset):

2006-05-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by kevin.

        Move render_button to RenderButton.
        Various small style cleanup.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLButtonElement.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLGenericFormElement.cpp:
        * html/HTMLInputElement.cpp:
        * platform/mac/WebCoreTextArea.mm:
        * rendering/RenderApplet.h:
        * rendering/RenderBox.cpp:
        * rendering/RenderButton.cpp: Added.
        (WebCore::RenderButton::RenderButton):
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::removeChild):
        * rendering/RenderButton.h: Added.
        * rendering/RenderEmptyApplet.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderTreeAsText.cpp:
        * rendering/render_button.cpp: Removed.
        * rendering/render_button.h: Removed.
        * rendering/table_layout.cpp:
        (WebCore::FixedTableLayout::FixedTableLayout):
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::calcMinMaxWidth):
        (WebCore::FixedTableLayout::layout):
        (WebCore::AutoTableLayout::AutoTableLayout):
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::AutoTableLayout::calcMinMaxWidth):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::insertSpanCell):
        (WebCore::AutoTableLayout::layout):
        * rendering/table_layout.h:
        (WebCore::TableLayout::TableLayout):
        (WebCore::AutoTableLayout::totalPercent):
        (WebCore::AutoTableLayout::Layout::Layout):

2006-05-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Split render_frames.* render_replaced.* and html_baseimpl.* into separate files (one class per file).
        http://bugs.webkit.org/show_bug.cgi?id=8878

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocumentProtoFunc::callAsFunction):
        (KJS::JSHTMLDocument::namedItemGetter):
        (KJS::JSHTMLDocument::getValueProperty):
        (KJS::JSHTMLDocument::getOwnPropertySlot):
        (KJS::JSHTMLDocument::putValueProperty):
        (KJS::JSHTMLElement::formIndexGetter):
        (KJS::JSHTMLElement::formNameGetter):
        (KJS::JSHTMLElement::selectIndexGetter):
        (KJS::JSHTMLElement::framesetNameGetter):
        (KJS::JSHTMLElement::runtimeObjectGetter):
        (KJS::JSHTMLElement::runtimeObjectPropertyGetter):
        (KJS::JSHTMLElement::getOwnPropertySlot):
        (KJS::JSHTMLElement::implementsCall):
        (KJS::JSHTMLElement::callAsFunction):
        (KJS::JSHTMLElement::getValueProperty):
        (KJS::JSHTMLElement::toString):
        (KJS::getForm):
        (KJS::JSHTMLElement::pushEventHandlerScope):
        (KJS::HTMLElementFunction::callAsFunction):
        (KJS::JSHTMLElement::put):
        (KJS::JSHTMLElement::selectSetter):
        (KJS::JSHTMLElement::putValueProperty):
        (KJS::toHTMLElement):
        (KJS::toHTMLTableCaptionElement):
        (KJS::toHTMLTableSectionElement):
        (KJS::JSHTMLCollection::lengthGetter):
        (KJS::JSHTMLCollection::indexGetter):
        (KJS::JSHTMLCollection::nameGetter):
        (KJS::JSHTMLCollection::getOwnPropertySlot):
        (KJS::HTMLCollectionProtoFunc::callAsFunction):
        (KJS::JSHTMLSelectCollection::selectedIndexGetter):
        (KJS::JSHTMLSelectCollection::put):
        (KJS::OptionConstructorImp::construct):
        (KJS::getSelectHTMLCollection):
        * bindings/objc/DOMHTML.mm:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::createFrame):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge copyRenderNode:copier:]):
        * dom/Document.cpp:
        (WebCore::widgetForNode):
        * html/HTMLBodyElement.cpp: Added.
        (WebCore::HTMLBodyElement::HTMLBodyElement):
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLBodyElement.h: Added.
        * html/HTMLDocument.cpp:
        * html/HTMLElementFactory.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFrameElement.cpp: Added.
        (WebCore::HTMLFrameElement::isURLAllowed):
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        (WebCore::HTMLFrameElement::setLocation):
        * html/HTMLFrameElement.h: Added.
        * html/HTMLFrameSetElement.cpp: Added.
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::attach):
        (WebCore::HTMLFrameSetElement::defaultEventHandler):
        (WebCore::HTMLFrameSetElement::recalcStyle):
        * html/HTMLFrameSetElement.h: Added.
        * html/HTMLHeadElement.cpp: Added.
        (WebCore::HTMLHeadElement::HTMLHeadElement):
        * html/HTMLHeadElement.h: Added.
        * html/HTMLHtmlElement.cpp: Added.
        (WebCore::HTMLHtmlElement::HTMLHtmlElement):
        * html/HTMLHtmlElement.h: Added.
        * html/HTMLIFrameElement.cpp: Added.
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        * html/HTMLIFrameElement.h: Added.
        * html/HTMLObjectElement.cpp:
        * html/HTMLParser.cpp:
        * html/html_baseimpl.cpp: Removed.
        * html/html_baseimpl.h: Removed.
        * kwq/WebCoreAXObject.mm:
        * page/Frame.cpp:
        (WebCore::isFrameElement):
        (WebCore::Frame::applyEditingStyleToBodyElement):
        (WebCore::Frame::removeEditingStyleFromBodyElement):
        (WebCore::Frame::applyEditingStyleToElement):
        (WebCore::Frame::removeEditingStyleFromElement):
        (WebCore::Frame::selectionRect):
        (WebCore::Frame::isFrameSet):
        (WebCore::scanForForm):
        (WebCore::Frame::currentForm):
        (WebCore::Frame::nodeInfoAtPoint):
        (WebCore::Frame::adjustPageHeight):
        (WebCore::Frame::frameForWidget):
        (WebCore::Frame::forceLayoutWithPageWidthRange):
        (WebCore::Frame::passWidgetMouseDownEventToWidget):
        * page/FrameView.cpp:
        * rendering/RenderFrame.cpp: Added.
        (WebCore::RenderFrame::viewCleared):
        * rendering/RenderFrame.h: Added.
        * rendering/RenderFrameSet.cpp: Added.
        (WebCore::RenderFrameSet::RenderFrameSet):
        (WebCore::RenderFrameSet::~RenderFrameSet):
        (WebCore::RenderFrameSet::layout):
        (WebCore::RenderFrameSet::positionFrames):
        (WebCore::RenderFrameSet::userResize):
        (WebCore::RenderFrameSet::canResize):
        (WebCore::RenderFrameSet::dump):
        * rendering/RenderFrameSet.h: Added.
        * rendering/RenderImage.h:
        * rendering/RenderPart.cpp: Added.
        (WebCore::RenderPart::RenderPart):
        * rendering/RenderPart.h: Added.
        * rendering/RenderPartObject.cpp: Added.
        (WebCore::isURLAllowed):
        (WebCore::RenderPartObject::updateWidget):
        (WebCore::RenderPartObject::viewCleared):
        * rendering/RenderPartObject.h: Added.
        * rendering/RenderReplaced.cpp: Added.
        (WebCore::RenderReplaced::selectionColor):
        * rendering/RenderReplaced.h: Added.
        * rendering/RenderWidget.cpp: Added.
        (WebCore::RenderWidget::deleteWidget):
        * rendering/RenderWidget.h: Added.
        * rendering/render_form.h:
        * rendering/render_frames.cpp: Removed.
        * rendering/render_frames.h: Removed.
        * rendering/render_replaced.cpp: Removed.
        * rendering/render_replaced.h: Removed.

2006-05-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Split html_headimpl.* into separate files (one per class)
        http://bugs.webkit.org/show_bug.cgi?id=8875

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::headGetter):
        (KJS::JSHTMLElement::linkGetter):
        * bindings/objc/DOMCSS.mm:
        (+[DOMCounter _counterWith:]):
        (-[DOMCounter finalize]):
        (-[DOMCounter _DOMStyleSheet]):
        (-[DOMStyleSheet _initWithStyleSheet:]):
        (-[DOMStyleSheetList dealloc]):
        (-[DOMStyleSheetList finalize]):
        (-[DOMStyleSheetList _styleSheetList]):
        (-[DOMStyleSheetList _initWithStyleSheetList:]):
        (-[DOMCSSStyleSheet _CSSStyleSheet]):
        (-[DOMMediaList dealloc]):
        (-[DOMMediaList finalize]):
        (-[DOMMediaList _mediaList]):
        (-[DOMMediaList _initWithMediaList:]):
        (-[DOMCSSRuleList dealloc]):
        (-[DOMCSSRuleList finalize]):
        (-[DOMCSSRuleList _ruleList]):
        (-[DOMCSSRuleList _initWithRuleList:]):
        (-[DOMCSSRule dealloc]):
        (-[DOMCSSRule finalize]):
        (-[DOMCSSRule _rule]):
        (-[DOMCSSRule _initWithRule:]):
        (-[DOMCSSStyleRule _styleRule]):
        (-[DOMCSSMediaRule _mediaRule]):
        (-[DOMCSSFontFaceRule _fontFaceRule]):
        (-[DOMCSSPageRule _pageRule]):
        (-[DOMCSSImportRule _importRule]):
        (-[DOMCSSCharsetRule _importRule]):
        (-[DOMCSSStyleDeclaration dealloc]):
        (-[DOMCSSStyleDeclaration finalize]):
        (-[DOMCSSStyleDeclaration _initWithStyleDeclaration:]):
        (-[DOMCSSStyleDeclaration _styleDeclaration]):
        (-[DOMCSSValue dealloc]):
        (-[DOMCSSValue finalize]):
        (-[DOMCSSValue _value]):
        (-[DOMCSSValue _initWithValue:]):
        (-[DOMCSSPrimitiveValue _primitiveValue]):
        (-[DOMCSSValueList _valueList]):
        (getWrapperForRGB):
        (setWrapperForRGB):
        (removeWrapperForRGB):
        (-[DOMRGBColor _initWithRGB:]):
        (-[DOMRect dealloc]):
        (-[DOMRect finalize]):
        (-[DOMRect _rect]):
        (-[DOMRect _initWithRect:]):
        (-[DOMCounter dealloc]):
        (-[DOMCounter _counter]):
        (-[DOMCounter _initWithCounter:]):
        (-[DOMObject sheet]):
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLCollection dealloc]):
        (-[DOMHTMLCollection finalize]):
        (-[DOMHTMLCollection _collection]):
        (-[DOMHTMLCollection _initWithCollection:]):
        (-[DOMHTMLOptionsCollection dealloc]):
        (-[DOMHTMLOptionsCollection finalize]):
        (-[DOMHTMLOptionsCollection _initWithOptionsCollection:]):
        (-[DOMHTMLOptionsCollection _optionsCollection]):
        (+[DOMHTMLElement _elementWith:]):
        (-[DOMHTMLElement _HTMLElement]):
        (-[DOMHTMLDocument _HTMLDocument]):
        (-[DOMHTMLHtmlElement _HTMLHtmlElement]):
        (-[DOMHTMLHeadElement _headElement]):
        (-[DOMHTMLLinkElement _linkElement]):
        (-[DOMHTMLTitleElement _titleElement]):
        (-[DOMHTMLMetaElement _metaElement]):
        (-[DOMHTMLBaseElement _baseElement]):
        (-[DOMHTMLStyleElement _styleElement]):
        (-[DOMHTMLBodyElement _bodyElement]):
        (-[DOMHTMLFormElement _formElement]):
        (+[DOMHTMLFormElement _formElementWith:]):
        (-[DOMHTMLIsIndexElement _isIndexElement]):
        (-[DOMHTMLSelectElement _selectElement]):
        (-[DOMHTMLOptGroupElement _optGroupElement]):
        (-[DOMHTMLOptionElement _optionElement]):
        (-[DOMHTMLInputElement _inputElement]):
        (-[DOMHTMLTextAreaElement _textAreaElement]):
        (-[DOMHTMLButtonElement _buttonElement]):
        (-[DOMHTMLLabelElement _labelElement]):
        (-[DOMHTMLLabelElement form]):
        (-[DOMHTMLFieldSetElement _fieldSetElement]):
        (-[DOMHTMLLegendElement _legendElement]):
        (-[DOMHTMLUListElement _uListElement]):
        (-[DOMHTMLOListElement _oListElement]):
        (-[DOMHTMLDListElement _dListElement]):
        (-[DOMHTMLDirectoryElement _directoryListElement]):
        (-[DOMHTMLMenuElement _menuListElement]):
        (-[DOMHTMLLIElement _liElement]):
        (-[DOMHTMLQuoteElement _quoteElement]):
        (-[DOMHTMLDivElement _divElement]):
        (-[DOMHTMLParagraphElement _paragraphElement]):
        (-[DOMHTMLHeadingElement _headingElement]):
        (-[DOMHTMLPreElement _preElement]):
        (-[DOMHTMLBRElement _BRElement]):
        (-[DOMHTMLBaseFontElement _baseFontElement]):
        (-[DOMHTMLFontElement _fontElement]):
        (-[DOMHTMLHRElement _HRElement]):
        (-[DOMHTMLModElement _modElement]):
        (-[DOMHTMLAnchorElement _anchorElement]):
        (-[DOMHTMLImageElement _imageElement]):
        (-[DOMHTMLObjectElement _objectElement]):
        (-[DOMHTMLParamElement _paramElement]):
        (-[DOMHTMLMapElement _mapElement]):
        (-[DOMHTMLAreaElement _areaElement]):
        (-[DOMHTMLScriptElement _scriptElement]):
        (+[DOMHTMLTableCaptionElement _tableCaptionElementWith:]):
        (-[DOMHTMLTableCaptionElement _tableCaptionElement]):
        (+[DOMHTMLTableSectionElement _tableSectionElementWith:]):
        (-[DOMHTMLTableSectionElement _tableSectionElement]):
        (-[DOMHTMLTableElement createTHead]):
        (-[DOMHTMLTableElement createTFoot]):
        (-[DOMHTMLTableElement createCaption]):
        (-[DOMHTMLTableElement insertRow:]):
        (+[DOMHTMLTableElement _tableElementWith:]):
        (-[DOMHTMLTableElement _tableElement]):
        (-[DOMHTMLTableColElement _tableColElement]):
        (-[DOMHTMLTableRowElement _tableRowElement]):
        (-[DOMHTMLTableRowElement insertCell:]):
        (+[DOMHTMLTableCellElement _tableCellElementWith:]):
        (-[DOMHTMLTableCellElement _tableCellElement]):
        (-[DOMHTMLFrameSetElement _frameSetElement]):
        (-[DOMHTMLFrameElement _frameElement]):
        (-[DOMHTMLIFrameElement _IFrameElement]):
        (-[DOMHTMLEmbedElement _embedElement]):
        (viewForElement):
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::searchForLabelsAboveCell):
        (WebCore::FrameMac::searchForLabelsBeforeElement):
        (WebCore::FrameMac::createFrame):
        (WebCore::FrameMac::passMouseDownEventToWidget):
        (WebCore::FrameMac::passSubframeEventToSubframe):
        (WebCore::FrameMac::passWheelEventToChildWidget):
        (WebCore::FrameMac::fileWrapperForElement):
        (WebCore::listParent):
        (WebCore::FrameMac::attributedString):
        (WebCore::FrameMac::shouldBeginEditing):
        (WebCore::FrameMac::shouldEndEditing):
        (WebCore::FrameMac::setMarkedTextRange):
        * dom/Document.cpp:
        * dom/xml_tokenizer.cpp:
        * html/HTMLBaseElement.cpp: Added.
        (WebCore::HTMLBaseElement::removedFromDocument):
        (WebCore::HTMLBaseElement::process):
        * html/HTMLBaseElement.h: Added.
        * html/HTMLDocument.cpp:
        * html/HTMLElementFactory.cpp:
        * html/HTMLLinkElement.cpp: Added.
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.h: Added.
        * html/HTMLMetaElement.cpp: Added.
        (WebCore::HTMLMetaElement::HTMLMetaElement):
        (WebCore::HTMLMetaElement::parseMappedAttribute):
        (WebCore::HTMLMetaElement::process):
        (WebCore::HTMLMetaElement::setContent):
        (WebCore::HTMLMetaElement::setHttpEquiv):
        (WebCore::HTMLMetaElement::setName):
        * html/HTMLMetaElement.h: Added.
        * html/HTMLParser.cpp:
        * html/HTMLScriptElement.cpp: Added.
        (WebCore::HTMLScriptElement::HTMLScriptElement):
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::evaluateScript):
        * html/HTMLScriptElement.h: Added.
        * html/HTMLStyleElement.cpp: Added.
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        * html/HTMLStyleElement.h: Added.
        * html/HTMLTitleElement.cpp: Added.
        (WebCore::HTMLTitleElement::HTMLTitleElement):
        (WebCore::HTMLTitleElement::text):
        (WebCore::HTMLTitleElement::setText):
        * html/HTMLTitleElement.h: Added.
        * html/html_headimpl.cpp: Removed.
        * html/html_headimpl.h: Removed.
        * loader/CachedCSSStyleSheet.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::updateFromElement):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::updateFromElement):

2006-05-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Split out html_tableimpl.* into multiple files (one per class)
        http://bugs.webkit.org/show_bug.cgi?id=8873

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLTableCaptionElement.cpp: Added.
        (WebCore::HTMLTableCaptionElement::HTMLTableCaptionElement):
        * html/HTMLTableCaptionElement.h: Added.
        * html/HTMLTableCellElement.cpp: Added.
        (WebCore::HTMLTableCellElement::HTMLTableCellElement):
        * html/HTMLTableCellElement.h: Added.
        * html/HTMLTableColElement.cpp: Added.
        (WebCore::HTMLTableColElement::HTMLTableColElement):
        (WebCore::HTMLTableColElement::endTagRequirement):
        (WebCore::HTMLTableColElement::tagPriority):
        (WebCore::HTMLTableColElement::checkDTD):
        * html/HTMLTableColElement.h: Added.
        * html/HTMLTableElement.cpp: Added.
        (WebCore::HTMLTableElement::HTMLTableElement):
        (WebCore::HTMLTableElement::setCaption):
        (WebCore::HTMLTableElement::setTHead):
        (WebCore::HTMLTableElement::setTFoot):
        (WebCore::HTMLTableElement::setTBody):
        (WebCore::HTMLTableElement::createTHead):
        (WebCore::HTMLTableElement::deleteTHead):
        (WebCore::HTMLTableElement::createTFoot):
        (WebCore::HTMLTableElement::deleteTFoot):
        (WebCore::HTMLTableElement::createCaption):
        (WebCore::HTMLTableElement::deleteCaption):
        (WebCore::HTMLTableElement::insertRow):
        (WebCore::HTMLTableElement::deleteRow):
        (WebCore::HTMLTableElement::addChild):
        (WebCore::HTMLTableElement::parseMappedAttribute):
        (WebCore::HTMLTableElement::attach):
        * html/HTMLTableElement.h: Added.
        * html/HTMLTablePartElement.cpp: Added.
        (WebCore::HTMLTablePartElement::parseMappedAttribute):
        * html/HTMLTablePartElement.h: Added.
        * html/HTMLTableRowElement.cpp: Added.
        (WebCore::HTMLTableRowElement::HTMLTableRowElement):
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableRowElement.h: Added.
        * html/HTMLTableSectionElement.cpp: Added.
        (WebCore::HTMLTableSectionElement::insertRow):
        * html/HTMLTableSectionElement.h: Added.
        * html/html_tableimpl.cpp: Removed.
        * html/html_tableimpl.h: Removed.

2006-05-10  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs & adele.

        Split html_objectimpl.* into multiple files (one per class)
        http://bugs.webkit.org/show_bug.cgi?id=8836

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNamedNodeMap::lengthGetter):
        (KJS::DOMNamedNodeMap::indexGetter):
        (KJS::DOMNamedNodeMap::nameGetter):
        (KJS::DOMNamedNodeMapProtoFunc::callAsFunction):
        (KJS::getRuntimeObject):
        * bindings/js/kjs_html.cpp:
        * html/HTMLAppletElement.cpp: Added.
        * html/HTMLAppletElement.h: Added.
        * html/HTMLElementFactory.cpp:
        * html/HTMLEmbedElement.cpp: Added.
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        (WebCore::HTMLEmbedElement::getInstance):
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        * html/HTMLEmbedElement.h: Added.
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::traverseNextItem):
        * html/HTMLObjectElement.cpp: Added.
        (WebCore::HTMLObjectElement::getInstance):
        (WebCore::HTMLObjectElement::form):
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        * html/HTMLObjectElement.h: Added.
        * html/HTMLParamElement.cpp: Added.
        * html/HTMLParamElement.h: Added.
        * html/HTMLParser.cpp:
        * html/HTMLPlugInElement.cpp: Added.
        * html/HTMLPlugInElement.h: Added.
        * html/html_objectimpl.cpp: Removed.
        * html/html_objectimpl.h: Removed.
        * page/Frame.cpp:
        (WebCore::Frame::handleFallbackContent):
        * rendering/RenderApplet.cpp:
        * rendering/render_frames.cpp:
        (WebCore::RenderPartObject::updateWidget):

2006-05-12  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8521
          crash bringing up context menu with CSS generated content

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::sendContextMenuEvent):
        Added a null check.

        * manual-tests/context-click-generated-content.html: Added.

2006-05-12  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8715
          REGRESSION: Caret to the right of an image is a big black rectangle.

        * rendering/RenderBox.cpp: (WebCore::RenderBox::caretRect): Move caret to the
        right side of the rect when the offset is non-zero, rather than expanding it.

        * manual-tests/caret-image.html: Added.

2006-05-12  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Anders.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=8866
          REGRESSION: Incorrect caret position in RTL text

        Test: fast/text/international/rtl-caret.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::positionForOffset): Added missing m_toAdd argument.

2006-05-12  David Hyatt  <hyatt@apple.com>

        Bug 8864. Lift WebCoreTextStyle up into the API (as TextStyle).

        Reviewed by mjs

        * platform/Font.cpp:
        (WebCore::m_finalRoundingWidth):
        (WebCore::WidthIterator::advance):
        (WebCore::Font::width):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::floatWidthForSimpleText):
        * platform/Font.h:
        (WebCore::TextStyle::m_attemptFontSubstitution):
        (WebCore::TextStyle::tabWidth):
        (WebCore::TextStyle::xPos):
        (WebCore::TextStyle::padding):
        (WebCore::TextStyle::rtl):
        (WebCore::TextStyle::ltr):
        (WebCore::TextStyle::directionalOverride):
        (WebCore::TextStyle::applyRunRounding):
        (WebCore::TextStyle::applyWordRounding):
        (WebCore::TextStyle::attemptFontSubstitution):
        (WebCore::Font::operator==):
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawHighlightForText):
        * platform/GraphicsContext.h:
        * platform/mac/FontMac.mm:
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPosition):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::calcMinMaxWidth):
        (WebCore::RenderText::width):
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::calcMinMaxWidth):
        * rendering/render_line.cpp:
        (WebCore::EllipsisBox::paint):

2006-05-11  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=8770
          XMLHttpRequest should strip CR/LF characters from the URL

        Test: fast/loader/url-strip-cr-lf-tab.html

        * platform/KURL.cpp:
        (appendEscapingBadChars): Strip CR, LF and TAB, as Firefox and IE do.

2006-05-11  David Hyatt  <hyatt@apple.com>

        Remove the misspelling drawing code from Font and FontData.  Implement it
        natively in GraphicContext instead.

        Reviewed by maciej

        * platform/FontData.h:
        * platform/GraphicsContext.cpp:
        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForMisspelling):
        * platform/mac/FontData.mm:
        * platform/mac/FontMac.mm:
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForMisspelling):
        * platform/win/FontWin.cpp:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingMarker):

2006-05-11  David Hyatt  <hyatt@apple.com>

        Remove drawLineForText from the Font API.  Implement it natively in
        the two GraphicsContexts (CG and Cairo) instead.

        Reviewed by maciej

        * platform/Font.h:
        * platform/FontData.h:
        * platform/GraphicsContext.cpp:
        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/mac/FontData.mm:
        * platform/mac/FontMac.mm:
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawLineForText):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintMarkedTextUnderline):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::paintDecorations):

2006-05-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by eric.

        Fix last fix.

        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedName):

2006-05-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by eric.

        Fix crash on static constructors builds at exit due to qualified name default constructor not
        initializing m_impl.

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::deref):

2006-05-11  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt

        - fix http://bugs.webkit.org/show_bug.cgi?id=8851
          REGRESSION: RTL text shifted to the right

        Already covered by several tests in fast/text

        * platform/Font.h:
        (WebCore::TextRun::TextRun): Added length parameter.
        * rendering/InlineTextBox.cpp: Pass the length to the TextRun constructor.
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache): Pass length and from instead of from and to
        to the TextRun constructor.
        (WebCore::RenderText::width): Ditto.

2006-05-11  David Hyatt  <hyatt@apple.com>

        Fix a regression from the TextRun landing.  Delete the characters in
        the adjustedRun, not the ones in the original run!

        Reviewed by beth

        * platform/mac/FontMac.mm:
        (WebCore::Font::drawComplexText):

2006-05-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher, levi

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        Removed a use fragment.hasMoreThanOneBlock to decide if the paragraph containing the
        position pasted into must be split to avoid block nesting.  We now split unnecessarily
        some times, but the end merge cleans up for us.

2006-05-11  David Hyatt  <hyatt@apple.com>

        This patch makes drawHighlightForText a completely cross-platform method
        implemented by the GraphicsContext.  The platform-specific implementations
        of the method in the Font class have been eliminated.

        Reviewed by andersca

        * platform/Font.h:
        * platform/FontData.h:
        Remove the drawHighlight methods.  Change the selectionRect method in
        Font to return a FloatRect so that the GraphicsContext can do an accurate
        fill.

        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawHighlightForText):
        Implement the drawHighlightFunction in terms of the cross-platform
        Font selectionRect functions and a new float-based fillRect graphics context
        function.

        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillRect):
        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):
        Add the new float-based fillRect function for Cairo and CG.

        * platform/mac/FontData.mm:
        (WebCore::CG_draw):
        (WebCore::ATSU_draw):
        Removed the CG and ATSU drawHighlight methods.  Remove the drawing of
        the background from the deprecated draw methods (they'll be removed
        soon).

        * platform/mac/FontMac.mm:
        (WebCore::Font::selectionRectForText):
        * platform/win/FontWin.cpp:
        (WebCore::Font::selectionRectForText):
        Change selectionRectForText to return a FloatRect instead of an IntRect,
        so that the GraphicsContext can do a precise fill.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::positionForOffset):
        Modify the callers who expect an int-based selection rect so that they call
        enclosingIntRect.

2006-05-11  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - http://bugs.webkit.org/show_bug.cgi?id=8743
          REGRESSION: focus() on input field selects all text within it
          (was: cannot select cities on British Rail reservation site)

        Test: fast/forms/double-focus.html

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::focus):
        Changed to only call setFocusNode, select, and revealSelection
        if the element is not already focused. Also changed to use return
        a bit more rather than else.

2006-05-11  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher (earlier version).

        - http://bugs.webkit.org/show_bug.cgi?id=8821
          use the preprocessor for IDL files

        * bindings/scripts/IDLParser.pm: Invoke the preprocessor via the "gcc"
        driver script, passing "-E" so we only preprocess, "-P" so we don't get
        "#line" directives, and "-x c++" so we handle both C and C++ comments.
        Removed the code to eliminate comments since the preprocessor handles that.
        * css/make-css-file-arrays.pl: This already invoked the preprocessor, but
        updated it to do the same way as above.

2006-05-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=7838
        Add support for mozilla-style node constructors as properties of the window object
        
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add new generated files.
        
        * bindings/js/JSCanvasRenderingContext2DBase.cpp:
        (WebCore::JSCanvasRenderingContext2DBaseProtoFunc::callAsFunction):
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSWrapper):
        Specify the KJS namespace for JSHTMLElmement.
                
        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        Create a WebCore::JSHTMLDocument for document nodes. Also, create
        JSDocumentFragments for document fragments (instead of plain node objects).
        
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocumentProtoFunc::callAsFunction):
        (KJS::JSHTMLDocument::JSHTMLDocument):
        (KJS::JSHTMLDocument::getOwnPropertySlot):
        Add a prototype for JSHTMLDocument and move all functions there.
        
        (KJS::JSHTMLElement::JSHTMLElement):
        (KJS::JSHTMLElement::getOwnPropertySlot):
        Update since JSHTMLElement now inherits from WebCore::JSHTMLElement.
        
        (KJS::JSHTMLElement::getValueProperty):
        (KJS::JSHTMLElement::putValueProperty):
        Remove title setter and getter. Those are autogenerated now.
        
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        Inherit from WebCore::JSHTMLElement. Clarify the inheritance chain.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        Always generate a prototype object, regardless of whether the object has any functions or
        constants.
        
        Use the type of generator attributes to determine what constructor to use. This is useful for
        the XMLDocument property in DOMWindow.idl, since that's just an alias for the Document constructor.
        
        * dom/DocumentFragment.idl: Added.        
        * html/HTMLDocument.idl: Added.
        * html/HTMLElement.idl: Added.
        
        * page/DOMWindow.idl:
        Add constructors for DocumentFragment, HTMLElement, HTMLDocument and XMLDocument. XMLDocument is just
        an alias for the Document constructor.
        
2006-05-11  David Hyatt  <hyatt@apple.com>

        Bug 8845.  Define a TextRun (similar to the old WebCoreTextRun) and
        make it the new API for Font and GraphicsContext when drawing/measuring
        text.

        Reviewed by andersca

        * platform/Font.cpp:
        (WebCore::m_finalRoundingWidth):
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::normalizeVoicingMarks):
        (WebCore::Font::width):
        (WebCore::Font::canUseGlyphCache):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::floatWidthForSimpleText):
        * platform/Font.h:
        (WebCore::TextRun::m_to):
        (WebCore::TextRun::operator[]):
        (WebCore::TextRun::data):
        (WebCore::TextRun::adjustFrom):
        (WebCore::TextRun::adjustTo):
        (WebCore::TextRun::characters):
        (WebCore::TextRun::length):
        (WebCore::TextRun::from):
        (WebCore::TextRun::to):
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawHighlightForText):
        * platform/GraphicsContext.h:
        * platform/mac/FontMac.mm:
        (WebCore::addDirectionalOverride):
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::checkSelectionPoint):
        * platform/win/FontWin.cpp:
        (WebCore::hackishExtentForString):
        (WebCore::Font::floatWidth):
        (WebCore::Font::drawText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::checkSelectionPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlock.cpp:
        (WebCore::stripTrailingSpace):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::cacheWidths):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedMinMaxWidth):
        (WebCore::RenderText::calcMinMaxWidth):
        (WebCore::RenderText::width):
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::calcMinMaxWidth):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::tabWidth):
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        * rendering/render_line.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::calcMinMaxWidth):
        (WebCore::RenderListMarker::getRelativeMarkerRect):

2006-05-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        Removed the code to find out if we must later add smart replace whitespace.  We can 
        wait until we've done the insertion to figure it out, and the position sampled (startPos)
        to make the decision about trailing whitespace was wrong.
        Changed the order that work is done during a paste: 1) Insert everything 2) Do one of
        the following: a) handle a trailing interchange newline, b) uncollapse the last incoming
        br if it has been collapsed because of quirks mode, c) do an end merge 3) Add smart replace
        whitespace (2 and 3 were reversed because the end merge must happen before we can know
        whether or not we need to add a trailing space).
        Don't do an end merge if the last node inserted was a br because the end merge will 
        clobber it.
        
        (WebCore::ReplaceSelectionCommand::removeEndBRIfNeeded):
        brs where [br, 0] is at the end of a block and not at the start of a paragraph
        are the ones that are collapsed because of quirks mode.

2006-05-10  David Hyatt  <hyatt@apple.com>

        Rename isSpace to treatAsSpace.  Move it and the rounding hack function into
        Font and make them static methods (inlined in the header).  Make the rounding
        hack character table a static member as well.  Remove the redundant space/rounding
        functions from FontData.mm.

        Reviewed by darin

        * platform/Font.cpp:
        (WebCore::):
        (WebCore::m_finalRoundingWidth):
        (WebCore::WidthIterator::advance):
        * platform/Font.h:
        (WebCore::Font::treatAsSpace):
        (WebCore::Font::isRoundingHackCharacter):
        * platform/mac/FontData.mm:
        (WebCore::overrideLayoutOperation):
        (WebCore::createATSULayoutParameters):
        (WebCore::initializeWidthIterator):
        (WebCore::advanceWidthIterator):
        * platform/mac/FontMac.mm:
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):

2006-05-10  Darin Adler  <darin@apple.com>

        * WebCore: Removed an extra WebCore subtree that somehow got checked in.

2006-05-10  David Carson <dacarson@gmail.com>

        - Fix for bug 8833. Removed inline keyword from functions declared
        in .mm and .cpp files. inline function code needs to reside in the
        header file for the linker to find the code. 
        http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.7

        Reviewed by Darin, landed by Timothy.

        * platform/Font.cpp:
        (WebCore::isSpace):
        * platform/mac/FontData.mm:
        (WebCore::widthForGlyph):
        (WebCore::isRoundingHackCharacter):
        (WebCore::glyphForCharacter):

2006-05-10  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8830
          REGRESSION: Words render on top of each other when fallback font is used

        Already covered by several pixel tests in fast/text

        * platform/Font.cpp:
        (WebCore::Font::drawSimpleText):

2006-05-10  David Hyatt  <hyatt@apple.com>

        Fix for bug 8809, lift the Mac-specific WebTextRenderer code for
        drawing and measuring of runs up into the Font class.  The fast code
        path is in Font.cpp and is designed to be mostly cross-platform.  The
        slow code path is in FontMac.cpp and is Mac-specific.

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Font.cpp:
        (WebCore::isSpace):
        (WebCore::):
        (WebCore::isRoundingHackCharacter):
        (WebCore::m_finalRoundingWidth):
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::normalizeVoicingMarks):
        (WebCore::Font::primaryFont):
        (WebCore::Font::setAlwaysUseComplexPath):
        (WebCore::Font::canUseGlyphCache):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::floatWidthForSimpleText):
        * platform/Font.h:
        * platform/FontData.h:
        (WebCore::FontData::platformData):
        * platform/GlyphBuffer.h: Added.
        (WebCore::GlyphBuffer::GlyphBuffer):
        (WebCore::GlyphBuffer::isEmpty):
        (WebCore::GlyphBuffer::size):
        (WebCore::GlyphBuffer::glyphs):
        (WebCore::GlyphBuffer::advances):
        (WebCore::GlyphBuffer::fontDataAt):
        (WebCore::GlyphBuffer::swap):
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        * platform/mac/FontData.mm:
        (WebCore::isSpace):
        (WebCore::isRoundingHackCharacter):
        (WebCore::FontData::widthForGlyph):
        (WebCore::m_ATSUMirrors):
        (WebCore::FontData::xHeight):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::findSubstituteFont):
        (WebCore::rendererForAlternateFont):
        (WebCore::findSubstituteRenderer):
        (WebCore::FontData::findSubstituteFontData):
        (WebCore::computeWidthForSpace):
        (WebCore::FontData::updateGlyphMapEntry):
        (WebCore::extendGlyphMap):
        (WebCore::extendWidthMap):
        (WebCore::createATSULayoutParameters):
        (WebCore::FontData::glyphForCharacter):
        (WebCore::advanceWidthIterator):
        (WebCore::shouldUseATSU):
        * platform/mac/FontMac.mm:
        (WebCore::ATSULayoutParameters::m_padPerSpace):
        (WebCore::addDirectionalOverride):
        (WebCore::initializeATSUStyle):
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):
        (WebCore::disposeATSULayoutParameters):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::drawGlyphs):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreSetAlwaysUseATSU):

2006-05-10  Darin Adler  <darin@apple.com>

        - another try at fixing the Windows build

        * platform/win/FontWin.cpp: (WebCore::getFontData): Use characters()
        instead of unicode().

== Rolled over to ChangeLog-2006-05-10 ==
