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  Dex Deacon  <occupant4@gmail.com>

        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  Kirby White  <KWhiteRight@gmail.com>

        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  MorganL  <morganl.webkit@yahoo.com>

        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  Marvin Decker  <marv.decker@gmail.com>

        Reviewed by Darin and Alexey.

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

        * 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  MorganL  <morganl.webkit@yahoo.com>

        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  Don Gibson  <dgibson77@gmail.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  MorganL  <morganl.webkit@yahoo.com>

        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  Don Gibson  <dgibson77@gmail.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  Kirby White  <KWhiteRight@gmail.com>

        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  Kirby White  <KWhiteRight@gmail.com>

        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  Don Gibson  <dgibson77@gmail.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  Don Gibson  <dgibson77@gmail.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  MorganL  <morganl.webkit@yahoo.com>

        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  Don Gibson  <dgibson77@gmail.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  Don Gibson  <dgibson77@gmail.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  Don Gibson  <dgibson77@gmail.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  MorganL  <morganl.webkit@yahoo.com>

        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 Don Gibson).

        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  MorganL  <morganl.webkit@yahoo.com>

        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  Don Gibson  <dgibson77@gmail.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  Don Gibson  <dgibson77@gmail.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  Don Gibson  <dgibson77@gmail.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  Marvin Decker  <marv.decker@gmail.com>

        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  Don Gibson  <dgibson77@gmail.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  MorganL  <morganl.webkit@yahoo.com>

        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  MorganL  <morganl.webkit@yahoo.com>

        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  MorganL  <morganl.webkit@yahoo.com>

        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  MorganL  <morganl.webkit@yahoo.com>

        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  MorganL  <morlmor@yahoo.com>

        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  MorganL  <morlmor@yahoo.com>

        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  MorganL  <morlmor@yahoo.com>

        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  MorganL  <morlmor@yahoo.com>

        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  MorganL  <morlmor@yahoo.com>

        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  MorganL  <morlmor@yahoo.com>

        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  MorganL  <morlmor@yahoo.com>

        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  MorganL  <morlmor@yahoocom>

        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  MorganL  <morlmor@yahoo.com>

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